Yük balansı və failover
Yük balansı və failover
1) Məqsəd və şərtlər
Balans performansı və sabitlik üçün nümunələr/zonalar/bölgələr arasında trafik paylayır.
Failover - uğursuzluq zamanı idarə olunan keçid.
RTO/RPO: hədəf bərpa vaxtı və icazə verilən məlumat itkisi.
SLO: hədəf əlçatanlıq/gecikmə səviyyəsi; avtomatik faylover və geri dönüş üçün «qapı» rolunu oynayır.
2) Balans layları
2. 1 L4 (TCP/UDP)
Artıları: performans, sadəlik, TLS passthrough. Mənfi cəhətləri: marşrut/cookie anlayışı yoxdur.
Nümunələr: NLB/GLB, HAProxy/Envoy L4, IPVS.
2. 2 L7 (HTTP/gRPC)
Artıları: yol marşrutu/hadedam, kanarya çəkisi, sticky. Mənfi cəhətləri: CPU/gizli daha bahalı.
Nümunələr: NGINX/HAProxy/Envoy/Cloud ALB/API Gateway.
2. 3 Qlobal səviyyə
DNS/GSLB: health-checks + geo/balanslı cavab.
Anycast/BGP: dünyada bir IP, ən yaxın elan nöqtəsi.
CDN/Edge: perimetrdə cache/feylover.
3) Paylama alqoritmləri
Round-robin/weighted - əsas.
Least connections/latency - «ağır» sorğular üçün.
Consistent hashing - mərkəzi sessiya olmadan açar yapışdırma (user/tenant).
Hash-based locality - caches və stateful xidmətləri üçün.
4) Sessiyalar və yapışqanlıq (sticky)
Cookie-sticky: L7 LB nüsxəyə qayıtmaq üçün cookies qurur.
Src-IP sticky: L4-də, NAT/CGNAT-da daha pis.
Consistent hashing: üfüqi caches/chat üçün daha yaxşıdır.
Aim: mümkünsə stateless xidmətini edin, əks halda - failover-i asanlaşdırmaq üçün vəziyyəti (Redis/DB seansları) çıxarın.
5) Etibarlılıq: health-checks və rotasiya aradan qaldırılması
Active checks: HTTP 200/dərin iş yolları (məsələn, asılılıqla '/healthz/withdraw ').
Passive (outlier detection): 5xx/taymaut-da backendlərin zərb edilməsi.
Warm-up: yeni instansiyaların rəvan daxil edilməsi (slow-start).
Graceful drain: hovuzdan çıxarmaq → sorğuların tamamlanmasını gözləmək.
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 (fraqment):
yaml outlier_detection:
consecutive_5xx: 5 interval: 5s base_ejection_time: 30s max_ejection_percent: 50
6) Uğursuzluqların idarə edilməsi: timeout/retry/circuit-breaking
Timeouts: müştərinin vaxtından daha qısa; per-route təyin edin.
Retries: 1-2 jitter və idempotent ilə; POST-da idempotentlik açarları olmadan retrajların qadağan edilməsi.
Circuit breaker: eyni vaxtda sorğuların/səhvlərin məhdudlaşdırılması; «yarı açıq» bərpa.
Budgets: self-DDOS təşkil etməmək üçün retras limitləri/burst birləşməsi.
7) Kubernetes-patternlər
ClusterIP/NodePort/LoadBalancer/Ingress - əsas primitivlər.
Readiness/Liveness: trafik yalnız hazır pod.
PodDisruptionBudget: N replikalarının eyni anda düşməsinin qarşısını almaq.
HPA/VPA: CPU/RED metrik ölçmək, LB ilə ligament.
ServiceTopology/Topology Aware Hints: ərazi üzrə lokalizasiya.
Service type = LoadBalancer (zonal): minimum - hər AZ-da 2 replika.
yaml readinessProbe:
httpGet: { path: /healthz/dependencies, port: 8080 }
periodSeconds: 5 failureThreshold: 2
8) Cross-zona və cross-regional trafik
Multi-AZ (region daxilində): bərabər paylayın (zonal LB), saxlama - sinxron replikalar.
Multi-region:- Active-Active: hər iki bölgə trafikə xidmət edir; daha mürəkkəbdir - məlumatların replikasiyası, koordinasiya və coğrafiya marşrutu lazımdır.
- Active-Passive: əsas region xidmət, ehtiyat - «isti/isti/soyuq». Daha asan, daha sürətli keçid, lakin RPO yuxarıda.
- Geo-DNS (ən yaxın region).
- Weighted DNS (kanaryalar/paylanması).
- Latency-based (RTT-ölçmə).
- Failover = sağlamlıq/əlçatanlıq siqnalları ilə (bir neçə vantage nöqtəsindən probes).
9) Data və failover
Cash/State: mümkünsə - regional lokal; Active-Active üçün - CRDT/konsistent hash.
BD:- Sinxron replikasiya = aşağı RPO, daha yüksək gecikmə.
- Asinxron = aşağı gecikmə, lakin RPO> 0.
- Növbələr: güzgü/multiklaster topiklər; hadisələrin təkrarlanması.
- Əməliyyatların idempotentliyini və replay-mexanikanı layihələndirin.
10) Perimetri: DNS/Anycast/BGP/CDN
DNS: Qısa TTL (30-60s) + sağlamlıq yoxlamaları şəbəkəniz xaricindədir.
Anycast: bir IP ilə bir neçə ROPs - ən yaxın marşrut səviyyəsində trafik, feylover qəbul edir.
CDN/Edge: qorunması üçün cache və «şlyuz», statik/media origin düşdükdə xidmət; origin-shield + пер-POP health.
11) Konfiqurasiya nümunələri
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) Avtomatik failover: siqnallar və geytalar
Tech-SLI: 5xx-rate, p95/p99, saturation, hendsheyks TLS, TCP resets.
Biznes SLI: depozitlərin/ödənişlərin müvəffəqiyyəti, PSP-də heç bir ödəniş səhvləri yoxdur.
Geytalar: həddi aşdıqda - zonanı/instansiyanı söndürün, sabit hovuzun çəkisini qaldırın, GSLB-ni dəyişdirin.
Runbook: addım-addım keçid və geri qaytarma (rollback) təlimatı.
13) Testlər və yoxlamalar (chaos & game-days)
Chaos testləri: AZ/regionların kəsilməsi, DB/cache deqradasiyası, packet-loss simulyasiyası.
Game-day: on-call komandalarının iştirakı ilə təlim feyloveri.
Diaqnostika: perimetrdən arxalara qədər izləmə, reliz-annotasiyaların və metriklərin müqayisəsi.
14) Təhlükəsizlik və uyğunluq
mTLS arasında LB, WAF/Rate limits perimetri.
Arıza/seqmentasiya zonaları: blast-radius izolyasiyası.
Siyasətlər: tək uğursuzluq nöqtələrinin (SPOF) qadağan edilməsi, «minimum N replika/AZ» tələbləri.
15) Anti-nümunələr
Bütün promo trafik (SPOF) üçün bir LB/bir zona.
Dərin yoxlama yoxdur '/healthz '(yaşıl - lakin BD/növbə mövcud deyil).
İdempotentlik olmadan retrai → cüt əməliyyatlar/ödənişlər.
Kütləvi NAT → disbalance Sticky per IP.
DNS Feylover yüksək TTL (keçid əvvəl saat).
Deplot zamanı graceful drain yoxdur - sorğuların qırılması.
16) Giriş çek siyahısı (0-45 gün)
0-10 gün
Instansiyaları 2 AZ-a ≥; readiness/liveness, health-checks.
L7-timeouts/retries konfiqurasiya (1 cəhd), outlier detection.
graceful drain və slow-start aktivləşdirin.
11-25 gün
GSLB (geo/weighted) və ya Anycast perimetri daxil edin.
Kanarya çəkisi/marşrut siyasəti; cookie/consistent hash vasitəsilə sticky.
Avto-feylover üçün SLO geytləri (p95/5xx + biznes SLI).
26-45 gün
Regional DR: Tərcümə testi ilə Active-Active və ya Active-Passive.
AZ/regionların bağlanması ilə Chaos-günləri, RTO/RPO hesabatları.
Avtomatlaşdırılmış runbook 'və (pause/shift/rollback skriptləri).
17) Yetkinlik metrikası
Multi-AZ ≥ 99% kritik yolları əhatə edir.
DNS/GSLB/Anycast ictimai end-point üçün tətbiq olunur.
Bir AZ düşdükdə MTTR <5 dəqiqə (p95).
Hədəf ≤ kritik məlumatlar üçün RPO (məsələn, 30 saniyə ≤).
Rüblük game-days və uğurlu planlı feylover.
18) Nəticə
Etibarlı balans və failover - L7-nin yerli siyasəti (timeouts/retries/CB, health-checks), düzgün yapışdırma və hash, xaç-zona sabitliyi və perimetrdə - GSLB/DNS/Anycast. SLO geytaları, idempotentlik, graceful drain və müntəzəm chaos testləri əlavə edin - və hər hansı bir qovşaq, zona və ya bölgənin itkisi proqnozlaşdırıla bilən RTO/RPO ilə idarə olunan bir hadisə olacaq.