GH GambleHub

Feature Flags və buraxılışların idarə edilməsi

Feature Flags və Release Management

1) Əgər buraxılışlar varsa, bayraqlar niyə?

Feature Flags (Fiche bayraqları) deployun açılmasına və funksiyanın daxil edilməsinə imkan verir: kod prod-a sabit və əvvəlcədən daxil olur və biznes daxil edilməsi konfiqurasiya/konsol tərəfindən idarə olunur - seqmentlərə, trafik faizlərinə, bazarlara, VIP/tənzimləyici qruplara, cihazlara və s. Üstünlüklər:
  • Buraxılışların sürəti və təhlükəsizliyi: kiçik artımlar + ani geri dönüş.
  • Radius nəzarət: mütərəqqi rollout, ring, SLO stoppers.
  • Təcrübələr və A/B: multivariate bayraqlar, effektlər statistikası.
  • Əməliyyat ssenariləri: riskli ödəniş/oyun yolları üçün kill-switch.

Əsas prinsip: «ship dark, enable bright» - əvvəlcədən çatdırmaq, şüurlu şəkildə daxil etmək.

2) Bayraq növləri

Boolean: açıq/off fiçalar, təcili stop bayraqları (kill-switch).
Multivariate: davranış variantları (alqoritm A/B/C, limitlər, əmsallar).
Config/Remote Config: parametrləri (taymaut, bahis limitləri, bonus ölçüsü).
Permission/Entitlement: Rollar/tiers funksiyalarına/limitlərinə giriş.
Operational: trafikin marşrutlaşdırılması (kölgə sorğusu, yeni xidmətin daxil edilməsi).

3) Memarlıq və məlumat axını

Control Plane: konsol/bayraq serveri, qaydaların/seqmentlərin saxlanması, audit.
Data Plane (SDK/Proxy/Edge): bayraqların alınması və önbelləklənməsi, yerli qaydaların qiymətləndirilməsi (minimum gecikmə), mövcud olmadıqda folbek.

Yayılma yolları:
  • Pull: SDK vaxtaşırı (ETag/stream) sinxronlaşdırır.
  • Push/Streaming: Server push updates (Server-Sent Events/WebSocket).
  • Edge Cache/Proxy: istifadəçiyə daha yaxın, p99 azaldır.
Prod səviyyəsinə tələblər:
  • Qaydaların yerli qiymətləndirilməsi (hot-path şəbəkə hopu olmadan).
  • Taymaut və folbeklər (bayrağın «bloklama» oxunması olmadan).
  • Konfiqurasiya snapshot imzası/versiyası.

4) Hədəfləmə və seqmentlər

Atributlar: ölkə/region, dil, platforma, KYC səviyyəsi, VIP səviyyəsi, risk sürəti, hesab yaşı, ödəmə metodu, məsuliyyətli oyun limitləri.
Seqmentlər: versiyaları ilə qorunan qaydalar; «yumşaq» (marketinq) və «sərt» (komplayens).
Prioritetlər/münaqişələr: açıq qaydalar, «son təsadüf» testsiz qadağandır.
Geo/tənzimləyici: yurisdiksiyalarına görə məhsulun mövcudluğu bayraqları; dəyişməz predikatlar (məsələn, müəyyən bir ölkə üçün bonus qadağası).

Nümunə qaydaları (JSON):
json
{
"flag": "new_withdrawal_flow",
"default": false,
"rules": [
{"when": {"country": "CA", "kyc_level": "FULL"}, "rollout": 25},
{"when": {"segment": "vip_tier_3_plus"}, "rollout": 100},
{"when": {"country": "DE"}, "force": false}
],
"expiresAt": "2026-03-31T00:00:00Z"
}

5) Proqressiv rollout: strategiyalar

Canary by%: 1% → 5% → 25% → 50% → 100% SLO avto-stop ilə.
Rings: daxili komanda → beta istifadəçilər → bir region → qlobal.
Cihazlar/müştərilər üçün sampling: stickiness (hash ID) nəzərə alın.
Shadow traffic: istifadəçi təsir etmədən yeni bir yola sorğu dublyaj.
Dark launch: aktiv, lakin görünmür (ölçü toplamaq, cache qızdırmaq).

SLO-stop şərtləri (nümunə):
  • API gizli p95 pisləşməsi 'withdraw'> + 15% 10 dəqiqə ərzində.
  • Səhvlər 5xx> 0. 5% və ya ödəniş provayderinin uğursuzluqlarının artması> + 0. 3 p.p.
  • Alert froda/risk-skoring seqmentdə həddən yuxarıda.

6) Kill-switch (təcili bayraqlar)

