GH GambleHub

Özellik Bayrakları ve özellik sürümü

Özellik Bayrağı (FF), kod yayınlamadan sistem davranışını etkinleştiren/devre dışı bırakan yönetilen bir koşuldur. Bayraklar şunları yapmanızı sağlar: Özellikleri güvenli bir şekilde dağıtın, kullanıcı/pazar/kiracı gruplarını hedefleyin, sorunlu bileşenleri hızlı bir şekilde devre dışı bırakın, deneyler yapın ve çalışma süresinde parametreleri yapılandırın.

Temel hedefler:
  • Salınımlar için patlama yarıçapını azaltın.
  • Ayrı dağıtım ve etkinleştirme.
  • Denetim, SLO ve tek tıkla geri alma ile şeffaf değişiklik yönetimine izin verin.

1) Bayrak türleri ve ne zaman uygulanacağı

Salma bayrakları - yeni bir özelliğin aşamalı olarak eklenmesi (karanlık, kanarya, rampa, %100).
Ops/kill-switch - bağımlılıkların anında kesilmesi (sağlayıcı, alt sistem, ağır hesaplamalar).
Deney (A/B, çok değişkenli) - trafiğin varyantlara bölünmesi (ağırlıklar, yapışkan toka).
İzin/Yetki - role/plana/yargı yetkisine göre özelliklere erişim.
Uzak Yapılandırma - bayrak/yapılandırmadan davranış parametreleri (eşik, zaman aşımı, formül).
Geçiş bayrakları - şemaları/veri yollarını değiştirme (yeni bir dizin/DB/uç noktaya taşıma).

Anti-pattern:'her şey hakkında "aynı bayrak - özellik, comp anahtarı ve parametrelere ayrılır.

2) Bayrak veri modeli (minimum)

yaml flag:
key: "catalog. new_ranker"
type: "release"    # release      ops      kill      experiment      permission      config     migration description: "New Directory Ranking"
owner: "search-team@company"
created_at: "2025-10-01T10:00:00Z"
ttl: "2026-01-31" # delete deadline after 100% enable rules:
- when:
tenant_id: ["brand_eu","brand_latam"]
region: ["EE","BR"]
user_pct: 10 # progressive percentage then: "on"
- when:
kyc_tier: ["unverified"]
then: "off"
variants: # for experiments
- name: "control"; weight: 50
- name: "v1"; weight: 30
- name: "v2"; weight: 20 payload:
v1:
boost_freshness: 0. 3 boost_jackpot:  0. 2 v2:
boost_freshness: 0. 2 boost_jackpot:  0. 4 prerequisites: # dependent flags/schema versions
- key: "catalog. index_v2_ready"
must_be: "on"
audit:
require_ticket: true change_window: "09:00-19:00 Europe/Kyiv"
safeguards:
max_rollout_pct: 50 # stop threshold auto_rollback_on:
p95_ms: ">200"
error_rate: ">2%"

3) Değerlendirme ve hedefleme

Ключи таргетинга: 'tenant _ id, bölge/lisans, para birimi, kanal, yerel ayar, rol, plan, cihaz, user_id, kohort, kyc_tier, experiment_bucket'.
Değerlendirme sırası: önkoşullar - kuralları reddet - kurallara izin ver - varsayılan.
Sticky bucketing: Deneyler için, kullanıcının her zaman bir seçenek elde etmesi için sabit bir tanımlayıcı (örneğin, 'hash (user_id, flag_key)') hash.

Sözde kod:
ts result = evaluate(flag, context)  // pure function if (!prereqs_ok(result)) return OFF if (deny_match(result, ctx)) return OFF if (allow_match(result, ctx)) return resolve_variant_or_on(result, ctx)
return flag. default

4) FF dağıtımı ve mimarisi

Seçenekler:
  • Sunucu tarafı SDK (önerilen): arka uçtaki doğruluk ve önbellek kaynakları; mantığın birleşmesi.
  • Kenar/CDN değerlendirmesi: Çevrede hızlı hedefleme (PII/sırların olmadığı yerlerde).
  • İstemci tarafı SDK: UI kişiselleştirmesine ihtiyacınız olduğunda, ancak yalnızca minimum bağlamda ve hassas kurallar olmadan.
  • Config-as-Code: Depoda bayrakları depolamak, CI doğrulaması, CD aracılığıyla kullanıma sunmak.
Strateji önbelleği:
  • Başlangıç bootstrap + akış güncellemeleri (SSE/gRPC) + son anlık görüntüye geri dönüş.
  • SLA "tazelik" bayrakları: p95 ≤ 5 s.

