Circuit Breaker және деградация
Circuit Breaker (CB) - бұл апстрим-сервистерді және пайдаланушыны оқшаулау және қорғау үшін нашарлаған тәуелділікке шақыруларды тоқтататын қорғау паттерны. Деградация (graceful degradation) - ресурстар жетіспеген немесе істен шыққан кезде функционалдылықты саналы түрде жеңілдету (мысалы, кэштелген/толық емес деректерді қайтару, «қымбат» фичтерді ажырату).
Басты мақсат: SLO және пайдаланушы тәжірибесін каскадты құлау орнына бақыланатын істен шығулар есебінен сақтау.
1) Қашан қолдану
Тәуелділік тұрақсыз: өсу p95/p99, таймауттар, қате жауаптар.
Қатаң лимиттері/пенальтилері бар сыртқы API.
Ретрайлер дауылды күшейтетін «ауыр» бэкендтер (іздеу, ұсыныстар, есептер).
Пулдардың (қосылыстардың, тректердің) таусылу қаупі бар жоғары жүктелген учаскелер.
2) CB жай-күйі және ауысулар
Классикалық үштік:1. Closed - трафик жүріп жатыр, қате/жасырындылық өлшемдері есептеледі.
2. Open - шақырулар жылдам ауытқиды (fail-fast) және/немесе fallback-ке аударылады.
3. Half-Open - «сынақ» сұрауларының шектеулі саны ажыратқышты жабу-жабу мүмкіндігін анықтайды.
Ашу триггерлері
Терезеден тыс қателер/таймауттар шегі (мысалы, соңғы N 50% ≥).
Жасырындылық шегі (мысалы, p95> нысаналы мән).
Аралас саясаттар (қателер ∧ таймауттың артуы).
Ұстап қалу уақыты (cool-down)
Тіркелген (мысалы, 10-60 сек) немесе бейімделген (қайта іске қосылғанда экспоненциалды ұлғаю).
3) Таймауттар, ретраилер және джиттер
Таймауттар әрқашан SLO апстримінен қысқа және тізбегі бойынша келісілген (deadline propagation).
Ретраялар тек идемпотенттік операцияларға арналған; Көп жағдайда 1-2 талпыныс жеткілікті.
Backoff + джиттер (full jitter) қайталаудың синхронды толқындарын болдырмайды.
Hedging (қосалқы сұраулар) - үнемді және тек өте сыни оқулар үшін.
4) Bulkhead-оқшаулау және «сақтандырғыштар»
Қосылымдар/воркерлер/кезектер пулдарын домендер және трафик түрлері (VIP, фондық тапсырмалар, көпшілік API) бойынша бөліңіз.
«Қымбат» операциялар үшін Caps concurrency.
Admission control: кезек толған кезде орындалғанға дейін жеңіл істен шығу.
5) Fallback және деградация сценарийлері
Параметрлер
Кэш/Стейл жауаптар: 'stale-while-revalidate', кэш L2/L3 деректерді қайтару.
Read-only :/команда жазу блогы, қауіпсіз оқуға рұқсат беру.
Суррогаттық жауаптар: толық емес деректер (мысалы, ұсыныстарсыз/аватарсыз).
Функционалды өшіру: сыни емес виджеттерді/фичтерді уақытша жасыру.
Feature flags: шығарылмай жүріс-тұрысты жылдам өзгерту.
Ереже
Fallback деректер бойынша детерминирленген, жылдам және қауіпсіз болуы тиіс.
Деградацияланған жолды логтарда/трестерде/метриктерде анық белгілеңіз.
6) Басымдылық және трафик-шейпинг
VIP/ақылы жоспарлар - тапшылық кезінде үлкен басымдық/квота.
Rate limits және throttling тозған тәуелділікке жүктемені азайтады.
Shed load: тұрақтандыруға дейін сапаның жұмсақ төмендеуі (мысалы, аз нәтижелер, қысқартылған бейнелер).
7) Бақылау және сигналинг
CB өлшемдері
Күйі (closed/open/half-open) және күйінің ұзақтығы.
Себептері бойынша істен шығу үлесі: CB-open, timeout, 5xx, retry-exhausted.
p95/p99 ажыратқыштың «дейін» және «кейін» жасырындылығы.
Fallback арқылы сұраулардың саны/үлесі.
Трейсинг
Спан аңдатпалары: 'circuit = opened', 'fallback = cache', 'admission = denied'.
Лимиттермен (429/RateLimit-), кезектермен және қосылыс оқтарымен корреляция.
Логи/аудит
Ашу/жабу себебі, табалдырықтар, тәуелділік сәйкестендіргіштері.
8) Келісімшарттар мен хаттама
HTTP
Fail-fast: '503 Service Unavailable' c 'Retry-After' (немесе лимиттер кезінде '429').
Partial content/стейл: '200 '/' 206' дегеннің метадеректері бар (мысалы, 'X-Degraded: true').
Кэш саясаты: 'Cache-Control: stale-if-error, stale-while-revalidate'.
gRPC
'UNAVAILABLE', 'DEADLINE _ EXCEEDED', клиент/прокси полистері бойынша ретрайлардың семантикасы.
Сұрау контекстіндегі Deadline/timeout; мерзім тізбегі бойынша төмен таралады.
'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% (бейініне байланысты).
Латенттілік шегі: мақсатты SLO ≤ p95 (мысалы, 300-500 мс); асып кетуі CB үшін «қате» ретінде ескеріледі.
Адаптивті cool-down: 10s → 30s → 60s қайта іске қосылғанда.
11) Тестілеу және хаос-практика
Chaos: жасырындылық/қателіктерге байланысты инъекция, DNS сынуы, drop пакеттері.
Game days: жауынгерлік тәрізді ортада ажыратқышты «ашу», fallback тексеру.
Canary: 1-5% трафик үшін алдымен СВ/деградация саясатын қосыңыз.
SLO-бюджет: error-budget аяқталғанша эксперимент жасауға рұқсат етіңіз.
12) Мульти-тенантпен интеграция
CB күйін per-dependency per-tenant (шулы жалға алушылар үшін) немесе жүктеме профиліне байланысты жаһандық сақтауға болады.
Fallback деректері мен кэштерін 'tenant _ id' бойынша саралаңыз.
Басымдықтар/квоталар - жоспарларға сәйкес (VIP Starter мінез-құлқынан зардап шекпеуі тиіс).
13) Азық-түлік алдындағы чек-парағы
- Таймауттар мен мерзімдер толассыз және келісілген.
- Ретраялар шектелген, тек демпотенттік операциялар үшін, backoff + джиттермен.
- CB шекті мәндері жүктеме тестінің деректерімен негізделген.
- Fallback жолдары бар, жылдам және қауіпсіз; кэш саясаты анықталған.
- Bulkhead-оқшаулау: бөлек пулдар/кезектер/лимиттер.
- Метриктер/трестер/логтар CB тозуы мен жай-күйін белгілейді.
- Жауаптар келісімшарттарының құжаттамасы (HTTP/gRPC) тақырыптар/кодтар мысалдары.
- Хаос-сценарийлер мен game-days тұрақты түрде өткізіледі; runbook бар.
14) Типтік қателер
Таймауттар жоқ → «тірекке дейін» ретрайлері және каскадты құлдыраулар.
Сайлаудың орнына бірыңғай жаһандық СВ (эндпойнт/әдіс бойынша) - артық бас тартулар.
fallback жоқ ашық ажыратқыш → деградацияланған UX орнына «бос» экрандар.
Джиттерсіз ретрайлер → синхронды сұраулар дауылы.
Ұзақ cool-down қысқа мерзімді ақауларда немесе тым қысқа тұрақты күйде - «флип-флоп» күйде.
Bulkhead жоқтығы - жалпы пулдардың және «head-of-line blocking» сарқылуы.
15) Стратегияны жылдам таңдау
Жоғары маңызды оқу: CB + кэш стейл-жауап + hedging (үнемді).
Жазбалар/төлемдер: қатаң таймауттар, минималды ретрайлер, idempotency keys, «лас» fallback болмауы.
Сыртқы API: CB агрессивті табалдырықтармен, бейімделген cool-down, қатаң throttling.
Пульсациялық жүктемесі бар микросервистер: bulkheads, caps concurrency, VIP басымдылығы.
Қорытынды
Circuit Breaker және басқарылатын деградация - бұл архитектураның «сақтандыруы»: олар хаотикалық бас тартуларды болжамды мінез-құлыққа айналдырады. Нақты таймауттар, джиттермен шектелген ретрациялар, оқшауланған пулдар, ойластырылған fallback жолдары және телеметрия жүйені тәуелділіктің бұзылуына төзімді етеді және SLO-ны тіпті ең жоғары және апатты кезеңдерде де ұстап тұрады.