GH GambleHub

Circuit Breaker և դեգրադացիա

Circuit Breaker (CB) պաշտպանիչ պաթթերն է, որը ընդհատում է դեգրադացված կախվածության մարտահրավերները, որպեսզի տեղայնացնի ձախողումը և պաշտպանի ապաստարանը և օգտագործողը։ Degradation (graceful degradation) - ֆունկցիոնալության գիտակցական պարզեցում ռեսուրսների կամ նվազեցման (օրինակ ՝ կանխված/թերի տվյալները, «թանկ» ֆիչի անջատումը) առանց ամբողջովին դաունտայմի։

Հիմնական նպատակն է պահպանել SLO-ը և օգտագործողի փորձը վերահսկվող ձախողումների պատճառով, կասկադային անկումների փոխարեն։

1) Ե՞ րբ կիրառել

Կախվածությունը անկայուն է 'p95/p99, թայմաուտներ, սխալ պատասխաններ։

Արտաքին API-ը կոշտ սահմաններով/տուգանային։

«Ծանր» backends (որոնում, առաջարկություններ, հաշվետվություններ), որտեղ ռելսերը մեծացնում են փոթորիկը։

Բարձր բեռնված հատվածները փամփուշտների ոչնչացումից (միացություններ, տրեդներ)։

2) CB վիճակը և անցումը

Դասական երեքը

1. Closed-ը գնում է, սխալները/լատենտները համարվում են։

2. Բաց - զանգերը անմիջապես շեղվում են (fail-fox) և/կամ թարգմանվում են fallback-ով։

3. Half-Open-ը, «փորձարկման» հարցումների սահմանափակ քանակը որոշում է, թե արդյոք անջատիչը փակել։

Բացահայտման գործիքներ

Սխալների/թայմաուտների շեմն պատուհանի հետևում (օրինակ, N վերջին 50 տոկոսը)։

Լատենտության շեմն (օրինակ, p95> ռուսական արժեքներ)։

Համակցված քաղաքականությունները (սխալները նպաստում են թայմաուտի ավելցուկին)։

Պահպանման ժամանակը (cool-down)

Ֆիքսված (օրինակ, 10-60 վայրկյան) կամ հարմարվողական (էքսպոնենցիալ աճը կրկնվող գործիքների ժամանակ)։

3) Թայմաուտները, ռեթերը և ջիտթերը

Թայմաուտները միշտ ավելի կարճ են, քան SLO apstrima-ը և համաձայնվում են շղթայի միջոցով (deadom propagation)։

Retrai միայն idempotent վիրահատությունների համար։ 1-2 փորձերը շատ դեպքերում բավարար են։

Backoff + jitter (fultjitter) կանխում է խոհարարների սինխրոն ալիքները։

Hedging (պահեստային հարցումներ) տնտեսապես և միայն շատ քննադատական ընթերցումների համար։

4) Bulkhead-մեկուսացում և «ապահովիչներ»

Բաժանեք փամփուշտները 108/գողերի/հերթերի օրինակներով և տիպերով (VIP, ֆոնային առաջադրանքներ, հանրային API)։

Caps-ը concurrency-ում «թանկ» վիրահատությունների համար։

Admission control: Հեշտ հրաժարվելը մինչև հերթը լրանալը։

5) Fallback-ը և քայքայման սցենարները

Տարբերակներ

Քաշ/սթեյլ պատասխաններ ՝ «stale-while-revalidate», L2/L3 քեշից ստացված տվյալները։

Read-only: բլոկը գրել/թիմեր, թույլ տալ անվտանգ ընթերցումներ։

Surrogate պատասխանները 'թերի տվյալներ (օրինակ ՝ առանց ռուսական/ավատարների)։

Ֆունկցիոնալ անջատումը 'ժամանակավորապես թաքցնել ոչ քննադատական վիջեթները/ֆիչին։

Feature flags 'արագ վարքագծային փոփոխություն առանց ռոտացիայի։

Կանոնները

Fallback-ը պետք է լինի դետերմինացված, արագ և անվտանգ տվյալներով։

Հստակ խոչընդոտեք դեգրադացված ուղին լոգարաններում/թրեյսներում/մետրերում։

6) Գերակայություն և ֆիքսված շեյպինգ

VIP/վճարովի պլանները ավելի մեծ գերակայություն/քվոտաներ են պակասի դեպքում։

Rate limits-ը և throttling-ը նվազեցնում են դեգրադացված կախվածության բեռը։

Shed load 'որակի փափուկ նվազեցում (օրինակ, ավելի քիչ արդյունքներ, կտրված պատկերներ) մինչև 108։

7) Դիտողությունն ու սիգնալինգը

CB մետրիկները

Վիճակը (closed/open/half-open) և տևողությունը վիճակում։

Ձախողումների մասը պատճառներով 'CB-open, timeout, 5xx, retry-exhausted։

p95/p99 լատենտ «մինչև» և «անջատիչից հետո»։

Կոլը/fallback-ի միջոցով հարցումների մասնաբաժինը։

Թրեյսինգը

Սպանների սենսացիաները ՝ «circuit = opened», «fallback = cache», «admission = denied»։

Հարաբերակցությունը սահմանների հետ (429/Rance Limit-), հերթերով և փամփուշտներով։

Լոգա/աուդիտ

