GH GambleHub

Feature Flags we Fich

Feature Flag (FF) kody çykarmazdan ulgamyň özüni alyp barşyny öz içine alýan/öçürýän dolandyrylýan şertdir. Baýdaklar: fiçleri howpsuz çykarmaga, ulanyjylaryň/bazarlaryň/tenantlaryň toparlaryny nyşana almaga, problemaly komponentleri çalt öçürmäge, synaglary geçirmäge we parametrleri kärendesine düzmäge mümkinçilik berýär.

Esasy maksatlar:
  • Goýberilende blast radiusyny azalt.
  • Ýerleşdirmegi we işjeňleşdirmegi bölmek.
  • Audit, SLO we "bir gezek basmak" bilen üýtgeşmeleri aç-açan dolandyrmak.

1) Baýdaklaryň görnüşleri we olary haçan ulanmak

Release flags - täze çiçegiň tapgyrlaýyn goşulmagy (dark → canary → ramp-up → 100%).
Ops/kill-switch - garaşlylygy derrew öçürmek (üpjün ediji, kiçi ulgam, agyr hasaplamalar).
Experiment (A/B, multi-variant) - traffigi wariantlara bölmek (weights, sticky bucketing).
Permission/Entitlement - rollar/meýilnamalar/ýurisdiksiýalar boýunça aýratynlyklara girmek.
Remote Config - baýdakdan/konfigadan özüňi alyp barşyň parametrleri (bosagasy, wagt, formula).
Migration flags - shemalary/maglumat ýollaryny üýtgetmek (täze indekse/BD/endpointe geçmek).

Anti-pattern: şol bir baýdak "hemme zat hakda" - fiça, komp switch we parametrlere bölüň.

2) Baýdak maglumatlarynyň nusgasy (iň az)

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) Baha bermek we nyşana almak (evaluation)

Ключи таргетинга: `tenant_id, region/licence, currency, channel, locale, role, plan, device, user_id, cohort, kyc_tier, experiment_bucket`.
Baha bermegiň tertibi: prerequisites → deny-düzgünler → allow-düzgünler → defolt.
Sticky bucketing: Synap görmek üçin, 'hash (user_id, flag_key)' - ulanyjynyň hemişe bir warianty almagy üçin durnukly kesgitleýjini kesiň.

Pseudo:
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 paýlanyşy we arhitekturasy

Wariantlar:
  • Server-side SDK (maslahat berilýär): hakykat çeşmeleri we arka tarapdaky keş; logikany birleşdirmek.
  • Edge/CDN evaluation: perimetrde çalt nyşana almak (PII/syr ýok).
  • Client-side SDK: UI şahsylaşdyrmak zerur bolanda, ýöne - diňe iň az kontekstde we duýgur düzgünler bolmazdan.
  • Config-as-Code: baýdaklary repozitoriýada saklamak, CI-ni tassyklamak, CD arkaly rollout.
Strategiýalary ýada salmak:
  • Startup bootstrap + streaming updates (SSE/gRPC) + fallback iň soňky snapshot.
  • Baýdaklaryň SLA "freshness": p95 ≤ 5 s.

5) Goýberiş strategiýalary

5. 1 Dark Launch

Surat açyldy, ýöne ulanyja görünmeýär; metrikleri we ýalňyşlyklary ýygnaýarys.

5. 2 Canary

Bir ýurisdiksiýada/tenantada traffigiň 1-5% -ini goşýarys; p95/p99, ýalňyşlyklar, öwrülişikler.
Stop conditions - metrikler boýunça awtokatofyň bosagaly triggerleri.

5. 3 Progressive Rollout

10% → 25% → 50% → 100% el bilen/awto-barlamak bilen.

5. 4 Shadow / Mirroring

Täze ýolda (görünýän täsir etmezden) haýyşlary köpeldýäris we netijeleri/gizlinligi deňeşdirýäris.

5. 5 Blue/Green + FF

Iki wersiýany açýarys; baýdak traffigi dolandyrýar we segmentlere garaşlylygy üýtgedýär.

6) Garaşlylyk we kross-hyzmat yzygiderliligi

Prerequisites we "saglyk-taýynlyk baýdaklaryny" ulanyň: indeks guruldy, migrasiýa tamamlandy.
Wakalar arkaly utgaşdyrmak: 'FlagChanged (flag_key, skope, new_state)'.

Möhüm ssenariler üçin iki fazaly açyşdan peýdalanyň:

1. açyň read-way → 2) metrikleri barlaň → 3) write/side-effects.

  • Hyzmat şertnamalary: defolt howpsuz bolmaly (fil-safe OFF).

7) Synlamak we SLO

Baýdak/wariant/segment üçin metrikler:
  • `flag_eval_p95_ms`, `errors_rate`, `config_freshness_ms`.
  • Iş metrikleri: 'ctr', 'conversion', 'ARPU', 'retention', guardrails (mysal üçin, RG hadysalary).
  • Awtokatof üçin awtomatiki SLO bosagalary.

Giriş/söwda: 'flag _ key', 'variant', 'decision _ source' (server/edge/client), 'context _ hash' goşuň.

Daşbordlar: bosagalar bilen "basgançak" rollout, segmentler boýunça ýalňyşlyklaryň heatmap.

8) Howpsuzlyk we gabat gelmek

