Modelarea și rutarea traficului
1) De ce toate acestea
Modelarea și rutarea - o bază de disponibilitate gestionată și latență previzibilă:- Stabilitate: nu dau „vecinii zgomotoase” pentru a înscrie canale.
- Corectitudine: Priorități și cote între chiriași/clase.
- Eficiență: trimitem cererea unde este procesată mai rapid/mai ieftin.
- Controlul schimbării: eliberări canare/ponderate fără riscuri.
- Economii: optimizarea costurilor de ieşire/ieşire şi CDN-cache-hitrat.
2) Concepte de bază
2. 1 Modelarea traficului vs politie
Modelarea - aliniază traficul prin tamponarea și trimiterea pachetelor la rata țintă (netezirea „exploziilor”).
Poliția - „pedepsește” excesele (picătură/marcaj) fără tamponare. Mai dur, dar mai ieftin.
2. 2 Clase, cozi și discipline
Cozi prioritare (PRIO), WFQ/DRR (alocare corectă), HTB (cote ierarhice), CoDel/RED (control bloc tampon), ECN (semnal de congestie fără cădere).
Pe L7 - „cozi” sub formă de limite/conexiuni/octeți SPR și bazine prioritare.
2. 3 Algoritmi de limitare
Token Bucket (n jetoane adăugate cu rata r; cerere „petrece” k jetoane).
Leaky Bucket (ieșire fixă; bun pentru netezire).
Limite globale/locale: locale - rapid, global - echitabil (Redis/etcd/per-chiriaș).
3) QoS pe L3/L4
3. 1 DSCP/ToS și clase de servicii
Etichete de tip trafic (interactiv, backend RPC, fundal de locuri de muncă).
În centrele de date, negociați politica DSCP cu țesătura de rețea/cloud.
3. 2 Linux tc: HTB + fq_codel (miniatură)
bash
Clearing tc qdisc del dev eth0 root 2 >/dev/null true
Корневая HTB с 1Gbit tc qdisc add dev eth0 root handle 1: htb default 30 tc class add dev eth0 parent 1: classid 1:1 htb rate 1gbit
Класс latency-critical 200Mbit tc class add dev eth0 parent 1:1 classid 1:10 htb rate 200mbit ceil 1gbit prio 0 tc qdisc add dev eth0 parent 1:10 handle 10: fq_codel
Класс background 100Mbit tc class add dev eth0 parent 1:1 classid 1:30 htb rate 100mbit ceil 1gbit prio 2 tc qdisc add dev eth0 parent 1:30 handle 30: fq_codel
3. 3 ECN/RED/BBR
ECN reduce picăturile la vârfuri; RED/CoDel restricționează tamponarea.
BBR (în loc de Cubic) reduce adesea latența p99, în special pe partea de sus a cozilor WAN/grele.
4) Rutare L7 (HTTP/gRPC/WS)
4. 1 Criterii de rutare
Trasee/metode ('/api/v1/', 'POST'), antete (versiune client, steaguri feature, antet canar), cookie-uri (A/B, lipicios), timbre JWT (chiriaș/rol), geo/ASN, ferestre de timp, sarcină (detectare exterior).
Protocol: HTTP/2 (multiplexare), HTTP/3/QUIC (rezistență la pierderea pachetelor), gRPC (fluxuri bi-di), WebSocket (conexiuni cu durată lungă de viață).
4. 2 Eliberări split/canare ponderate
Rădăcină „v1: 95%”, „v2: 5%”, creștere automată cu metrici „verzi”.
Cut-off: erori/latență/invarianți de afaceri.
Trimis (schiță)
yaml route:
weighted_clusters:
clusters:
- name: svc-v1 weight: 95
- name: svc-v2 weight: 5
Istio
yaml apiVersion: networking. istio. io/v1beta1 kind: VirtualService spec:
hosts: ["svc"]
http:
- route:
- destination: { host: svc, subset: v1, weight: 95 }
- destination: { host: svc, subset: v2, weight: 5 }
4. 3 Sesiuni lipicioase și hashing consistent
Afinitatea sesiunii prin identificator cookie/IP/JWT.
Hashing consistent pentru clustere de cache, servicii shardy, gateway-uri limită de rată.
Nginx
nginx upstream api {
hash $cookie_user_id consistent;
server 10. 0. 0. 1;
server 10. 0. 0. 2;
}
4. 4 Rutare geografică şi latenţă
GeoIP/ASN la margine (CDN/edge) → cel mai apropiat POP/regiune.
Conștient de latență: probe periodice de sănătate + măsurători RTT → trafic către cel mai „rapid” grup.
4. 5 Detectarea/întreruperea circuitului exterior
Knocking out instanțe „rele”: max-ejection-procent, erori de bază/latență.
Întrerupător de circuit: limite privind conexiunile/RPS/în cozi.
5) Modelarea traficului la nivelul stivei gateway/mash
5. 1 Limitarea ratei
Local (per-pod): ieftin, dar nu corect inter-replica.
Global (Redis/etcd): valabilitate per chiriaș/cheie API.
Politicieni: per-route, per-metodă, per-chiriaș, explozie.
Trimisul RLS (schiță)
yaml typed_per_filter_config:
envoy. filters. http. ratelimit:
"@type": type. googleapis. com/envoy. extensions. filters. http. ratelimit. v3. RateLimit domain: "api"
rate_limit_service:
grpc_service: { envoy_grpc: { cluster_name: rate_limit_cluster } }
5. 2 Corectitudine și priorități
Piscinele prioritare sunt interactive> sistem> fundal.
Echivalente DRR/WFQ pe L7: cote/greutăți per client/chiriaș.
5. 3 Suprasarcină și protecție
Load-shed: eșec/degradare atunci când bugetele sunt depășite.
Concurență adaptivă: dinamica limitelor de la p50/p95/coadă-len.
Backpressure pe partea serverului: 429/503 + Retry-After.
6) nivelul eBPF și CNI
6. 1 Cilium/eBPF
Filtrare/rutare în kernel: mai puține switch-uri de context, politici de L3-L7 subțiri.
Maglev hashing pentru distribuție stabilă.
eBPF programe pentru per-pod QoS (cârlige TC/XDP).
6. 2 Calico/NetworkPolicies
politici de acces L3/L4, clase prioritare de bază, integrarea cu Kubernetes QoS (Garantat/Burstable/BestEfort).
7) Gateway-uri Edge/CDN și API
CDN: chei cache (normalizare interogare/anteturi), vechi-în timp ce-revalidat, protecția originii (limita ratei/filtre bot).
Gateway-uri API: autentificare, contingente/planuri tarifare (per consumator), restricții SLA, geo-rutare, versiune API.
WAF: filtrarea la margine pentru a nu irosi procesorul nucleului.
8) Autobuze asincrone/streaming
Kafka/NATS/Pulsar: cote de producător/consumator, limita dimensiunii lotului, backpressure prin lag.
Rutarea evenimentelor: chiriaș/cheie de idempotență, partiții pâlpâitoare pentru uniformitate.
Exact o dată ≈ „eficientă o dată”: producători tranzacționali + vânătăi idempotente.
9) Timeouts, retrageri, backoff
End-to-end timeout: client <proxy <service (nu invers).
Retrai: Număr limitat cu backoff exponențial jitterizat, dar fără furtuni.
Idempotența este obligatorie în retrageri; în caz contrar - SAGA/compensație.
Hedged/cereri paralele (prudență): îmbunătățește p99, crește traficul general.
10) Observabilitate și SLO
10. 1 Măsurători
, , , , , .
10. 2 Vectorizare
ID-ul de corelare a scanării; mark spans with cause type: 'retry' shed 'throttle' coadă '.
Link-uri pentru retroys/garduri vii pentru a înțelege impactul asupra subsistemelor.
10. 3 Jurnale/Rapoarte
Rezumatul picăturilor/vărsării/limitelor, hărțile termice pe rută.
Panouri separate pentru indexul de corectitudine.
10. 4 exemple SLO
"p99 ≤ 300 ms la sarcină percentilă 95; vărsat ≤ 0. 1%; error_ratio ≤ 0. 5%».
„Cel puțin 95% din cotă este garantată clasei interactive atunci când este supraîncărcată”.
11) Exemple de configurare
11. 1 Nginx: limita ratei + spargere + împărțire canar
nginx map $http_x_canary $canary { default 0; 1 1; }
limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
upstream api_v1 { server 10. 0. 0. 1; }
upstream api_v2 { server 10. 0. 0. 2; }
server {
location /api/ {
limit_req zone=perip burst=20 nodelay;
if ($canary) { proxy_pass http://api_v2; break; }
proxy_next_upstream error timeout http_502 http_503 http_504;
proxy_pass http://api_v1;
}
}
11. 2 Envoy: întrerupător de circuit + detectare outlier
yaml circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 1000 max_pending_requests: 500 max_requests: 2000 outlier_detection:
consecutive_5xx: 5 interval: 10s max_ejection_percent: 50 base_ejection_time: 30s
11. 3 Istio: chiriaș cotă (rezervă prin etichetă)
yaml apiVersion: security. istio. io/v1 kind: AuthorizationPolicy spec:
selector: { matchLabels: { app: api } }
rules:
- when:
- key: request. headers[x-tenant]
values: ["gold"]
Next - RateLimitPolicy in the limit provider with a large quota pool for "gold."
11. 4 sugestii Kubernetes QoS
Garantat pentru fundurile critice (cereri = limite).
PodPriority & Preemption: Fundurile critice vor disloca blocajele de fundal.
Constrângeri de răspândire a topologiei: zonare pentru sustenabilitate.
12) Anti-modele
Limita globală a ochilor → falsă 429/timeout pentru clienții importanți.
Retrai fără jitter/idempotency → furtună.
Confuzia de timeout (client> server) → îngheață și „dublă muncă”.
Cache-uri comune/cozi pentru prod și experimente → contaminarea datelor.
„Întotdeauna lipicios” fără bun simț → sarcină inegală/noduri fierbinți.
Detectarea exterioară a persoanelor cu handicap → instanță putredă strică valorile săptămânii.
13) Lista de verificare a implementării
- Traficul segmentului: clase/chiriași/rute.
- Setați bugetele țintă la SPR/conexiuni/octeți și p95/p99.
- Activați limita de rată (local + global), întrerupător de circuit, detectare outlier.
- Configurați split canar + auto rollback pe metrici.
- Înregistrați timeouts/retroys cu backoff exponențial + jitter.
- Activați ECN/BBR (dacă este cazul) și fq_codel/HTB pentru ieșire.
- Piscine individuale/cache/cozi pentru umbre și experimente.
- Tablouri de bord: valori ale limitelor, cozi, latență, corectitudine.
- SLO și runbook: shedding/rollback/enable criterii.
14) ÎNTREBĂRI FRECVENTE
Î: Ce să alegeți: modelarea sau poliția?
R: Pentru căi personalizate - modelarea (anti-aliasing fără picături). Pentru clasele de serviciu „fundal „/” vrac „- poliție pentru a proteja fluxurile critice.
Î: Cum evitați furtunile de retragere?
R: Backoff-ul jitterizat, limita încercărilor, idempotența, serverul solicită „Retry-After”, cote globale.
Î: Lipicios sau hashing?
R: Sticky - atunci când este necesară o sesiune/memoria cache este locală pentru utilizator; hashing - atunci când aveți nevoie de uniformitate și stabilitate de sharding.
Î: Ce dă HTTP/3/QUIC?
R: Fără încuietori TCP HOL, toleranță mai bună la pierderi, recuperare mai rapidă - reduce semnificativ cozile p99/p999.
15) Totaluri
Modelarea eficientă și rutarea L7 reprezintă un set coerent de politici: priorități și cote, distribuție echitabilă, limite sigure și rutare inteligentă, susținută de observabilitate și SLO. Urmând practicile descrise (HTB/fq_codel/ECN la nivelurile inferioare și Envoy/Istio/Nginx/eBPF în partea superioară), veți obține cozi de latență previzibile, rezistență la supraîncărcare și eliberări controlate, sigure.