Բացահայտման/փակման, շեմերի, կախվածության ցուցանիշների պատճառը։

8) Պայմանագրեր և արձանագրություններ

HTTP

Fail-fox: «503 Live Unavailable» -ը '«Retry-After» (կամ «429» լիմիտներում)։

Partial ente/stail: "200 '/" 206" մետատվական քայքայման հետ (օրինակ ՝ "X-Degraded: 108")։

Քեշի քաղաքական գործիչները ՝ «Cache-Corl: stale-if-error, stale-while-revalidate»։

gRPC

"UNAVAILABABABE", "DEADIM _ EEDED", "RED-ի սեմանտիկան հաճախորդի քաղաքականության վրա/2019։

Deadom/timeout-ը հարցման համատեքստում։ տարածումը ցանցից ներքև է։

Idempotenty

«Idempotency-Key» -ը POST վիրահատությունների համար, սահմանին։

9) Տիպային ստանդարտ (կեղծ)

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 փորձարկում

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) Շեմերի կարգավորում

Դիտարկման պատուհանը 'սայթաքող N վայրկյան/հարցումներ։

Սխալների շեմն 'պատուհանի 20-50 տոկոսը (կախված է միգրանտներից)։

Լատենտության շեմն 'p95 ռուբլիներ SLO (օրինակ 300-500 մզ); ավելցուկը հաշվարկվում է որպես CB-ի համար «սխալ»։

Հարմարվողական cool-down: 10s 3530s 3860s-ը կրկնվող աշխատանքի ժամանակ։

11) Փորձարկում և քաոս պրակտիկա

Chaos: Լատենտության/սխալների միգրացիան կախված է RF, drop-ի կոտրվածքից։

Game days 'անջատիչի «բացման» գործարկումը մարտական միջավայրում, fallback ստուգումը։

Canary 'միացրեք RF/դեգրադացիայի քաղաքականությունը նախ 1-5 տոկոսի համար։

SLO բյուջե 'թույլ տվեք փորձեր, մինչև որ սպառվի error-budget-ը։

12) Ինտեգրումը մուլտֆիլմի տենանտիզմի հետ

CB-ի վիճակը կարելի է պահել per-dependency per-tenae (աղմկոտ վարձողների համար) կամ գլոբալ 'կախված բեռից։

Fallback-տվյալները և քեշները սեգմենտացրեք «tenom _ id»։

Առաջնահերթությունները/քվոտաները 'համաձայն պլանների (VIP չպետք է տառապեն Starter-ի վարքագծից)։

13) Չեկ թուղթ մինչև վաճառելը

  • Timauts և Dedlines միջով և։
  • Retrai-ը սահմանափակված է, միայն գաղափարական վիրահատությունների համար, backoff + ջիթերի հետ։
  • CB շեմի արժեքները հիմնավորված են բեռի թեստի տվյալներով։
  • Fallback ճանապարհները գոյություն ունեն, արագ և անվտանգ։ Քաղաքականության քեշը որոշվում է։
  • Bulkhead-մեկուսացում 'առանձին փամփուշտներ/հերթեր/լիմիտներ։
  • Metriki/treiss/logs նշում են CB-ի քայքայումը և վիճակը։
  • Կարդացեք պատասխանները (HTTP/gRPC) վերնագրերի/վերնագրերի օրինակներով։
  • Քաոս սցենարները և game-days-ը պարբերաբար անցնում են. կա runbook։

14) Տիպիկ սխալներ

Թայմաուտներ չկան «մինչև համառությունը» և կասկադային անկումներ։

Միասնական գլոբալ CB-ը ընտրական (էնդպոյնտի/մեթոդի) փոխարեն լրացուցիչ հրաժարումներ են։

Բաց անջատիչը, առանց fallback-ի, բացատրում է «դատարկ» էկրանները դեգրադացված UX-ի փոխարեն։

Retrai առանց ջիտերի տրամադրվում են համաժամանակյա հարցումների փոթորիկներ։

Երկար cool-down կարճ ձախողումների ժամանակ կամ շատ կարճ կայուն պայմաններում '«ֆլիպ-ֆլոպը»։

Bulkhead-ի բացակայությունը ընդհանուր փամփուշտների սպառումն է և «head-of-blocking» -ը։

15) Ռազմավարության արագ ընտրություն

Բարձր կարևորության ընթերցումները ՝ CB + cash stach + hedging (տնտեսապես)։

Ձայնագրություններ/վճարումներ ՝ խիստ թայմաուտներ, առնվազն գետանցիներ, idempotency keys, «կեղտոտ» fallback բացակայություն։

Արտաքին API: CB ագրեսիվ շեմերով, հարմարվողական cool-down, խիստ throttling։

Միկրովեռները, որոնք ունեն իմպուլսային բեռ 'bulkheads, concurrency, VIP գերակայություն։

Եզրակացություն

Circuit Breaker-ը և կառավարվող դեգրադացիան ճարտարապետության «ապահովագրություն» են, նրանք քաոտիկ մերժումներ են փոխանցում կանխատեսելի վարքագծին։ Պարզ թայմաուտները, որոնք սահմանափակված են ջիթերի, մեկուսացված շուլերի հետ, մտածված fallback-telemetria-ը դարձնում են կայուն կախվածության ձախողումներ և պահպանում SLO-ն նույնիսկ գագաթնակետին և արտակարգ իրավիճակներում։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։