Równoważenie obciążenia
1) Dlaczego i gdzie jest w architekturze
Balancer jest „turnstile” między klientem a flotą oparcia. Jego cele to:- dostępność (bez jednego punktu awarii), opóźnienie (p95 w dół), skala (pozioma), bezpieczeństwo (TLS/WAF), możliwość zarządzania zwolnieniem (kanaryjska/niebiesko-zielona).
- Edge/Global: Anycast, GSLB/GeoDNS, CDN/Edge-LB, DDoS.
- L4 (TCP/UDP): NLB, maglev, proxy bez zakończenia.
- L7 (HTTP/2, gRPC, WebSocket, QUIC): trasa/nagłówki/znaczki, pamięć podręczna/kompresja/przekładki.
- Data-tier: DB-брокса (PgBouncer/ProxySQL), Redis Cluster/Consistent Hash, Kafka partitioning.
2) Modele i algorytmy bilansujące
Round-Robin (RR): prosty mundur.
Najmniejsze połączenia (LC): Dobre dla długich połączeń (WS, gRPC).
Najmniejsze żądanie/Moc-of-Two (P2C): Porównanie dwóch losowych to dobra równowaga prędkości/jakości.
Ważony RR/LC: wagi dla węzłów kanaryjskich/gorących.
Spójne hashing (CH): sesja lepkość bez tabeli (koszyk, Redis).
Maglev/Flow-hash: szybka dystrybucja L3/L4 z oporem klapowania.
Świadomość opóźnienia: Wybór przez przesuwanie p50/p95.
EWMA: Uwzględnia historię opóźnień.
Zalecenie: domyślnie P2C (najmniejszy wniosek) na L7; w przypadku pamięci podręcznej/pamięci podręcznej - spójne hash; мла WS/gRPC - najmniejsze połączenia.
3) Zdrowie na wyższym poziomie: kontrole i „eksmisje”
Kontrole zdrowotne: TCP, HTTP 200/匹配 тела, status gRPC; przedziały/terminy/próg błędu.
Wyrzut zewnętrzny: automatyczne wyłączenie „hałaśliwych” instancji (sekwencyjny-5xx, szybkość powodzenia-wyrzut).
Powolny start i rozgrzewka: miękkie wejście nowych instancji (stopniowy wzrost masy ciała).
Odprowadzenie połączenia: po wyłączeniu/zresetowaniu - „doładowanie” aktywnych połączeń bez przerwy.
4) Sesje i lepkość (lepkość)
Lepkość plików cookie (L7): 'Set-Cookie: lb = <id>; Witryna internetowa; Bezpieczne '.
CH przez klucz: 'hash (اId' Id 'cartId)'.
IP-hash - tylko w sieciach zamkniętych (przerwy NAT).
Lepkość TTL + upadek eksmisji węzłowej.
Ważne: zminimalizować potrzebę lepkości → przechowywać stan poza instancją (Redis/DB/JWT).
5) Globalne bilansowanie (GTM/GSLB)
Anycast + health-probe: jeden IP, ruch do najbliższego PoP; automatyczna feilover.
GeoDNS/Latency-DNS: Geo/Latency Response.
Klastry regionalne: „dane rezydenta” pozostają w regionie (RODO); awaria międzyregionalna z replikacją.
Politycy: geo-bloki, „naklejka” przez konto/token.
6) Protokoły i funkcje
HTTP/2: multipleks, priorytety; potrzebuje kompetentnej puli połączeń na wyższy szczebel.
gRPC: długotrwałe strumienie → najmniejsze połączenia, agresywne kontrole zdrowotne.
WebSocket/SSE: lepkość na połączeniu, duże czasy bezczynności, TCP utrzymać przy życiu.
QUIC/HTTP/3: szybki start, odporność na straty; monitor MTU/patch-MTU.
TLS-termination/mTLS: zakończyć na edge/L7-LB; ustny mTLS/tożsamość (SPIFFE).
7) Kontrola przeciążenia
Limit stawki: na-IP, na-klucz, na-trasę; burst + sustain.
Adaptive Concurrency (Envoy) - dynamiczna granica jednoczesnych żądań.
Kolejka/Surge-bufor: ograniczony rozmiar kolejki z uczciwą odmową 503.
Hedging/równoległe wyścigi: powielanie powolnych zapytań (tylko idempotent).
Budżet Timeout: oddzielne połączenie/czytanie/zapisywanie.
Backpressure: '503 + Retry-After', jitter client exponential retreas.
Slow-loris protection: read/write timeouts, minimum speed.
8) Wydania i Zarządzanie Ruchem
Kanaryjskie (ważone): 1-5-10-25-50-100% poręcze (p95, 5xx, timeouts).
Niebiesko-zielony: przełącznik błyskawiczny, rollback - DNS/LB.
Cień/lustro: kopia żądań bez wpływu na odpowiedź; Maskowanie PII.
Nagłówek/Routing oświadczeń: 'X-Canary: 1' ила 'JWT. roszczeń. region/rola ".
9) Autoskalowanie i drenaż
HPA/ASG ма CPU + RPS + p95 + głębokość kolejki.
PreStop hak: Poczekaj na zakończenie połączeń.
Ciepły basen/instancja ponowne użycie: skrócenie zimno zaczyna.
Planowanie przepustowości: cel „wykorzystanie 60-70%” przy p95 jest normalny.
10) Obserwowalność i SLO
Metryki LB: RPS, p50/p95/p99, 4xx/5xx, otwarte połączenia, kolejka-len, wyrzuty, retries, hit-ratio cache.
Śledzenie: 'traceparent/x-request-id' poprzez LB → usługi → bazy danych.
Kłody: konstrukcyjne, maski PII/PAN, korelacja z górnym nurtem.
Trasa SLO: na przykład "opóźnienie p95 ≤ 300 ms", "dostępność ≥ 99. 9% ',' 5xx ≤ 0. 5%`.
Ostrzeżenia: przez odchylenia (szybkość spalania SLO, wzrost wyrzutu, wzrost 5xx/timeout).
11) Równoważenie danych i buforów
PostgreSQL/MySQL:- Read/Write split (ProxySQL/pgpool) + read-replicas; lepki-txn.
- Failover: synchroniczna replika dla RPO = 0 (droższa).
- Klaster Redis + slot hash; sesje - CH; timeouts/Powtarzalne błędy.
- Równowaga poprzez podział i grupy konsumentów; nie mylić z HTTP-LB.
- Magazynowanie obiektów (S3/MinIO): wielobranżowe niepowodzenie мереz GSLB/replikacja.
12) K8s i chmura LB
Usługa (ClusterIP/NodePort/LoadBalancer) - baza L4.
Ingress/Gateway API - L7 routing, wagi kanaryjne, TLS.
AWS: NLB (L4, duża przepustowość), ALB (L7, WAF, lepki, header-routing).
GCP: Global LB ( (S) Anycast), TCP/UDP proxy LB.
Azure: drzwi przednie (globalne), brama aplikacji (L7), balancer ładunkowy (L4).
13) Przykłady konfiguracji
13. 1 NGINX (L7, least_conn, lepki, kanarkowy)
nginx upstream api_pool {
least_conn;
server api-1:8080 max_fails=3 fail_timeout=10s;
server api-2:8080 max_fails=3 fail_timeout=10s;
sticky cookie lb_id expires=30m path=/ secure httponly;
}
map $http_x_canary $dst {
default api_pool;
1 canary_pool;
}
upstream canary_pool {
least_conn;
server api-canary:8080 weight=1;
}
server {
listen 443 ssl http2;
location /api/ {
proxy_read_timeout 5s;
proxy_connect_timeout 1s;
proxy_set_header X-Request-Id $request_id;
proxy_pass http://$dst;
}
}
13. 2 HAProxy (P2C, zdrowie, powolne uruchamianie, stół)
haproxy backend api balance leastconn option httpchk GET /health default-server inter 3s fall 3 rise 2 slowstart 10s server s1 10. 0. 0. 11:8080 check server s2 10. 0. 0. 12:8080 check stick-table type ip size 100k expire 30m http-request track-sc0 src rate limit per IP http-request deny deny_status 429 if { sc_http_req_rate(0) gt 50 }
13. 3 Wysłannik (P2C, outlier, retries, adaptive concurrency)
yaml load_assignment: {... }
lb_policy: LEAST_REQUEST least_request_lb_config: { choice_count: 2 }
outlier_detection:
consecutive_5xx: 5 interval: 5s base_ejection_time: 30s typed_extension_protocol_options:
envoy. extensions. filters. http. adaptive_concurrency. v3. AdaptiveConcurrency:
gradient_controller_config:
sample_aggregate_percentile: PERCENTILE_50 retry_policy:
retry_on: "5xx,reset,connect-failure"
num_retries: 2 per_try_timeout: 1s
13. 4 Kubernetes (Gateway API, ważony kanaryjski)
yaml apiVersion: gateway. networking. k8s. io/v1 kind: HTTPRoute spec:
rules:
- matches: [{ path: { type: PathPrefix, value: /api }}]
backendRefs:
- name: api-v1 weight: 90 port: 8080
- name: api-v2-canary weight: 10 port: 8080
14) Listy kontrolne
Przed uwolnieniem LB/trasy
- Algorytm wybrany (P2C/LC/CH) dla typu ruchu.
- Kontrole zdrowotne i progi wyrzutu są skonfigurowane.
- Powolne uruchamianie, rozgrzewanie, drenaż połączeń.
- TLS/mTLS, HSTS, szyfry bezpieczne; HTTP/2/3 w razie potrzeby.
- Sticky/CH tylko w razie potrzeby; TTL - fallback.
- Ograniczenie stawek/pęknięcie, terminy, ponowne badanie budżetu, współistnienie adaptacyjne.
- Kłody/trasy: "trace-id' jest wyrzucany; Maskowanie PII.
- SLO/alerts by p95/5xx/elections/queue-len.
- Wagi kanaryjskie + plan wsteczny; cień z dużymi zmianami.
Dla tras płatności/zgodności
- Idempotency-Key.
- Awaria między dostawcami usług płatniczych; kontrole tej samej metody.
- Kody błędów są znormalizowane; ETA/powody na klienta.
Dla DB/Caches
- RW-split/repliki; timeouts, network retry.
- CH/slot-hash dla Redis; ochrona przed „gorącymi klawiszami”.
- Opóźnienie w monitorowaniu i replikacji.
15) Wskaźniki jakości (minimum)
Latency p50/p95/p99 drogą/metodą.
Szybkość błędów 4xx/5xx, wyczerpanie czasu/przepełnienie.
Otwarte/aktywne połączenia, głębokość kolejki, liczba powtórnych prób.
Wyrzuty zewnętrzne i przyczyny.
Lepki współczynnik trafienia/współczynnik trafienia w pamięci podręcznej.
GSLB: dystrybucja regionalna, faylovers, dostępność PoP.
16) Anty-wzory
Jeden niezabezpieczony monolityczny LB.
Lepkie sesje „za wszystko”, zamiast wyjmować stan.
Globalne nieskończone kolejki (ukryj problem, rośnie p99).
Retrai bez jitter/budget to „burza” wniosków.
Zaufanie 'X-Forwarded-For' without listę zaufanych pełnomocników.
Brak drenażu podczas wyczerpywania → przerwy WS/gRPC.
Brak uwzględnienia długotrwałych połączeń podczas autoskali.
17) Specyfika iGaming
Szczyty i turnieje: micro-cache na katalogach/aukcjach (1-5 s), automatyczna skala z kolei.
Gry/strumienie na żywo: LC dla długich połączeń, priorytet najbliższego PoP.
Płatności: geo/currency/amount/provider routing; surowe czasy i idempotencja.
Odpowiedzialna zabawa i zgodność: priorytet, aby pominąć wnioski o limity/zamki nawet z degradacją (fail-open/close by policy).
18) Proces wdrażania (4 sprinty)
1. Mapa ruchu: protokoły, ładunki p95/p99, trasy krytyczne.
2. Konfiguracja LB: algorytmy, health/outlier, TLS, limity/timeouts, obserwowalność.
3. GSLB/Edge: Anycast/GeoDNS, wsparcie PoP, regionalna polityka danych.
4. Strategia wydania: kanaryjski/cień, wpisy SLO, autoskale + drenaż, analiza powypadkowa.
Końcowy arkusz oszustwa
Wybierz algorytm dla rodzaju ruchu (P2C/LC/CH) i czasu trwania połączenia.
Zachowaj „zdrowe” w górnej części strumienia: kontrole zdrowotne + odpływ + powolny start + drenaż.
Zarządzaj obciążeniem szczytowym: limit szybkości, współistnienie adaptacyjne, kolejki z awarią.
Użyj GSLB/Anycast dla globalnej dostępności i zgodności w zależności od regionu.
Obserwowalność i SLO są obowiązkowe; wydania - poprzez kanaryjski/cień z planem rollback.
W miarę możliwości usuń sesję z instancji i lepkości z LB.