Skalabilitas Tinggi menyebutkan tanda fitur di sini:
5 hal yang meracuni skalabilitas , "5. Kurangnya Tanda Fitur"
Apa sebenarnya flag fitur itu?
Skalabilitas Tinggi menyebutkan tanda fitur di sini:
5 hal yang meracuni skalabilitas , "5. Kurangnya Tanda Fitur"
Apa sebenarnya flag fitur itu?
Jawaban:
Sebuah 'feature flag' (atau Feature Toggle ) adalah kemampuan untuk mengaktifkan / menonaktifkan fitur (sub-bagian) aplikasi Anda dengan mudah:
Saya kira contoh di sana adalah berguna untuk memiliki kontrol untuk mengurangi set fitur agak jika Anda perlu, katakanlah, mengurangi kueri db jika beban terlalu tinggi.
Ada banyak alasan lain mengapa Anda ingin menggunakan ini - salah satu yang utama adalah mengaktifkan Pengiriman Berkelanjutan : mendorong hal-hal ke dalam produksi / langsung namun memiliki fitur dinonaktifkan / diubah hingga selesai. Kami sering menggunakan apa yang kami sebut 'cookie dev' untuk menunjukkan fitur yang belum selesai hanya kepada tim pengembang. Dengan cara ini kami dapat menguji pekerjaan yang sebagian selesai dalam produksi (oh yeh! Apakah ada integrasi yang lebih baik?) Melalui beberapa rilis / penerapan sebelum kami 'melepaskan' (menyelesaikannya) dan itu menjadi terlihat oleh publik.
Berikut adalah paket sederhana yang membantu Anda melakukan ini di tanah ASP.NET MVC: https://github.com/cottsak/DevCookie (pengungkapan penuh: Saya penulisnya)
Fowler juga memiliki artikel yang jauh lebih panjang daripada yang ditautkan di atas dengan lebih banyak detail .
Posting ini (di situs Fowler juga) menjelaskan berbagai jenis strategi toggle . DevCookie mendukung strategi berbasis jalur utama / trunk dan disebut " Toggle Rilis " dalam artikel.
Jawaban Adil menyoroti bahwa ada banyak istilah dan alasan mengapa Anda menginginkan beberapa infrastruktur ini. Ingatlah bahwa Anda mungkin hanya membutuhkan beberapa dari hal-hal ini. Misalnya, saya mungkin hanya ingin mengaktifkan alur kerja penerapan / pengiriman yang sederhana dan gesit sehingga infrastruktur sederhana sudah cukup. Jika Anda kemudian memilih ingin beralih ke eksperimen #leanstartup lengkap dengan A / B, pengujian kelompok, dan hal-hal seperti peluncuran terkontrol, Anda harus mempertimbangkan alat analisis (misalnya Heap ) yang memfasilitasi metodologi pengembangan berbasis data tersebut sebagai solusi yang berbeda . Infrastruktur toggle yang melakukan semua hal di atas akan menyebabkan pembengkakan dan kerumitan yang tidak perlu.
Jika Anda berhasil sejauh ini, Anda mungkin ingin memeriksa beberapa pemikiran saya yang lain tentang Pengembangan Jalur Utama, fitur toggling, dan ide konyol lainnya seperti TEST, QA, SIT, STAND, CROUCH .
Tanda Fitur adalah teknik untuk menonaktifkan beberapa fungsi aplikasi Anda, melalui konfigurasi, tanpa menerapkan kode baru.
Flag fitur memainkan peran penting dalam skema CI di mana fitur terus-menerus diterapkan tetapi tidak harus "dirilis" ke dalam produksi.
Info lebih lanjut di sini:
- EDIT:
Tanda Fitur, pengalihan fitur, eksperimen, dan peluncuran terkontrol adalah sinonim untuk ide yang sederhana namun kuat: penerapan kode terpisah dari peluncuran fitur. Singkatnya, ini adalah kemampuan untuk mendorong komitmen fitur Anda ke produksi sambil memilih siapa di antara pelanggan Anda - jika ada orang lain - yang dapat melihat fitur itu.
Mereka dipopulerkan sebagian oleh Penjaga Gerbang Facebook . LiX LinkedIn adalah contoh bagus lainnya.
Merangkul ide sederhana ini menjadi dasar untuk banyak praktik terbaik, termasuk:
Penerapan / Pengiriman Berkelanjutan - beberapa kode didorong ke produksi dalam satu hari.
Pengembangan Trunk / Mainline - cabang fitur harus dibuat hanya untuk permintaan tarik, bukan untuk pengembangan fitur yang berumur panjang.
Tidak Ada Kereta Rilis Lagi untuk menghentikan segalanya.
Pengujian QA / Perf dalam Produksi - QA nyata dan pengujian kinerja ada pada infrastruktur produksi dengan lalu lintas produksi. Jangan buang waktu membangun laboratorium kinerja yang ekstensif dan lingkungan pementasan.
Eksperimen - ketahui bagaimana fitur baru menggerakkan jarum pada KPI Anda.
Menghindari Hotfix atau Rollback Kode saat Masalah Terjadi - hotfix dan rollback kode dapat menimbulkan stres, membutuhkan waktu lama, dan menyebabkan lebih banyak masalah daripada yang diperlukan. Alih-alih, matikan fitur atau turunkan fitur.
Yang lain menyebutkan pustaka open source. Contoh bagus dari solusi lengkap - seperti Gatekeeper dan LiX - adalah Split . Saya bekerja untuk Split.
Ada banyak jawaban bagus di sini, semuanya mengacu pada definisi dasar dan penting yang dipopulerkan di pos Martin Fowler :
Itu adalah potongan kode yang "[mengizinkan] tim untuk mengubah perilaku sistem tanpa mengubah kode."
Jadi kami secara historis menganggapnya sebagai diwakili oleh pseudo-code:
if(app_settings["beta-mode"] == "true")
showAwesomeNewGui();
else
sameOldSnoozeFeset();
Itu cara yang benar-benar akurat untuk memikirkannya, dan baik Matt maupun Adil mengembangkannya dengan baik dengan berbagai kasus penggunaan taktis untuk bendera fitur.
Tapi saya ingin menawarkan definisi yang direvisi yang mencerminkan bagaimana realitas telah berkembang dalam enam tahun dan berubah sejak dotnetdev mengajukan pertanyaan asli. Saya bekerja untuk Rollout.io , platform flag fitur, jadi saya memiliki kursi baris depan untuk evolusi ini.
Sederhananya, tanda fitur bukan lagi hanya cara untuk mengaktifkan dan menonaktifkan fungsionalitas di aplikasi Anda. Itu seperti menjawab "apa itu item baris faktur" dengan mengatakan "ini adalah deskripsi dan jumlah mata uang". Benar, tetapi tidak mengarahkan pada poin yang lebih luas dari faktur itu sendiri.
Flag fitur adalah bit taktis dari solusi strategis menyeluruh dalam perangkat lunak modern. Mereka adalah cara yang Anda gunakan untuk menunda logika keputusan penting dalam kode Anda hingga waktu proses ketika Anda memiliki lebih banyak informasi. Dan, mungkin yang paling penting, mereka tidak hanya terjadi dalam isolasi lagi, dengan satu pemeriksaan untuk melihat apakah nomor versi lebih besar dari 2.7 atau tidak; organisasi yang menggunakannya biasanya memasukkannya sebagai bagian dari pendekatan produk di seluruh sistem yang komprehensif.
Seperti yang disebutkan orang lain, Facebook dan LinkedIn memelopori ini, tetapi pada 2018, banyak organisasi melakukannya. Mereka menunda pertanyaan logika keputusan untuk runtime sebagai bagian dari strategi pengembangan, strategi operasi (atau strategi DevOps, jika Anda mau), dan strategi produk. Berikut adalah contoh pertanyaan semacam itu.
Untuk memiliki aplikasi yang menunda sejumlah besar keputusan seperti itu hingga runtime, Anda tidak dapat melemparkan tanda fitur ke aplikasi Anda secara ad-hoc atau Anda akan mengubur diri Anda dalam hutang teknis. Saat ini, Anda perlu memiliki strategi pengelolaan tanda fitur yang komprehensif, yang mencakup beberapa komponen berbeda.
Jadi, pada akhirnya, apa itu feature flag?
Ya, mereka adalah bagian penting dari strategi yang lebih luas untuk memiliki aplikasi yang dapat disesuaikan dengan kebutuhan teknis dan pasar.
Tanda fitur (juga dikenal sebagai pembalikan fitur atau pengalih fitur ) adalah pengalih untuk mengaktifkan atau menonaktifkan fitur yang berpotensi mahal sesuai kebutuhan (seperti, misalnya, saat situs diserang dengan lalu lintas yang tidak terduga). Ini akan memberi Anda sedikit waktu sampai Anda menaikkan skala, atau sampai lonjakan beban hilang.
Berikut adalah contoh dari dokumentasi SWIG .
Di perusahaan saya, kami dulu punya solusi sendiri untuk itu. Kami membuat layanan yang menyediakan file config ( .json
) yang dapat diunduh untuk setiap aplikasi. Dalam konfigurasi itu kami menyimpan tanda untuk fitur. Berdasarkan konfigurasi itu, aplikasi dapat menampilkan atau menyembunyikan fitur saat ini. (Misalnya menampilkan atau menyembunyikan item menu di sidebar).
Kami juga membuat halaman admin internal tempat kami dapat mengkonfigurasi fitur-flag. Ini bekerja cukup baik untuk sementara waktu tetapi setelah itu kami ingin melakukan penargetan pengguna dan pengujian A / B. Untuk mengembangkan sendiri Sepertinya terlalu banyak usaha, jadi kami memilih solusi pihak ketiga. Seperti yang sudah disebutkan di sini ada banyak solusi untuk itu.
Kami memilih ConfigCat karena mendukung grup target yang disesuaikan dan peluncuran berbasis persentase sekaligus. Anda dapat memeriksa sdks open-source yang didukung di github .
Tanda fitur (atau pengalih fitur) memungkinkan Anda mengaktifkan fitur dari jarak jauh pada aplikasi tanpa perlu membangun ulang / menerapkan ulang aplikasi. Hal ini memungkinkan Anda untuk menerapkan kode ke produksi tetapi tidak merilis fitur sampai Anda siap. Anda dapat menargetkan pengguna tertentu, sehingga Anda dapat mengaktifkan fitur baru untuk diuji oleh pengguna beta Anda.
Di perusahaan kami, kami sebelumnya telah menggunakan LaunchDarkly dan saran lain dari FeatureFlags.io . Kami juga mencoba menggunakan Remote config Firebase untuk mencoba dan membuat ini berfungsi, namun kami menemukan itu tidak benar-benar cocok untuk tujuan ini.
Kami akhirnya mengembangkan versi kami sendiri yang disebut Kereta Peluru , yang kami buka bersumber. Ini menggabungkan Feature Flags / Toggles dan Remote Config.
Feature Flags digunakan untuk beberapa tujuan. Ide umumnya adalah mendelegasikan kendali atas pengguna mana yang melihat fitur apa ke dasbor jarak jauh atau semacam back-office.
Setelah fitur ditandai di kode, Anda sekarang dapat menggunakan beberapa metode untuk menentukan pengguna mana yang melihatnya di aplikasi Anda: 1. Aktif / Nonaktif - menampilkan fitur ke semua atau tidak satu pun pengguna Anda. 2. Rilis Bertahap - menampilkan fitur hanya kepada sebagian pengguna Anda, kemudian secara bertahap menampilkannya kepada semua pengguna. 3. Penargetan - menampilkan fitur kepada pengguna tertentu berdasarkan properti atau karakteristik pengguna tersebut.
Alat yang membantu mengontrol Tanda Fitur (boolean) dan Konfigurasi Fitur (string, angka, dll) biasanya disebut Platform Manajemen Fitur. Ada layanan hebat untuk Manajemen Fitur yang disebut Configz.io
Dari sudut pandang pengkodean, flag fitur bisa sesederhana if
pernyataan yang membungkus kode baru yang Anda tulis. Ketika if
pernyataan bernilai true (tanda fitur aktif) maka kode baru akan dieksekusi.
Dalam contoh dunia nyata pengiriman perangkat lunak, file if
pernyataan yang dijelaskan di atas akan dievaluasi secara berbeda tergantung pada lingkungan tempat perangkat lunak dijalankan. Misalnya jika aplikasi sedang dijalankan pada server QA Anda, tanda fitur akan mengembalikan true dan fitur baru akan menjadi terlihat. Jika dieksekusi di server produksi Anda, flag fitur akan mengembalikan false dan fitur akan disembunyikan.
Dari pengalaman pribadi saya selama karir saya, saya telah menggunakan tanda fitur dengan cara berikut:
Memisahkan penerapan kode dari peluncuran fitur ke pelanggan. Ini adalah penggunaan pertama saya atas tanda fitur dalam proses pengembangan kami. Kami menggunakannya untuk menghilangkan ketergantungan antara tim pemasaran dan produk kami serta tim teknik yang melakukan pengembangan dan rilis. Bendera fitur memungkinkan kami untuk menerapkan kode kami berminggu-minggu sebelum peluncuran sedangkan sebelumnya kami menerapkan kode pada malam sebelum rilis!
Pengujian dalam produksi. Sebelum kami menggunakan tanda fitur ketika kami merilis kode kami, itu adalah peristiwa semua atau tidak sama sekali, baik semua pelanggan kami mendapatkan fitur tersebut atau tidak ada yang mendapatkannya. Kami menggunakan tanda fitur untuk memungkinkan kami meluncurkan fitur baru ke sebagian kecil pengguna pada satu waktu. Ini memungkinkan kami untuk mengumpulkan umpan balik dan data berharga tentang fitur baru tanpa mempertaruhkan potensi masalah apa pun ke seluruh basis pelanggan.
Mengaktifkan / menonaktifkan fitur per lingkungan dalam siklus hidup pengembangan. Kami menggunakan ini secara ekstensif dalam pengembangan untuk memungkinkan proses penerapan yang jauh lebih mulus - kami memiliki pipeline CI / CD di mana penggunaan tanda fitur sangat penting.
Membuat tombol pemutus. Kami telah membungkus fitur tertentu dari aplikasi kami dengan tanda fitur yang memungkinkan kami untuk 'mematikan' fitur tersebut jika ada masalah yang kami alami dengan aplikasi pada saat itu. Misalnya, jika kami mengalami beban berat, kami dapat menonaktifkan fitur non-esensial tertentu dari situs web untuk membantu mengatasi masalah tersebut.
Anda dapat membaca lebih lanjut tentang tanda fitur di sini.
Anda dapat menambahkan tanda fitur ke kode Anda dengan berbagai cara.
Menulis perpustakaan Anda sendiri mungkin tampak ide bagus pada awalnya dan biasanya bisa dimulai dengan cara itu. Namun, Anda dapat segera mengalami masalah saat ingin menerapkan kasus penggunaan yang lebih lanjut dari tanda fitur seperti meluncurkan ke sejumlah persentase pengguna atau menargetkan grup pengguna tertentu. Masalah lain dalam membuat implementasi tanda fitur Anda sendiri adalah jika Anda menggunakan banyak bahasa, Anda perlu mengimplementasikan kode Anda beberapa kali.
Cara terbaik dan termudah untuk menggunakan tanda fitur adalah dengan menggunakan layanan pengelolaan tanda fitur online seperti Floodgate . Dengan cara ini Anda dapat memanfaatkan platform untuk semua pekerjaan berat yang kemudian memungkinkan Anda untuk berkonsentrasi pada pembuatan fitur untuk aplikasi Anda.
Berikut adalah contoh cara menambahkan tanda fitur Floodgate ke aplikasi yang menggunakan .NET SDK.
using FloodGate.SDK;
var floodgateClient = new FloodGateClient("API-KEY");
var flag = floodgateClient.GetValue("a-new-feature", false);
if (flag)
{
// Execute the code for my new feature here...
}
Jika Anda bekerja dalam tim pengembangan dan Anda tidak menggunakan tanda fitur dan Anda mengalami masalah dalam penerapan dan manajemen kode dalam tim. Menggunakan tanda fitur bisa menjadi cara yang bagus untuk menyelesaikan masalah ini. Ada juga efek samping yang bagus dari fitur flag yang mempercepat kecepatan pengembangan tim Anda.
Martin Fowler memberikan tulisan yang sangat mendalam tentang flag fitur di sini yang saya sarankan untuk Anda baca.
Pemahaman saya adalah bahwa tanda fitur membantu Anda mem-gerbang fungsionalitas dengan memutuskan pengguna mana yang menerima fitur tertentu.
Misalnya, Anda hanya ingin pengguna beta melihat fitur baru. Anda akan "mengaktifkan" fitur itu untuk pengguna beta dan pengguna Anda lainnya tidak akan melihatnya.
LDUser user = new LDUser("user@test.com");
boolean showFeature = ldClient.toggle("your.feature.key", user, false);
if (showFeature) {
// application code to show the feature
}
else {
// the code to run if the feature is off
}
Saya menguji tanda fitur LaunchDarkly untuk beberapa pengujian JS A / B front-end - tampaknya berfungsi dengan baik. Anda juga dapat melihat situs ini untuk matikan fitur dan pustaka bendera fitur .
Fitur Flags pada dasarnya memberi Anda kemampuan untuk menghidupkan dan mematikan fitur tanpa membuat perubahan apa pun pada kode atau merilis versi baru. Ini adalah solusi penting terutama untuk pengembang aplikasi seluler karena mereka tidak memiliki kendali atas pengguna untuk memperbarui aplikasi mereka ke versi baru.
Ada beberapa perusahaan yang memberikan layanan ini untuk para pengembang aplikasi seluler.
Di perusahaan saya, kami menggunakan tanda fitur untuk setiap fitur baru yang kami perkenalkan di aplikasi SaaS kami. Selain manfaat bagi kinerja, ini juga memungkinkan kami meluncurkan fitur baru secara bertahap - memperkenalkan fitur baru kepada pengguna yang mahir terlebih dahulu, mendapatkan umpan balik dari mereka, dan mengimprovisasinya sebelum kami dapat meluncurkannya ke semua pengguna.
Hal ini juga memungkinkan kami untuk menyesuaikan penawaran untuk pengguna individu - power user menginginkan semua fitur; pengguna sederhana mungkin hanya menginginkan hal-hal dasar dan mungkin bingung dengan semua fitur kompleks yang canggih. Ini juga memungkinkan tim penjualan kami untuk menjual.
Dan tentu saja seperti yang ditunjukkan orang lain, jika kami menemukan fitur yang menyebabkan penurunan kinerja, kami cukup mematikan satu fitur itu (baik untuk semua klien atau satu klien yang menyebabkan masalah).