5) Serbest bırakma stratejileri

5. 1 Karanlık başlatma

Özellik etkindir ancak kullanıcı tarafından görünmez; Metrikleri ve hataları toplayın.

5. 2 Kanarya

Bir yargı alanında/kiracıda trafiğin %1-5'ini dahil ediyoruz; Monitör p95/p99, hatalar, dönüşüm.
Stop koşulları - metriklerle otokatop eşik tetikleyicileri.

5. 3 Aşamalı Sunum

Manuel/otomatik doğrulama ile %10 - %25 - %50 - %100 programlanmıştır.

5. 4 Gölge/Yansıtma

İstekleri yeni yola kopyalarız (görünür bir etki olmadan) ve sonuçları/gecikmeyi karşılaştırırız.

5. 5 Mavi/Yeşil + FF

İki versiyon dağıtıyoruz; Bayrak trafiği yönlendirir ve bölümlere göre bağımlılıkları değiştirir.

6) Bağımlılıklar ve çapraz hizmet tutarlılığı

Hazırlığın önkoşullarını ve'sağlık bayraklarını "kullanın: endeks oluşturulur, göç tamamlanır.
Etkinlikler boyunca koordinasyon: 'FlagChanged (flag_key, scope, new_state)'.

Kritik senaryolar için, iki fazlı anahtarlama kullanın:

1. Okuma yolunu etkinleştir - 2) metrikleri denetle - 3) yazma/yan etkileri etkinleştir.

  • Hizmet sözleşmeleri: default, fail-safe OFF olmalıdır.

7) Gözlemlenebilirlik ve SLO

Bayrak/varyant/segment başına metrikler:
  • 'flag _ eval _ p95 _ ms', 'errors _ rate', 'config _ freshness _ ms'.
  • İş metrikleri: 'ctr', 'conversion', 'ARPU', 'retention', korkuluklar (örn. RG olayları).
  • Otokatopa için otomatik SLO eşikleri.

Günlükler/izleme: 'flag _ key', 'variant', 'decision _ source' (server/edge/client), 'context _ hash' ekleyin.

Panolar: Eşikleri olan "merdiven", segmentlere göre ısı haritası hataları.

8) Güvenlik ve uyumluluk

Bağlamda PII-minimizasyonu.
RLS/ACL: Kim hangi bayrakları değiştirebilir (etki alanına/pazara göre).
Değişikliklerin saat pencereleri (pencereleri değiştir) ve hassas bayraklar için "çift onay".
Değişmez denetim: kim/ne zaman/ne/neden (bilet/olay bağlantısı).
Yargı bölgeleri: Bayraklar düzenleyici yasakları aşmamalıdır (örneğin, yasaklı bir ülkede oynamayı içerir).

9) "Uzun ömürlü" bayrakları yönetmek

Her bayrağın TTL/silme tarihi vardır.
%100 dahil edildikten sonra - kod dallarını silmek için bir görev oluşturun, aksi takdirde "bayrak borcu" büyür.
Bayrakları 'migration'/'tek seferlik'olarak işaretleyin, onları' permission/config 'sabitinden ayırın.

10) Örnek Sözleşme API/SDK

Değerlendirme API'si (sunucu tarafı)

http
POST /v1/flags/evaluate
Headers: X-Tenant: brand_eu
Body: { "keys":["catalog. new_ranker","rgs. killswitch"], "context": { "user_id":"u42", "region":"EE" } }
→ 200
{
"catalog. new_ranker": { "on": true, "variant":"v1", "as_of":"2025-10-31T12:10:02Z" },
"rgs. killswitch":  { "on": false, "variant":null, "as_of":"2025-10-31T12:10:02Z" }
}

İstemci SDK (кэш, geri dönüş)

ts const ff = await sdk. getSnapshot()     // bootstrap const on = ff. isOn("catalog. new_ranker", ctx)
const payload = ff. payload("catalog. new_ranker", "v1")

11) Diğer devrelerle etkileşim

Hız limitleri/kotaları: Bayraklar olay süresince RPS'yi düşürebilir/azaltmayı etkinleştirebilir.
Devre kesici/bozma: kill-switchi ağır yolları devre dışı bırakır ve bozmayı sağlar.
Dizin/Kişiselleştirme: Bayraklar ağırlıkları/sıralama kurallarını değiştirir (Uzaktan Yapılandırma yoluyla).
Veritabanı geçişleri: Bayraklar yavaş yavaş okumaları/yazıları yeni bir şemaya çevirir (okuma-çoğaltma, çift yazma, birincil yazma).