SRE/On-Call tərəfindən görünən ayrı bir bayraq sinfi.
TTL cache ilə zəmanətli yerli qiymətləndirmə (millisaniyələr).
Geri qaytarılmayan bağlantılar: require reason + postmortem ticket.
Avtomatik hərəkət inteqrasiyaları: bonusun bağlanması, ödənişlərin əl rejiminə keçirilməsi, X. provayderi üçün əmanətlərin qadağan edilməsi.

7) CI/CD və GitOps ilə inteqrasiya

CI: bayraq sxemlərinin, lint qaydalarının, anonim nümunələrə görə «quru qaçış» hədəfləməsinin təsdiqi.
CD: həssas bayraqlar üçün artefaktlar (semver), «approval gates» kimi bayraq konfiqurasiyalarının təşviqi (ödənişlər/komplayens).
GitOps: ayrı bir konfiqurasiya anbarında bayraqlar, merj rekvest = dəyişiklik hadisəsi, audit «qutusundan».

8) Təhlükəsizlik və uyğunluq

RBAC/ABAC: Kim faiz yarada/daxil edə/artıra bilər; vəzifə bölünməsi (tərtibatçı ≠ istehsalçı ≠ məhsul sahibi).
Audit: kim/nə/nə/niyə; əsaslandırma (ticket/JIRA), insidentlərlə müqayisə.
PII-minimallaşdırma: hədəfləmə üçün atributlar anonimləşdirmə/heşləmə yolu ilə keçir.
Snapshot imzası: SDK/Proxy-də bütövlüyü yoxlayın.
Konfiqurasiya çatdırılması üçün SLA: «təhlükəsiz defolt» deqradasiya.

9) Müşahidə və metrika

Əməliyyat otaqları:
  • Bayrağın yayılma müddəti (p50/p95), yerli cache hit-rate, yeniləmə tezliyi.
  • Aktiv bayraqların sayı/köhnəlmiş/» asılmış» (vaxtında çıxarılmamışdır).
  • SLO mühafizəçiləri: gizlilik, səhv, dönüşüm, provayder sabitliyi.
Məhsullar:
  • DORA: deploes tezliyi, açılmadan əvvəl vaxt, açıldıqdan sonra uğursuzluq faizi, MTTR.
  • A/B göstəriciləri: CR, ARPPU, LTV siqnalları, skorerlərə təsiri.

10) Bayrağın həyat dövrü

1. Design: məqsəd/metrika/sahibi/raf ömrü ('expiresAt'), geri dönüş ssenariləri.
2. Implement: SDK çağırışlar, folbeklər, telemetriya «exposure «/» decision ».
3. Rollout: proqressiv təchizatı + SLO qapısı.
4. Stabilize: effekti düzəldir, sənədləri/rutinqləri yeniləyin.
5. Cleanup: kod qollarını silmək, bayrağı bağlamaq, «qalıqları» yoxlamaq.

11) Tətbiq nümunələri

11. 1 Web/Node. js

ts
//SDK initialization (pseudo)
const flags = await sdk. init({ sdkKey: process. env. FLAGS_KEY, user: { id: userIdHash, country, vipTier } });

//Do not lock render:
const showNewCashout = flags. bool("new_withdrawal_flow", false);

if (showNewCashout) {
renderNewFlow();
} else {
renderClassic();
}

11. 2 Kotlin / JVM

kotlin val client = FlagsClient(sdkKey = System. getenv("FLAGS_KEY"))
val context = UserContext(id = userHash, country = country, kycLevel = kyc)
val enabled = client. getBoolean("risk_guard_withdrawals", default = true, context = context)
if (!enabled) {
//emergency mode: all outputs in manual review routeToManual ()
}

11. 3 NGINX (map vasitəsilə xarici toggle)

nginx map $http_x_feature $cashout_new {
default 0;
"~enabled" 1;
}

location /withdraw {
if ($cashout_new) { proxy_pass http://new_flow; }
if (!$cashout_new) { proxy_pass http://classic_flow; }
}

12) Risklərin idarə edilməsi və mütərəqqi addımlar

Daxil etmə addımları: 1% işçilər → 5% «beta» → 10% RU → 25% EU → 100% DE istisna olmaqla (tənzimləyici).
Məhdudlaşdırıcılar: maksimum 1 addım/30 dəq; pəncərə üçün metrik sabitlik tələbi 15 dəq.
Avto-stop: platforma səviyyəsində siyasət (aşağıda bax: OPA).

OPA-avto-stop siyasəti (sadələşdirilmiş):
rego package flags. guard

deny[msg] {
input. flag == "new_withdrawal_flow"
input. metrics["withdraw_5xx_rate"] > 0. 5 msg:= "Stop rollout: withdraw 5xx too high"
}

13) Giriş və koordinasiyanın idarə edilməsi

