GH GambleHub

Feature Flags va fich

Feature Flag (FF) - kodni chiqarmasdan tizimning xatti-harakatlarini oʻz ichiga olgan/oʻchiradigan boshqariladigan shart. Bayroqlar: xavfsiz chichlarni haydash, foydalanuvchilar/bozorlar/tenantlar guruhlarini nishonga olish, muammoli komponentlarni tezda o’chirish, tajriba o’tkazish va rantaymdagi parametrlarni konfiguratsiya qilish imkonini beradi.

Asosiy maqsadlar:
  • Relizlarda blast radiusni kamaytirish.
  • Joylashtirish va faollashtirishni boʻlish.
  • Audit, SLO va «bir marta bosish» bilan oʻzgarishlarni shaffof boshqarish.

1) Bayroqlarning turlari va ularni qachon qo’llash

Release flags - yangi fichni bosqichma-bosqich kiritish (dark → canary → ramp-up → 100%).
Ops/kill-switch - bog’liqliklarni (provayder, quyi tizim, og’ir hisoblash) bir zumda uzib qo’yish.
Experiment (A/B, multi-variant) - trafikni variantlarga (weights, sticky bucketing) ajratish.
Permission/Entitlement - rollar/rejalar/yurisdiksiyalar bo’yicha chichlarga kirish.
Remote Config - bayroqdan/konfigadan xulq-atvor parametrlari (chegara, taymaut, formula).
Migration flags - ma’lumotlar sxemalarini/yo’llarini o’zgartirish (yangi indeks/DB/endpointga o’tish).

Anti-pattern: bir xil «hamma haqida» bayrog’ini fichu, komp-svitch va parametrlarga bo’ling.

2) Bayroq ma’lumotlari modeli (minimal)

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) Baholash va targeting (evaluation)

Ключи таргетинга: `tenant_id, region/licence, currency, channel, locale, role, plan, device, user_id, cohort, kyc_tier, experiment_bucket`.
Baholash tartibi: prerequisites → deny-qoidalar → allow-qoidalar → defolt.
Sticky bucketing: tajriba uchun barqaror identifikatorni xeshlang (masalan,’hash (user_id, flag_key)’- foydalanuvchi har doim bitta variantni oladi.

Psevdokod:
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 taqsimoti va arxitekturasi

Variantlar:
  • Server-side SDK (tavsiya etilgan): haqiqat manbalari va bekenddagi kesh; mantiqni birxillashtirish.
  • Edge/CDN evaluation: perimetrda tezkor targeting.
  • Client-side SDK: UI ni personallashtirish kerak bo’lganda, lekin - faqat minimal kontekstda va sezgir qoidalarsiz.
  • Config-as-Code: bayroqlarni repozitoriyada saqlash, CI validatsiyasi, CD orqali rollout.
Strategiyalar keshi:
  • Startup bootstrap + streaming updates (SSE/gRPC) + oxirgi snapshot uchun fallback.
  • SLA «freshness» bayroqlari: p95 ≤ 5 s.

5) Chiqarilish strategiyasi

5. 1 Dark Launch

Ficha yoqilgan, lekin foydalanuvchiga koʻrinmaydi; metrika va xatolarni to’playmiz.

5. 2 Canary

Bitta yurisdiksiya/tenantdagi 1-5% trafikni kiritamiz; monitoring p95/p99, xatolar, konversiya.
Stop conditions - metriklar bo’yicha avtokatofning chegara triggerlari.

5. 3 Progressive Rollout

10% → 25% → 50% → 100% dastur bo’yicha qo’lda/avto-tekshirish.

5. 4 Shadow / Mirroring

So’rovlarni yangi yo’lda (ko’rinmas) takrorlaymiz va natijalarni/yashirlikni taqqoslaymiz.

5. 5 Blue/Green + FF

Ikkita versiyani joylashtiramiz; bayroq trafikni boshqaradi va segmentlarga qaramlikni o’zgartiradi.

6) Qaramlik va kross-servis konsistentligi

prerequisites va «health-bayroqlar» dan foydalaning: indeks qurilgan, migratsiya tugagan.
Hodisalar orqali muvofiqlashtirish:’FlagChanged (flag_key, scope, new_state)’.

Tanqidiy skriptlar uchun ikki fazali qo’shishdan foydalaning:

1. o’qish yo’li → 2) metrikalarni tekshirish → 3) write/side-effects.

  • Servis kontraktlari: defolt xavfsiz bo’lishi kerak (fail-safe OFF).

7) Kuzatuv va SLO

Bayroq/variant/segment metrikasi:
  • `flag_eval_p95_ms`, `errors_rate`, `config_freshness_ms`.
  • Biznes-metriklar:’ctr’,’conversion’,’ARPU’,’retention’, guardrails (masalan, RG-hodisalar).
  • Avtokatof uchun avtomatik SLO ostonalari.

Logi/treysing:’flag _ key’,’variant’,’decision _ source’(server/edge/client),’context _ hash’qoʻshing.

Dashbordlar: ostonali «zinapoya» rollout, segmentlar bo’yicha xatolar heatmap.

8) Xavfsizlik va komplayens