kontekstde PII-minimalizasiýa.
RLS/ACL: kim haýsy baýdaklary üýtgedip biler (domenler/bazarlar boýunça).
Üýtgetmek üçin sagat penjireleri (change windows) we duýgur baýdaklar üçin "goşa tassyklama".
Üýtgemeýän audit: kim/haçan/näme/näme (ticket/incident link).
Ýurisdiksiýalar: baýdaklar kadalaşdyryjy gadaganlyklardan aýlanyp geçmeli däldir (mysal üçin, gadagan edilen ýurtda oýny öz içine almalydyr).

9) "Uzak möhletli" baýdaklary dolandyrmak

Her baýdagyň TTL/öçürilen senesi bar.
100% goşulandan soň - kod şahalaryny aýyrmak üçin task dörediň, ýogsam "baýdak-karz" öser.
Baýdaklary 'migration '/' one-time' diýip belläň, olary hemişelik 'permission/config' -den aýyryň.

10) Şertnamanyň API/SDK mysaly

Evaluation API (server-side)

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" }
}

Client SDK (кэш, fallback)

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

11) Beýleki konturlar bilen özara gatnaşygy

Rate limits/kwotalar: baýdaklar RPS-i peseldip biler/waka wagtynda trottling goşup biler.
Circuit breaker/degradation: kill-switchy agyr ýollary öçürýär we zaýalanmagy öz içine alýar.
Katalog/şahsylaşdyrma: baýdaklar agramy/reýting düzgünlerini üýtgedýär (Remote Config arkaly).
DB göçmeleri: baýdaklar okalyşlary/ýazgylary tapgyrlaýyn täze shema geçirýärler (read-replica → dual-write → write-primary).

12) Oýun kitaplary (runbooks)

1. 25% -den soňky waka

Awtokatof işledi → hemmeler/segment üçin OFF baýdagy, on-call-daky bilet, stats ýygnamak, RCA.
Göçme baýdak arkaly könelişmegi/köne şahany wagtlaýyn açyň.

2. p95 katalogyň beýikligi

Bosagasy 'p95 _ ms> 200' - awtokatof; 'flag _ key = catalog. new_ranker`.
Ýönekeýleşdirilen reýting signallaryny açyň (payload config).

3. Ýurisdiksiýanyň laýyk gelmezligi

Permission baýdagy 'NL' - OFF '-da oýny ýalňyşlyk bilen açdy + faktdan soňky audit, "region deny" gorag düzgünini goşmak.

4. A/B dispersiýasy

Synagy duruzmak, CUPED/stratified derňewi geçirmek, täzelenen tereziler bilen gaýtadan işlemek.

13) Synag

Unit: düzgünlere/ileri tutulýan ugurlara/prerekwizitlere kesgitlenen baha bermek.
Contract: baýdaklaryň shemasy (JSON/YAML), walidatorlar, merjeniň öňündäki CI barlagy.
Property-based: "deny> allow", "most specific wins", durnukly bucketing.
Replay: Täze konfigurasiýada hakyky kontekstleri oýnamak.
E2E: kanareýa skriptleri (step-up/step-down), awtokatofy we audit-wakalary barlamak.
Chaos: akymyň döwülmegi, köne snapshot, baýdaklaryň köpçülikleýin täzelenmegi.

14) Adaty ýalňyşlyklar

Müşderi baýdaklarynda gizlin logika (syzmak/çalyşmak).
Kodda baýdaklaryň ýoklugy TTL → "gonamçylyk".
Bölümlenmezden "ähliumumy" baýdaklar → meseläni lokallaşdyryp bolmaýar.
guardrails/awtokatoflar ýok - el bilen hadysalar.
Baýdaklaryň arasyndaky gabat gelmeýän baglanyşyklar → aýlawlar/rasinhron.
Her soragdaky baýdaklara kesişsiz baha bermek → gizlinlik partlamasy.
Auditiň/üýtgeşmeleriň penjiresiniň ýoklugy - laýyklyk töwekgelçiligi.

15) Azyk önüminden öň çek-sanawy

  • Baýdak görnüşi, owner, beýany, TTL we bilet talaby bilen döredildi.
  • Maksat düzgünleri kesgitlenendir; 'deny' islenilmeýän sebitlere/rollara.
  • Sticky bucketing kesgitlenen; Kesgitleýji yzygiderli saýlandy.
  • Prerekwizitler we saglyk baýdaklary taýýar; defolt howpsuz.
  • Daşbordlar we alertler p95/p99, error_rate, business-guardrails.
  • Awtokatof sazlandy; rollout duralgasy we yzyna gaýtarmagyň şertleri.
  • Kanar meýilnamasy: göterim/tapgyrlar/üýtgeşmeler penjiresi/jogapkär.
  • Konfigiler CI-de tassyklanýar; snapshot toparlar/sebitler boýunça paýlandy.
  • Goldaw/önüm üçin resminamalar; wakalaryň pleýbuklary.
  • 100% -den soň kod we baýdak şahalaryny aýyrmak meýilnamasy.

16) "Migrasiýa" baýdagynyň mysaly (DB/indeks)

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"

Netije

"Feature Flags" diňe bir "açyk/ýapyk" däl, eýsem üýtgemek töwekgelçiligini dolandyrmagyň düzgünidir. Baýdaklaryň aýdyň görnüşleri, kesgitlenen nyşana almak, guardrails bilen progressiw düzüliş, awtokatof, audit we aýyrmak meýilnamasy relizleri öňünden aýdyp boljak, wakalary bolsa gysga we gözegçilik edip boljak edýär. Raýatlaryň birinji synpy ýaly arhitektura baýdaklary goýuň - gymmaty ýygy-ýygydan, has ygtybarly we manyly getirip bilersiňiz.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.