Feature Flag
- Türkçe karşılığı
- özellik bayrağı
- Okunuşu
- fiçır fleg
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
Feature flag, koddaki bir özelliği çalışma zamanında açıp kapatan bir anahtardır; ekipler kodu herkese aynı anda yayınlamadan dağıtabilir.
Feature flag nedir?
Feature toggle olarak da adlandırılan feature flag, bir işlevin etkin olup olmadığına karar veren koşullu bir kod kontrolüdür. Flag'in değeri bir yapılandırma dosyası, bir veritabanı ya da özel bir flag servisi gibi kodun dışından gelir; bu yüzden uygulama çalışırken değişebilir. Bu, kodu sunuculara koyan dağıtımı (deploy) ile bir özelliği kullanıcılara görünür kılan yayından (release) ayırır.
En basit haliyle flag, yeni kod yolunun etrafındaki bir if ifadesidir. Daha gelişmiş sistemler flag'leri her istekte hedefleme kurallarıyla değerlendirir; örneğin bir özelliği şirket içi çalışanlar, tek bir ülkedeki kullanıcılar ya da hesapların rastgele %5'i için açar ve bu payı zamanla artırır. Özellik hatalara yol açarsa erişimi olan herkes onu saniyeler içinde kapatabilir; bu da çoğu zaman rollback'ten daha hızlı ve güvenlidir.
Ekipler flag'leri kademeli yayınlar, beta programları, riskli bağımlılıklar için kill switch'ler ve A/B testleri için kullanır; flag'ler ayrıca trunk-based development'ı uygulanabilir kılar, çünkü bitmemiş işler bir flag'in arkasında gizlenerek ana branch'e birleştirilebilir. Flag'i, yeni kablolanmış bir evdeki ışık düğmeleri gibi düşünün: elektrikçi tüm kabloları önceden döşer, hangi odaları aydınlatacağınıza siz sonra karar verirsiniz. Başlıca maliyet karmaşıklıktır; bu yüzden bir özellik tamamen yayına alındığında eski flag'ler kaldırılmalı, yoksa teknik borç olarak birikirler.
Feature flag'ler sıklıkla canary deployment'lar ve ortam değişkenleriyle karıştırılır. Canary deployment, trafiğin bir kısmını altyapı düzeyinde uygulamanın tamamının yeni bir sürümüne yönlendirir; feature flag ise çalışan tek bir sürümün içindeki bireysel özellikleri, çoğu zaman kullanıcı bazında açıp kapatır. Ortam değişkeni genellikle başlangıçta bir kez okunur ve her istek için aynıdır; flag ise canlı olarak değiştirilebilir ve farklı kullanıcılara farklı yanıtlar verebilir.
Önemli noktalar
- Feature flag, yeni bir dağıtım yapmadan işlevi çalışma zamanında açıp kapatır.
- Kodu dağıtmayı, bir özelliği kullanıcılara yayınlamaktan ayırır.
- Hedefleme kuralları bir özelliği belirli kullanıcılar, gruplar ya da trafiğin bir yüzdesi için etkinleştirebilir.
- Yeni bir özellik canlıda hatalı davrandığında flag bir kill switch görevi de görür.
- Eskimiş flag'ler karmaşıklık ekler ve tam yayından sonra kaldırılmalıdır.
Örnek
// The flag values come from a flag service or config, not from the code
const flags = await loadFlags({ userId: user.id, country: user.country });
if (flags.isEnabled("new-checkout")) {
renderNewCheckout(cart); // only users the flag targets see this
} else {
renderLegacyCheckout(cart); // everyone else keeps the current flow
}Sık sorulan sorular
Feature flag ile feature branch arasındaki fark nedir?
Feature branch, bitmemiş işi birleştirilene kadar ayrı bir Git branch'inde tutar. Feature flag ise bitmemiş kodun ana branch'e birleştirilip dağıtılmasına, kapalı kalmasına izin verir; bu da uzun ömürlü branch'lerden ve zahmetli birleştirmelerden kaçınmayı sağlar.
Feature flag'ler teknik borç mudur?
Bir özellik tamamen yayına alındıktan sonra kodda kaldıklarında teknik borca dönüşürler. Birçok ekip her sürüm flag'ine bir sahip ve bir son kullanma tarihi atar, ardından yayın tamamlandığında flag'i ve eski kod yolunu siler.
Feature flag'ler A/B testi için kullanılabilir mi?
Evet. Bir flag kullanıcıları bir özelliğin farklı varyantlarına atayabilir ve bir analitik sistemi her grubun nasıl davrandığını karşılaştırır. A/B testi, kademeli yayınlar, kill switch'ler ve beta erişimiyle birlikte feature flag'lerin kullanım alanlarından biridir.
İlgili sayfalar
- Canary DeploymentDevOps ve Bulut, s. 6Canary deployment, yeni bir yazılım sürümünü önce kullanıcıların küçük bir bölümüne sunar, sağlığını kontrol eder ve ardından kademeli olarak herkese yayar.
- Trunk-Based DevelopmentSürüm Kontrolü, s. 39Trunk-based development, geliştiricilerin küçük değişiklikleri en az günde bir kez ortak ana branch'e birleştirip onu hep yayımlanabilir tuttuğu stratejidir.
- A/B TestiTest ve Kalite, s. 1A/B testi, bir özelliğin iki sürümünü gerçek kullanıcıların rastgele gruplarına gösterip seçilen metrikte hangisinin daha iyi sonuç verdiğini ölçen deneydir.
- CI/CDDevOps ve Bulut, s. 9CI/CD, kod değişikliklerini sık sık derleyen, test eden ve yayınlayan otomatik pratikler bütünüdür; yazılım kullanıcılara hızlı ve güvenli biçimde ulaşır.
- RollbackDevOps ve Bulut, s. 43Rollback, yeni bir dağıtım hatalara, kesintilere ya da beklenmedik başka sorunlara yol açtığında yazılımı önceki, sorunsuz sürüme döndürme işlemidir.
- Ortam DeğişkeniDevOps ve Bulut, s. 36Ortam değişkeni, programın dışında işletim sistemi ya da çalışma zamanınca ayarlanan, programın davranışını yapılandırmak için okuduğu adlandırılmış değerdir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin