Bagikan melalui


Bendera fitur

Petunjuk / Saran

Konten ini adalah kutipan dari eBook, Merancang Aplikasi .NET Cloud Native untuk Azure, tersedia di .NET Docs atau sebagai PDF gratis yang dapat diunduh yang dapat dibaca secara offline.

aplikasi .NET Cloud Native untuk gambar mini sampul Azure eBook.

Dalam bab 1, kami menegaskan bahwa cloud native berkaitan dengan kecepatan dan kelincahan. Pengguna mengharapkan responsivitas yang cepat, fitur inovatif, dan waktu henti nol. Feature flags adalah teknik penerapan modern yang membantu meningkatkan kelincahan untuk aplikasi natif awan. Fitur ini memungkinkan Anda untuk menyebarkan fitur baru ke lingkungan produksi, tetapi membatasi ketersediaannya. Dengan jentik sakelar, Anda dapat mengaktifkan fitur baru untuk pengguna tertentu tanpa memulai ulang aplikasi atau menyebarkan kode baru. Mereka memisahkan rilis fitur baru dari penyebaran kode mereka.

Bendera fitur dibangun berdasarkan logika kondisional yang mengontrol visibilitas fungsionalitas untuk pengguna pada waktu proses. Dalam sistem cloud-native modern, umum untuk menyebarkan fitur baru ke dalam produksi lebih awal, tetapi mengujinya dengan audiens terbatas. Seiring dengan meningkatnya keyakinan, fitur ini dapat diluncurkan secara bertahap ke audiens yang lebih luas.

Kasus penggunaan lain untuk bendera fitur meliputi:

  • Batasi fungsionalitas premium untuk grup pelanggan tertentu yang bersedia membayar biaya langganan yang lebih tinggi.
  • Stabilkan sistem dengan menonaktifkan fitur masalah dengan cepat, menghindari risiko pembatalan atau perbaikan segera.
  • Nonaktifkan fitur opsional dengan konsumsi sumber daya tinggi selama periode penggunaan puncak.
  • Lakukan experimental feature releases pada segmen pengguna kecil untuk memvalidasi kelayakan dan popularitas.

Penanda fitur juga mempromosikan trunk-based pengembangan. Ini adalah model percabangan kontrol sumber tempat pengembang berkolaborasi pada fitur dalam satu cabang. Pendekatan ini meminimalkan risiko dan kompleksitas penggabungan sejumlah besar cabang fitur yang berjalan lama. Fitur tidak akan tersedia sampai diaktifkan.

Menerapkan bendera fitur

Pada intinya, bendera fitur adalah referensi ke sederhana decision object. Ini mengembalikan status Boolean dari on atau off. Bendera biasanya membungkus blok kode yang merangkum kemampuan fitur. Status bendera menentukan apakah blok kode tersebut dijalankan untuk pengguna tertentu. Gambar 10-11 menunjukkan implementasinya.

if (featureFlag) {
    // Run this code block if the featureFlag value is true
} else {
    // Run this code block if the featureFlag value is false
}

Gambar 10-11 - Implementasi bendera fitur sederhana.

Perhatikan bagaimana pendekatan ini memisahkan logika keputusan dari kode fitur.

Dalam bab 1, kita membahas Twelve-Factor App. Panduan merekomendasikan untuk menjaga pengaturan konfigurasi tetap terpisah dari kode eksekusi aplikasi. Jika diperlukan, pengaturan dapat dibaca dari sumber eksternal. Nilai konfigurasi bendera fitur juga harus independen dari basis kodenya. Dengan eksternalisasi konfigurasi bendera di repositori terpisah, Anda dapat mengubah status bendera tanpa memodifikasi dan menyebarkan ulang aplikasi.

Azure App Configuration menyediakan repositori terpusat untuk bendera fitur. Dengan itu, Anda menentukan berbagai jenis bendera fitur dan memanipulasi status mereka dengan cepat dan percaya diri. Anda menambahkan pustaka klien App Configuration ke aplikasi Anda untuk mengaktifkan fungsionalitas bendera fitur. Berbagai kerangka kerja bahasa pemrograman didukung.

Bendera fitur dapat dengan mudah diimplementasikan dalam layanan ASP.NET Core. Menginstal pustaka Manajemen Fitur .NET dan penyedia App Configuration memungkinkan Anda menambahkan bendera fitur secara deklaratif ke kode Anda. Mereka mengaktifkan FeatureGate atribut sehingga Anda tidak perlu menulis secara manual pernyataan if di seluruh kode basis Anda.

Setelah dikonfigurasi di kelas Startup, Anda dapat menambahkan fungsionalitas penanda fitur di tingkatan pengontrol, tindakan, atau middleware. Gambar 10-12 menyajikan pengontrol dan implementasi tindakan:

[FeatureGate(MyFeatureFlags.FeatureA)]
public class ProductController : Controller
{
    ...
}
[FeatureGate(MyFeatureFlags.FeatureA)]
public IActionResult UpdateProductStatus()
{
    return ObjectResult(ProductDto);
}

Gambar 10-12 - Implementasi bendera fitur dalam pengontrol dan tindakan.

Jika bendera fitur dinonaktifkan, pengguna akan menerima kode status 404 (Tidak Ditemukan) tanpa isi respons.

Bendera fitur juga dapat disuntikkan langsung ke kelas C#. Gambar 10-13 menunjukkan injeksi bendera fitur:

public class ProductController : Controller
{
    private readonly IFeatureManager _featureManager;

    public ProductController(IFeatureManager featureManager)
    {
        _featureManager = featureManager;
    }
}

Gambar 10-13 - Penyisipan penanda fitur ke dalam kelas.

Pustaka Manajemen Fitur mengelola siklus hidup bendera fitur di belakang layar. Misalnya, untuk meminimalkan jumlah panggilan yang tinggi ke penyimpanan konfigurasi, pustaka menyimpan status flag dalam cache untuk durasi tertentu. Mereka dapat menjamin kekekalan status bendera selama panggilan permintaan. Mereka juga menawarkan Point-in-time snapshot. Anda dapat merekonstruksi riwayat nilai kunci apa pun dan memberikan nilai masa lalunya kapan saja dalam tujuh hari sebelumnya.