Circuit Breaker va degradatsiya
Circuit Breaker (CB) - bu nosozlikni blokirovka qilish va foydalanuvchi va apstrim xizmatlarini himoya qilish uchun tanazzulga uchragan qaramlikka qarshi qo’ng’iroqlarni to’xtatadigan himoya patterni. Degradatsiya (graceful degradation) - resurslar yetarli boʻlmaganda yoki nosozlikda funksionallikni ongli ravishda soddalashtirish (masalan, keshlangan/toʻliq boʻlmagan maʼlumotlarni qaytarish, «qimmat» fichni oʻchirish).
Asosiy maqsad: SLO va foydalanuvchi tajribasini kaskadli yiqilish o’rniga nazorat qilinadigan nosozliklar hisobiga saqlab qolish.
1) Ushbu Nizomning
Bog’liqlik beqaror: o’sish p95/p99, taymautlar, noto’g’ri javoblar.
Qattiq limitli/penaltili tashqi API.
Retralar bo’ronni kuchaytiradigan «og’ir» orqa tomonlar (qidirish, tavsiyalar, hisobotlar).
Pullarning (birikmalarning, tredlarning) tugash xavfi yuqori yuklangan uchastkalar.
2) CB holatlari va o’tish joylari
Klassik uchlik:1. Closed - trafik davom etmoqda, xato/latentlik metrikasi hisoblanadi.
2. Open - qoʻngʻiroqlar darhol rad etiladi (fail-fast) va/yoki fallbackga oʻtkaziladi.
3. Half-Open - «sinov» soʻrovlarining cheklangan soni oʻchirgichni yopish-yopmasligini aniqlaydi.
Ochish triggerlari
Oyna uchun xato/taymaut chegarasi (masalan, oxirgi Ndan 50% ≥).
Latentlik chegarasi (masalan, p95> maqsadli).
Kombinatsiyalangan siyosatlar (xatolar ∧ taymautdan oshib ketish).
Ushlab qolish vaqti (cool-down)
Qat’iy (masalan, 10-60 sek) yoki adaptiv (takroriy ishga tushirishda eksponensial o’sish).
3) Taymautlar, retraylar va jitter
Taymautlar har doim SLO apstrimidan qisqaroq va zanjir bo’yicha kelishilgan (deadline propagation).
Retrai faqat idempotent operatsiyalari uchun; Ko’p hollarda 1-2 ta urinish etarli.
Backoff + jitter (full jitter) sinxron takrorlash toʻlqinlarining oldini oladi.
Hedging (zaxira so’rovlar) - tejamkor va faqat juda tanqidiy o’qish uchun.
4) Bulkhead-izolyatsiya va «saqlagichlar»
Ulanish/vorker/navbat pullarini domenlar va trafik turlari (VIP, fon vazifalari, ommaviy API) bo’yicha ajrating.
«Qimmatbaho» operatsiyalar uchun caps on concurrency.
Admission control: navbat to’lib ketganda bajarishdan oldin oson rad etish.
5) Fallback va degradatsiya stsenariylari
Variantlar
Kesh/Steyl javoblari:’stale-while-revalidate’, L2/L3 keshdan maʼlumotlarni qaytarish.
Read-only: blok/buyruqlar yozish, xavfsiz o’qishga ruxsat berish.
Surrogat javoblar: to’liq bo’lmagan ma’lumotlar (masalan, tavsiyalarsiz/avatarsiz).
Funksional oʻchirish: tanqidiy boʻlmagan vidjetlarni vaqtincha yashirish.
Feature flags: relizsiz xulq-atvorni tez oʻzgartirish.
Qoidalar
Fallback determinik, tezkor va xavfsiz boʻlishi kerak.
Buzilgan yo’lni loglar/treyslar/metriklarda aniq belgilang.
6) Ustuvorlik va trafik-sheyping
VIP/to’lov rejalari - taqchillikda eng katta ustuvorlik/kvotalar.
Rate limits va throttling degradatsiyaga uchragan qaramliklarni kamaytiradi.
Shed load: barqarorlashgunga qadar sifatning yumshoq pasayishi (masalan, kamroq natijalar, qisqartirilgan tasvirlar).
7) Kuzatuv va signaling
CB metrikasi
Holati (closed/open/half-open) va davomiyligi.
Sabablar bo’yicha nosozliklar ulushi: CB-open, timeout, 5xx, retry-exhausted.
p95/p99 o’chirgichning «gacha» va «keyin» latentligi.
Fallback orqali soʻrovlar soni/ulushi.
Treysing
Span izohlari:’circuit = opened’,’fallback = cache’,’admission = denied’.
Chegaralar (429/RateLimit-), navbatlar va ulanish o’qlari bilan bog’lanish.
Logi/audit
Ochish/yopish sababi, chegaralar, qaramlik identifikatorlari.
8) Kontraktlar va bayonnoma
HTTP
Fail-fast:’503 Service Unavailable’s’Retry-After’(yoki limitlarda’429’).
Partial content/steyl:’200 ’/’ 206’degradatsiya meta-maʼlumotlari bilan (masalan,’X-Degraded: true’).
Kesh siyosati:’Cache-Control: stale-if-error, stale-while-revalidate’.
gRPC
’UNAVAILABLE’,’DEADLINE _ EXCEEDED’, mijoz/proksi siyosati bo’yicha retray semantikasi.
Soʻrov kontekstida Deadline/timeout; muddatning zanjir bo’ylab pastga tarqalishi.
Idempotentlik
POST-operatsiyalar uchun «Idempotency-Key», chegarada de-duplikatsiya.
9) Namunaviy amalga oshirish (psevdokod)
pseudo onRequest(req):
if circuit. isOpen(dep):
return fallbackOrFail(req)
with timeout(T):
try:
resp = call(dep, req)
circuit. recordSuccess(dep, latency=resp. latency)
return resp except TimeoutError or 5xx as e:
circuit. recordFailure(dep)
if circuit. shouldOpen(dep):
circuit. open(dep, coolDown=adaptive())
return fallbackOrFail(req)
Half-Open namunasi
pseudo onTimer():
if circuit. state(dep) == OPEN and coolDownExpired():
circuit. toHalfOpen(dep)
onRequestHalfOpen(req):
if circuit. allowTrial (dep): # e.g. 1 try: call -> success => close catch: reopen with longer coolDown else:
return fallbackOrFail(req)
10) Ostonalarni sozlash
Kuzatuv oynasi: harakatlanuvchi N soniya/soʻrov.
Xato chegarasi: oynada 20-50% (profilga bogʻliq).
Latentlik chegarasi: p95 ≤ maqsadli SLO (masalan, 300-500 ms); ortiqcha CB uchun «xato» sifatida hisobga olinadi.
Moslashuvchan cool-down: 10s → 30s → 60s qayta ishga tushirilganda.
11) Test va xaos-amaliyot
Chaos: yashirin/xato inyeksiyasi, DNS sinishi, drop paketlar.
Game days: O’q-dorilarga o’xshash muhitda o’tkazgichni «ochish», fallbackni tekshirish.
Canary: 1-5% trafik uchun avval SV/degradatsiya siyosatini kiriting.
SLO-byudjet: error-budget tugaguncha tajriba o’tkazing.
12) Ko’p tenantlik bilan integratsiya qilish
CB holatini per-dependency per-tenant (shovqinli ijarachilar uchun) yoki global miqyosda - yuklama profiliga qarab saqlash mumkin.
Fallback ma’lumotlari va keshlarni’tenant _ id’bo’yicha segmentlashtiring.
Ustuvorliklar/kvotalar - rejalarga muvofiq (VIP Starter xatti-harakatlaridan aziyat chekmasligi kerak).
13) Sotishdan oldingi chek-varaq
- Vaqt va muddatlar uzluksiz va kelishilgan.
- Retraylar cheklangan, faqat idempotent operatsiyalari uchun, backoff + jitter bilan.
- CB chegara qiymatlari yuklama testi ma’lumotlari bilan asoslanadi.
- Fallback yo’llari mavjud, tezkor va xavfsiz; siyosatning keshi aniqlandi.
- Bulkhead-izolyatsiya: alohida pullar/navbatlar/limitlar.
- Metriklar/treyslar/loglar CB degradatsiyalari va holatlarini belgilaydi.
- Javob shartnomalari hujjatlari (HTTP/gRPC) sarlavha/kodlar misollari bilan.
- Xaos-stsenariylar va game-days muntazam ravishda o’tkaziladi; runbook mavjud.
14) Tipik xatolar
Hech qanday taymaut yo’q → to’g’ridan to’g’ri retryalar va kaskad tushishlari.
Saylov o’rniga yagona global CB (endpoint/usul bo’yicha) - ortiqcha rad etish.
Fallback bo’lmagan ochiq o’chirgich → degradatsiyalangan UX o’rniga «bo’sh» ekranlar.
Jittersiz retrajlar → sinxron so’rovlar bo’ronlari.
Uzoq cool-down qisqa muddatli nosozliklarda yoki «flip-flop» barqaror holatlarda juda qisqa.
Bulkhead yo’qligi - umumiy pullarning kamayishi va «head-of-line blocking».
15) Strategiyani tez tanlash
Yuqori darajadagi oʻqishlar: CB + steyl-javoblar keshi + hedging (tejamkor).
Yozuvlar/to’lovlar: qat’iy taymautlar, minimal retraylar, idempotency keys, «iflos» fallback yo’qligi.
Tashqi API: tajovuzkor ostonali CB, adaptiv cool-down, qattiq throttling.
Mikroservislar: bulkheads, caps on concurrency, ustuvorlik VIP.
Xulosa
Circuit Breaker va boshqariladigan degradatsiya - bu arxitekturaning «sug’urtasi»: ular noto’g’ri xatti-harakatlarni oldindan aytib bo’ladigan xatti-harakatlarga o’tkazadilar. Aniq taymautlar, cheklangan retrajlar, izolyatsiyalangan pullar, puxta o’ylangan fallback-yo’llar va telemetriya tizimni bog’liqlikning uzilishiga chidamli qiladi va hatto eng yuqori va avariya davrida ham SLOni ushlab turadi.