PII - kontekstda minimallashtirish.
RLS/ACL: kim qaysi bayroqlarni oʻzgartirishi mumkin (domenlar/bozorlar boʻyicha).
Oʻzgarishlar uchun soat oynalari (change windows) va sezgir bayroqlar uchun «ikki marta tasdiqlash».
Oʻzgarmas audit: kim/qachon/nima/nega (ticket/incident link).
Yurisdiksiyalar: bayroqlar tartibga soluvchi taqiqlarni chetlab o’tmasligi kerak (masalan, taqiqlangan mamlakatda o’yinni o’z ichiga olishi kerak).

9) «Uzoq umr ko’radigan» bayroqlarni boshqarish

Har bir bayroqda TTL/olib tashlash sanasi mavjud.
100% qo’shilgandan so’ng, kod shoxlarini olib tashlash uchun task yarating, aks holda «bayroq-qarz» o’sadi.
Bayroqlarni’migration ’/’ one-time’deb belgilang, ularni doimiy’permission/config’dan ajrating.

10) Kontrakt API/SDK misoli

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) Boshqa konturlar bilan o’zaro hamkorlik qilish

Rate limits/kvotalar: bayroqlar hodisa paytida RPS/trottling ni tushirishi mumkin.
Circuit breaker/degradation: kill-switchi og’ir yo’llarni o’chiradi va degradatsiyani o’z ichiga oladi.
Katalog/personalizatsiya: bayroqlar vazn/tartib qoidalarini oʻzgartiradi (Remote Config orqali).
DB migratsiyasi: bayroqlar bosqichma-bosqich o’qish/yozuvlarni yangi sxemaga o’tkazadi (read-replica → dual-write → write-primary).

12) Pleybuklar (runbooks)

1. 25% qoʻshilgandan keyingi hodisa

Avtokatof ishladi → Barcha/segment uchun OFF bayrog’i, on-call chiptasi, stats yig’ish, RCA.
Eskirgan shoxni migration bayroq orqali vaqtincha yoqish.

2. Katalog boʻyi p95

Ostona’p95 _ ms> 200’- avtokatof; ’flag _ key = catalog. new_ranker`.
Soddalashtirilgan ranglash (payload config) signallarini yoqish.

3. Yurisdiksiyaning nomuvofiqligi

Permission bayrog’i’NL’- OFF + post-fakt auditi, «region deny» qo’riqlash qoidasini noto’g’ri ochdi.

4. A/B ga dispersiya

Tajribani toʻxtatish, CUPED/stratified tahlil qilish, yangilangan tarozilar bilan qayta ishlash.

13) Test sinovi

Unit: qoidalar/ustuvorliklar/prerekvizitlarni determinik baholash.
Contract: bayroqlar sxemasi (JSON/YAML), validatorlar, merj oldidagi CI tekshiruvi.
Property-based: «deny> allow», «most specific wins», barqaror bucketing.
Replay: haqiqiy kontekstlarni yangi moslamada takrorlash.
E2E: kanareya skriptlari (step-up/step-down), avtokatofni va audit-hodisalarni tekshirish.
Chaos: strimingning uzilishi, eskirgan snapshot, bayroqlarning ommaviy yangilanishi.

14) Tipik xatolar

Mijoz bayroqlaridagi maxfiy mantiq (sizib chiqish/almashtirish).
TTL → «qabriston» bayroqlarining kodda yo’qligi.
Segmentatsiyasiz «universal» bayroqlar → muammoni mahalliylashtirish mumkin emas.
Gardrails/avtokatoflar yo’q - qo’lda sodir bo’lgan hodisalar.
Bayroqlar o’rtasidagi mos kelmaydigan bog’liqliklar → tsikllar/rasinxron.

Har bir soʻrovdagi bayroqlarni keshsiz baholash

Audit/o’zgarishlar oynasining yo’qligi - komplayens xavfi.

15) Sotishdan oldingi chek-varaq

  • Bayroq turi, owner, tavsifi, TTL va tiket talabi bilan yaratilgan.
  • Maqsadli qoidalar aniqlangan;’deny’nomaqbul mintaqalar/rollarga.
  • Sticky bucketing aniqlangan; identifikator barqaror tanlangan.
  • Prerekvizitlar va health-bayroqlar tayyor; defolt xavfsiz.
  • Dashbordlar va alertlar p95/p99, error_rate, biznes-guardrails.
  • Avtokatof sozlangan; rollout to’xtash chegarasi va qaytarish shartlari.
  • Kanar rejasi: foizlar/bosqichlar/o’zgarishlar oynasi/mas’ul.
  • Konfiglar CI da tasdiqlanadi; snapshot klastyerlar/hududlar bo’yicha taqsimlangan.
  • Qo’llab-quvvatlash/mahsulot uchun hujjatlar; hodisalar pleybuklari.
  • 100% dan keyin kod va bayroq shoxlarini olib tashlash rejasi.

16) «Migratsiya» bayrog’i namunasi (DQ/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"

Xulosa

Feature Flags - bu nafaqat «ochiq/yopiq», balki o’zgarishlar xavfini boshqarish intizomi. Bayroqlarning aniq turlari, determinik targeting, guardrails bilan progressiv hisob-kitoblar, avtokatof, audit va olib tashlash rejasi relizlarni oldindan aytib bo’ladigan, hodisalarni esa qisqa va nazoratli qiladi. Bayroqlarni birinchi darajali fuqarolar sifatida arxitekturaga joylashtiring va siz qimmatni tez-tez, xavfsiz va mazmunli yetkazishingiz mumkin.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.