Жүктеме теңгерімі және failover
Жүктеме теңгерімі және failover
1) Мақсаттар мен терминдер
Теңгерім трафикті өнімділік пен тұрақтылық үшін даналар/аймақтар/аймақтар арасында бөледі.
Failover - істен шыққан кезде басқарылатын ауыстырып қосу.
RTO/RPO: мақсатты қалпына келтіру уақыты және деректерді жоғалту.
SLO: қол жетімділіктің/жасырындылықтың нысаналы деңгейі; автоматты фейловер мен кері қайтару үшін «қақпа» ретінде қызмет етеді.
2) Теңгеру қабаттары
2. 1 L4 (TCP/UDP)
Артықшылықтары: өнімділік, қарапайымдылық, TLS passthrough. Кемшіліктері: маршрутты/кукилерді түсінбеу.
Мысалдар: NLB/GLB, HAProxy/Envoy L4, IPVS.
2. 2 L7 (HTTP/gRPC)
Артықшылықтары: жол/хедералар бойынша маршруттау, канареялық салмақтар, sticky. Кемшіліктері: CPU/жасырындылығы бойынша қымбат.
Мысалдар: NGINX/HAProxy/Envoy/Cloud ALB/API Gateway.
2. 3 Жаһандық деңгей
DNS/GSLB: health-checks + гео/салмақталған жауап.
Anycast/BGP: әлем бойынша бір IP, анонстың жақын нүктесі.
CDN/Edge: кэш/фейловер периметрінде.
3) Тарату алгоритмдері
Round-robin/weighted - базалық.
Least connections/latency - «ауыр» сұраулар үшін.
Consistent hashing - орталық сессиясыз кілт бойынша жабысқақтық (user/tenant).
Hash-based locality - кэштер мен stateful-сервистер үшін.
4) Сессиялар және желімділік (sticky)
Cookie-sticky: L7 LB данасына қайтару үшін cookie орнатады.
Src-IP sticky: L4, NAT/CGNAT кезінде нашар.
Consistent hashing: көлденең кэштер/сөйлесулер үшін жақсы.
Aim: мүмкіндігінше stateless қызметін жасаңыз, әйтпесе failover қызметін жеңілдету үшін жай-күйді (Redis/DB-дегі сессияларды) шығарыңыз.
5) Сенімділік: health-checks және айналымнан шығару
Active checks: HTTP 200/бизнес жолдарының терең сынамалары (мысалы, тәуелділікпен '/healthz/withdraw ').
Passive (outlier detection): 5хх/таймаут кезінде бэкендтердің эжекциясы.
Warm-up: жаңа инстанцияларды біртіндеп қосу (slow-start).
Graceful drain: сұраулардың аяқталуын күту → пулынан жою.
nginx upstream api {
zone api 64k;
least_conn;
server app-1:8080 max_fails=2 fail_timeout=10s;
server app-2:8080 max_fails=2 fail_timeout=10s;
keepalive 512;
}
proxy_next_upstream error timeout http_502 http_503 http_504;
proxy_next_upstream_tries 2;
Envoy outlier detection (үзік):
yaml outlier_detection:
consecutive_5xx: 5 interval: 5s base_ejection_time: 30s max_ejection_percent: 50
6) Ақауларды басқару: timeout/retry/circuit-breaking
Timeouts: клиенттің таймауттан қысқа; per-route орнату.
Retries: 1-2 джиттері және іспеттілігі бар; іспеттілік кілтсіз POST-та ретрациялауға тыйым салу.
Circuit breaker: бір уақыттағы сұрауларды/қателерді шектеу; «жартылай ашық» қалпына келтіру.
Budgets: self-DDOS орнатпау үшін ретрайлардың лимиттері/бурсттардың қосылуы.
7) Kubernetes-паттерндер
ClusterIP/NodePort/LoadBalancer/Ingress - негізгі примитивтер.
Readiness/Liveness: трафик тек дайын под.
PodDisruptionBudget: N репликаның бір уақытта құлауына жол бермеу.
HPA/VPA: CPU/RED өлшемдері бойынша масштабтау, LB байланысы.
ServiceTopology/Topology Aware Hints: аймақ бойынша орналасуы.
Service type = LoadBalancer (zonal): минимум - әр AZ-да 2 репликадан.
yaml readinessProbe:
httpGet: { path: /healthz/dependencies, port: 8080 }
periodSeconds: 5 failureThreshold: 2
8) Кросс-аймақтық және кросс-аймақтық трафик
Multi-AZ (өңір ішінде): біркелкі таратыңыз (zonal LB), сақтау - синхронды репликалар.
Multi-region:- Active-Active: екі өңір де трафикке қызмет көрсетеді; күрделі - деректерді репликалау, география бойынша келісу және бағыттау қажет.
- Active-Passive: негізгі өңір қызмет көрсетеді, резерв - «ыстық/жылы/суық». Оңай, жылдам ауыстыру, бірақ RPO жоғары.
- Geo-DNS (жақын аймақ).
- Weighted DNS (канарейка/қайта бөлу).
- Latency-based (RTT-өлшеу).
- Failover = денсаулық/қол жетімділік сигналдары бойынша (бірнеше vantage-нүктеден probes).
9) Деректер және failover
Кэш/стейт: мүмкіндігінше - аймақтық; Active-Active үшін - CRDT/консистентті хэштер.
БД:- Синхронды репликация = төмен RPO, жоғары жасырындылық.
- Асинхронды = төмен латенттілік, бірақ RPO> 0.
- Кезектер: зеркалау/мультикластерлік топиктер; оқиғаларды қайталау.
- Операциялардың теңсіздігін және replay-механиканы жобалаңыз.
10) Периметр: DNS/Anycast/BGP/CDN
DNS: қысқа TTL (30-60s) + желіден тыс health-checks.
Anycast: бір IP-мен бірнеше РОР 'лар - жақын трафикті қабылдайды, бағыттау деңгейінде фейловер.
CDN/Edge: қорғау үшін кэш және «шлюз», статика/медиа origin құлаған кезде қызмет көрсетіледі; origin-shield + пер-POP health.
11) Конфигурация үлгілері
HAProxy L7:haproxy defaults timeout connect 2s timeout client 15s timeout server 15s retries 2 option redispatch
backend api balance leastconn option httpchk GET /healthz/dependencies http-check expect status 200 server app1 app-1:8080 check inter 5s fall 2 rise 2 slowstart 3000 server app2 app-2:8080 check inter 5s fall 2 rise 2 slowstart 3000
NGINX sticky по cookie:
nginx upstream api {
hash $cookie_session_id consistent;
server app-1:8080;
server app-2:8080;
}
Envoy retry/timeout (route):
yaml route:
timeout: 2s retry_policy:
retry_on: 5xx,connect-failure,reset num_retries: 1 per_try_timeout: 500ms
12) Автоматты failover: сигналдар мен гейттер
Тех-SLI: 5xx-rate, p95/p99, saturation, TLS хэндшейндері, TCP resets.
Бизнес-SLI: депозиттер/төлемдер табысты, PSP-де төлем қателері жоқ.
Гейттер: шектен асқан кезде - аймақты/инстанцияны өшіру, тұрақты пулдың салмағын көтеру, GSLB ауыстыру.
Runbook: қадамдық қайта қосу және қайтару нұсқаулығы (rollback).
13) Тесттер мен инспекциялар (chaos & game-days)
Chaos-тесттер: AZ/аймақтарды ажырату, БД/кэштің тозуы, packet-loss симуляциясы.
Game-day: on-call командаларының қатысуымен жаттығу фейловері.
Диагностика: периметрден бэкендке дейін трассалау, релиз-аннотация мен метриканы салыстыру.
14) Қауіпсіздік және комплаенс
mTLS LB, WAF/Rate limits арасында периметрде.
Істен шығу/сегменттеу аймақтары: blast-radius оқшаулау.
Саясат: жалғыз бас тарту нүктелеріне (SPOF) тыйым салу, «минималды N реплика/AZ» бойынша талаптар.
15) Қарсы үлгілер
Барлық азық-түлік трафигі (SPOF) үшін бір LB/бір аймақ.
Терең тексерудің болмауы '/healthz '(жасыл - бірақ ДБ/кезек қол жетімді емес).
Теңсіздіксіз ретрай → операциялар/төлемдер дублі.
Жаппай NAT → дисбаланс кезінде Sticky per IP.
Жоғары TTL бар DNS-фейловер (ауыстырып қосуға дейінгі сағаттар).
Сұрау үзілген кезде graceful drain жоқ.
16) Енгізу чек-парағы (0-45 күн)
0-10 күн
Инстанцияларды 2 AZ ≥ бойынша тарату; readiness/liveness, health-checks қосыңыз.
L7-timeouts/retries баптау (1 әрекет), outlier detection.
graceful drain және slow-start қосылсын.
11-25 күн
Периметр үшін GSLB (geo/weighted) немесе Anycast енгізіңіз.
Канареялық салмақтар/бағыттар саясаты; sticky cookie/consistent hash арқылы.
Авто-фейловерге арналған SLO-гейттер (p95/5xx + бизнес-SLI).
26-45 күн
Аймақтық DR: Active-Active немесе аударма тестімен Active-Passive.
Chaos-AZ/өңірлер ажыратылған күндер, RTO/RPO есептері.
Автоматтандырылған runbook 'және (pause/shift/rollback скрипттері).
17) Жетілу метрикасы
Multi-AZ ≥ 99% сындарлы жолдарды жабу.
DNS/GSLB/Anycast көпшілік эндпоинттер үшін енгізілген.
MTTR бір AZ <5 минут (p95) құлау кезінде.
Мақсатты ≤ сыни деректері үшін RPO (мысалы, 30 секундтан ≤).
Тоқсан сайынғы game-days және сәтті жоспарлы фейловер.
18) Қорытынды
Сенімді теңгерім және failover - бұл қабатты сәулет: жергілікті L7-саясат (timeouts/retries/CB, health-checks), дұрыс желімділік және хэштеу, кросс-аймақтық тұрақтылық, ал периметрде - GSLB/DNS/Anycast. SLO-гейттерді, идемпотенттілікті, graceful drain және тұрақты chaos-тесттерді қосыңыз - және түйіннің, аймақтың немесе тіпті өңірдің кез келген жоғалуы болжамды RTO/RPO-мен басқарылатын оқиғаға айналады.