Change Types: standart (təhlükəsiz) vs həssas (ödənişlər/ödənişlər/limitlər).
Approvals: məhsul sahibi + texniki. məsul + komplayens (yurisdiksiyalar üçün).
Müvəqqəti pəncərələr (freeze): yüksək riskli dövrlərdə (prime-time, böyük turnirlər) daxil olmağın/genişləndirmənin qadağan edilməsi.

14) Təcrübələr və statistika

Exposure events: Bayrağın həllini atributlarla qeyd edin.
Analitika: cari rollout dəyəri, seqmentlər, dönüşüm/səhv təsiri.
Statistik yoxlamalar: düzgün split, nəzarət kovariatları (qurğular/geo).
Etika və tənzimləmə: yerli hüquqla məhdudlaşan seqmentasiyalardan qaçınmaq.

15) Anti-nümunələr

kodda 'expiresAt', «budaqlar qəbiristanlığı» olmadan uzun ömürlü bayraqlar.
Hot-path-da SDK şəbəkə çağırışını bloklayın.
Artıq PII hədəfləmə, atributların anonimləşdirilməməsi.
SLO mühafizəçiləri/avtomobil dayanacağı olmadan qoşulma.
Yüksək riskli axınlar üçün heç bir kill-switch (depozitlər/çıxışlar/bonuslar).
Audit və əsaslandırma olmadan bayraqların «gizli» əl düzəlişləri.

16) Giriş çek siyahısı (0-60-90)

0-30 gün

Bayraq platformasını seçin/self-host (SDK, proxy, önbellək) hazırlayın.
Sxemi daxil edin ('flag', 'owner', 'purpose', 'expiresAt', 'risk _ level').
SLO metriklərini platformaya qoşun (gizlilik/açar API səhvləri).

31-60 gün

Həssas bayraqlara approvals əlavə, OPA mühafizəçiləri.
Proqressiv strategiyaları (percent/rings), kill-switch panelini konfiqurasiya edin.
CI bayraq sxemi linter inteqrasiya; ilk «asılmış» təmizləməyə başlayın.

61-90 gün

GitOps ilə tam inteqrasiya (bayraqların MR redaktəsi, audit).
Vizual daşbordlar: coverage SDK, paylanma vaxtı,% cash hitləri.
Müntəzəm «Flag Debt Day»: kodu silmək və bayraqları bağlamaq.

17) Yetkinlik metrikası

Texnika: p95 konfiqurasiya qəbul <5 s; cache hit-rate SDK> 95%;% bayraqlar ilə 'expiresAt'> 90%.
Proseslər: approvals ilə 100% həssas bayraqlar; orta «geri dönüş vaxtı» <3 dəqiqə.
Kod gigiyenası: Qlobal qoşulmadan sonra 30 gün ərzində qapalı bayraqların payı> 80%.
Biznes effekti: DORA-nın təkmilləşdirilməsi (buraxılış tezliyi ↑, MTTR ↓), buraxılış hadisələrinin azalması.

18) Proqramlar: şablonlar və siyasətlər

Bayraq sxemi (YAML)

yaml flag: new_withdrawal_flow owner: payments-team risk_level: high purpose: "New withdrawal flow"
expiresAt: "2026-03-31T00:00:00Z"
sla:
propagation_p95_ms: 3000 slo_guards:
withdraw_p95_ms_increase_pct: 15 withdraw_5xx_rate_pct: 0. 5 approvals:
required: ["product_owner","tech_lead","compliance"]

«Əbədi bayraqlar yoxdur» siyasəti (şərti olaraq linter üçün)

yaml rules:
- check: expiresAt max_days_from_now: 180 action: error

SDK-müqavilə hadisələri (exposure)

json
{
"event": "flag_exposure",
"flag": "new_withdrawal_flow",
"variant": "on",
"userKey": "hash_abcdef",
"context": {"country":"CA","vipTier":"3"},
"traceId": "9f1c...a2",
"ts": 1730623200000
}

19) Nəticə

Feature Flags dəyişiklik üçün "səs tutacağı 'dır. Mütərəqqi qoşulmalar, SLO mühafizəçiləri, sərt audit və müntəzəm təmizləmələri birləşdirin və bayraqları CI/CD və GitOps-a bağlayın. Nəticədə, buraxılışlar tez-tez, idarə olunan və təhlükəsiz olacaq və insident riski proqnozlaşdırıla bilən və nəzarət edilə bilər.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.