12) Playbook'lar (runbook'lar)

1. %25 dahil edildikten sonra olay

Autocatoff tetiklendi - tüm/segment için OFF bayrağı, çağrı üzerine bilet, istatistik koleksiyonu, RCA.
Geçiş bayrağı aracılığıyla geçici olarak bozulma/eski dalı etkinleştirin.

2. p95 katalog büyümesi

Eşik 'p95 _ ms> 200' - otokatoph; 'flag _ key = catalog'ile günlüklerin anlık görüntüsünü düzeltin. new_ranker'.
Yük yapılandırmasını etkinleştir.

3. Yargı yetkisi eksikliği

İzin bayrağı yanlışlıkla oyunu 'NL' - OFF + post-fact denetiminde açtı ve guard kuralı "bölge inkar" ekledi.

4. A/B'de varyans

Deneyi durdurun, CUPED/tabakalı analiz yapın, güncellenmiş ölçeklerle yeniden yuvarlayın.

13) Test etme

Ünite: Kuralların/önceliklerin/ön koşulların deterministik değerlendirmesi.
Sözleşme: bayrak şeması (JSON/YAML), doğrulayıcılar, birleştirmeden önce CI kontrolü.
Özellik tabanlı: "reddet> izin ver",'en spesifik kazançlar ", kararlı kovalama.
Yeni yapılandırmada gerçek bağlamları yeniden oynat-oynat.
E2E: kanarya betikleri (step-up/step-down), autocatoff kontrol ve denetim olayları.
Kaos: Akış uçurumu, eski anlık görüntü, büyük bayrak güncellemesi.

14) Tipik hatalar

İstemci bayraklarında gizli mantık (sızıntılar/sahtecilik).
TTL'nin yokluğu - koddaki bayrakların "mezarlığı".
^ segmentasyonu olmayan "evrensel" bayraklar sorunu yerelleştiremez.
Korkuluk/otokatofon yok - manuel olaylar.
Bayraklar arasında uyumsuz bağımlılıklar - döngüler/senkronize değil.
Her talepteki bayrakların önbellek olmadan değerlendirilmesi - gecikme sivri uçları.
Denetim/değişiklik penceresi yok - uyumluluk riskleri.

15) Satış öncesi kontrol listesi

  • Türü, sahibi, açıklaması, TTL ve bilet gereksinimi ile oluşturulan bayrak.
  • Tanımlanan hedefleme kuralları; İstenmeyen bölgeler/roller üzerinde 'deny'.
  • Yapışkan tokalama deterministiktir; Kimlik stabil.
  • Ön koşullar ve sağlık bayrakları hazır; varsayılan güvenli.
  • Panolar ve p95/p99, error_rate, iş korkulukları uyarıları.
  • Autocatoff yapılandırılmış; rolloout durdurma eşiği ve geri alma koşulları.
  • Kanarya Planı - Yüzdeler/Kilometre Taşları/Pencereyi Değiştir/Sahipler
  • Yapılandırmalar CI'da doğrulanır; Kümeler/bölgeler arasında dağıtılmış anlık görüntü.
  • Destek/ürün belgeleri; Olay oyun kitapları.
  • %100'den sonra kod dallarını ve bayrağın kendisini kaldırmayı planlayın.

16) "migration" bayrağı örneği (DB/index)

yaml flag:
key: "search. use_index_v2"
type: "migration"
description: "Switching reads to index v2"
prerequisites:
- key: "search. index_v2_built"
must_be: "on"
rules:
- when: { tenant_id: ["brand_eu"], user_pct: 5 } then: "on"
- when: { tenant_id: ["brand_eu"], user_pct: 25 } then: "on"
safeguards:
auto_rollback_on:
search_p95_ms: ">180"
error_rate: ">1%"
ttl: "2026-02-01"

Sonuç

Feature Flags sadece "açma/kapama'değil, aynı zamanda değişim risk yönetimi disiplinidir. Net bayrak türleri, deterministik hedefleme, korkuluklu aşamalı görüntüler, otokatof, denetim ve silme planı, bültenleri öngörülebilir ve olayları özlü ve kontrollü hale getirir. Birinci sınıf vatandaş olarak mimariye bayraklar yerleştirin - ve daha sık, daha güvenli ve daha anlamlı bir şekilde değer sunabilirsiniz.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.