spinny:~/writing $ less openfeature-feature-flags-progressive-delivery.md
12Deployment ialah apabila kod tiba dalam pengeluaran. Pelepasan adalah apabila seseorang benar-benar boleh menggunakannya. Mengelirukan kedua-duanya adalah salah satu cara terpantas untuk menjadikan setiap penempatan menjadi sedikit tegang.34feature flag berfungsi untuk meletakkan ruang di antara dua detik ini. Anda boleh menggunakan hari ini, mulakan esok untuk pasukan dalaman, kemudian untuk pelanggan perintis, kemudian untuk 10% pengguna. Jika berlaku masalah, matikan bendera. Anda tidak semestinya perlu menarik balik keseluruhan keluaran.56## Bendera bukan sekadar jika78Secara teknikal ia selalunya `if`. Secara budaya ia lebih banyak lagi.910```typescript11if (await flags.isEnabled('checkout.v2.enabled', context)) {12 return newCheckout(input);13}1415return oldCheckout(input);16```1718`if` kecil itu boleh mewakili pelancaran beransur-ansur, percubaan, penghijrahan, permit perusahaan atau kill switch operasi. Masalahnya ialah jika anda tidak menguruskannya dengan baik, ia juga boleh menjadi hutang teknikal yang kekal dalam kod selama dua tahun.1920## Di mana OpenFeature masuk2122OpenFeature ialah spesifikasi terbuka untuk menilai feature flag dengan API biasa. Ideanya mudah: kod aplikasi anda tidak boleh bergantung secara langsung pada vendor atau sistem dalaman yang anda gunakan untuk bendera.2324Aplikasi itu bertanya:2526```typescript27const enabled = await client.getBooleanValue('checkout.v2.enabled', false, {28 targetingKey: user.id,29 plan: user.plan,30 country: user.country,31});32```3334Pembekal memutuskan dari mana datangnya peraturan: SaaS, fail, perkhidmatan dalaman, dibenderakan, konfigurasi GitOps. Jika suatu hari anda menukar bahagian belakang pembenderaan ciri, aplikasi itu tidak perlu ditulis semula di mana-mana sahaja.3536Pemisahan ini kelihatan seperti perincian seni bina, tetapi ia dirasai apabila projek itu berkembang.3738## Konteks adalah separuh daripada pertempuran3940Bendera hidup atau mati untuk semua orang berguna, tetapi terhad. Penyampaian progresif hidup dalam konteks:4142- pengguna dalaman atau luaran;43- pelan percuma atau perusahaan;44- kampung;45- organisasi;46- versi apl;47- peratusan trafik yang stabil.4849Kunci penting ialah `targetingKey`: ia mestilah stabil. Jika ia berubah dengan setiap permintaan, pengguna boleh berakhir sekali dalam varian A dan sekali dalam varian B. Untuk percubaan, ia adalah mengerikan, untuk pembayaran ia boleh membawa bencana.5051## Pelancaran yang wajar5253Aliran yang saya suka ialah ini:54551. gunakan dengan bendera dimatikan;562. pencucuhan untuk pemaju dan QA;573. hidupkan untuk pelanggan perintis atau penyewa;584. 5% pelancaran;595. pelancaran pada 25%;606. 100% pelancaran;617. penyingkiran kod dan bendera lama.6263Perkara yang sering dilupakan adalah yang terakhir. Bendera sementara mesti mempunyai tarikh kematian. Jika ia kekal selama-lamanya, setiap refactor akan datang perlu bertanya: "tetapi adakah cawangan ini masih berguna?".6465## Kill switch: sediakan dahulu6667kill switch ialah bendera yang menyelamatkan anda apabila pergantungan luar mula mengacaukan anda, kerja menggunakan terlalu banyak sumber atau logik baharu menghasilkan ralat pelik.6869kill switch yang baik mestilah:7071- mudah dicari;72- didokumenkan dalam buku panduan;73- diuji sekali-sekala;74- boleh diperhatikan apabila diaktifkan;75- bebas, sejauh mungkin, dari bahagian yang boleh pecah.7677Perkara yang paling teruk ialah mengetahui semasa kemalangan bahawa bendera itu wujud, tetapi tiada siapa yang tahu sama ada ia masih berfungsi.7879## Penyampaian boleh diperhatikan atau tidak progresif8081Menghidupkan ciri pada 10% tanpa melihat metrik hanyalah keyakinan dengan berbilang langkah.8283Setiap pelancaran hendaklah menjawab soalan mudah:8485- adakah kesilapan meningkat?86- adakah kependaman telah berubah?87- adakah pengguna melengkapkan aliran?88- adakah terdapat lebih tiket atau percubaan semula?89- adakah varian memberi kesan kepada satu segmen sahaja?9091OpenFeature menyokong cangkuk sekitar penilaian bendera. Ia berguna untuk ralat pengelogan, menambah metrik atau memautkan rating kepada trace.9293## Penamaan dan pemilikan9495Nama penting. `new_ui` tidak berkata apa-apa. `checkout.v2.enabled` mengatakan banyak lagi.9697Untuk setiap bendera saya akan menandakan sekurang-kurangnya:9899- nama;100- penerangan;101- pemilik;102- lalai selamat;103- sebab mengapa ia wujud;104- tarikh atau syarat penyingkiran.105106Bendera tanpa pemilik hampir selalu merupakan bendera yang tidak akan dibersihkan oleh sesiapa pun.107108## Di mana untuk menilai mereka109110Bahagian hadapan, bahagian belakang atau tepi? Terpulang.111112Jika bendera adalah untuk reka letak, salin atau onboarding, bahagian hadapan adalah baik. Jika ia melibatkan kebenaran, pengebilan, had atau data sensitif, ia mesti berada di bahagian belakang. Jika ia melibatkan penghalaan atau eksperimen trafik tinggi, kelebihan mungkin masuk akal.113114Peraturan mudah: bahagian hadapan boleh meningkatkan pengalaman, tetapi ia bukan satu-satunya halangan keselamatan.115116## Kesimpulan117118feature flag dilakukan dengan baik mengubah hubungan dengan pengeluaran. Mereka tidak menghapuskan risiko, tetapi mereka menjadikannya lebih kecil dan lebih mudah diurus. Anda boleh melepaskan dalam kepingan, memerhati, berhenti, kembali, belajar.119120OpenFeature menambah asas yang bersih: API biasa, pembekal yang boleh ditukar ganti dan cara yang lebih kemas untuk mengembangkan sistem. Tetapi disiplin tetap milik anda: lalai yang selamat, nama yang jelas, metrik, pemilik dan kebersihan.121122Bendera terbaik ialah bendera yang membantu anda melepaskan dengan tenang dan kemudian hilang apabila ia tidak lagi diperlukan.123124## Sumber125126- [OpenFeature: Introduction](https://openfeature.dev/docs/reference/intro/)127- [OpenFeature: Node.js SDK](https://openfeature.dev/docs/reference/sdks/server/javascript/)128- [OpenFeature Specification: Flag Evaluation API](https://openfeature.dev/specification/sections/flag-evaluation)129- [OpenFeature: Hooks](https://openfeature.dev/docs/reference/concepts/hooks/)130- [CNCF: OpenFeature](https://www.cncf.io/projects/openfeature/)131
:Feature flag: lepaskan tanpa menahan nafas andalines 1-131 (END) — press q to close