Shaping va trafikni yoʻnaltirish
1) Nima uchun bularning hammasi
Shaping va marshrut - boshqariladigan foydalanish va oldindan aytib bo’ladigan latentlik bazasi:- Barqarorlik: «shovqinli qo’shnilarga» kanallarni to’ldirishga yo’l qo’ymaymiz.
- Adolat: tengantlar/sinflar o’rtasidagi ustuvorlik va kvotalar.
- Samaradorlik: so’rovni tezroq/arzonroq qayta ishlanadigan joyga yuboramiz.
- O’zgarishlarni nazorat qilish: xavfsiz kanar/weighted-relizlar.
- Tejash: egress/egress-qiymatlarni va CDN-kesh-hiyla-nayrangni optimallashtirish.
2) Bazaviy tushunchalar
2. 1 Traffic shaping vs policing
Shaping - trafikni maqsadli tezlikda buferlash va paketlar bilan jo’natish orqali tekislaydi («portlashlarni» tekislash).
Policing - buferlashmasdan ortiqcha (drop/markirovkalash) «jazolaydi». Qattiqroq, lekin arzonroq.
2. 2. Sinflar, navbatlar va fanlar
Ustuvor navbatlar (PRIO), WFQ/DRR (adolatli taqsimot), HTB (iyerarxik kvotalar), CoDel/RED (buferbloratga qarshi kurash), ECN (dropsiz ortish haqida signal).
L7 da - RPS/konnektlar/bayt limitlari va ustuvor pullar ko’rinishidagi «navbatlar».
2. 3 Limitlash algoritmlari
Token Bucket (n tokenlari rate r qo’shiladi; so’rov k tokenlarini «sarflaydi»).
Leaky Bucket (qat’iy chiqib ketish; tekislash uchun yaxshi).
Global/lokal limitlar: mahalliy - tez, global - adolatli (Redis/etcd/per-tenant).
3) QoS L3/L4
3. 1 DSCP/ToS va xizmat ko’rsatish sinflari
Paketlarni trafikning turiga qarab belgilang (interaktiv, orqa fon-RPC, orqa fon vazifalari).
Datacentrlarda DSCP siyosatini tarmoq fabrikasi/bulut bilan muvofiqlashtiring.
3. 2 Linux tc: HTB + fq_codel (eskiz)
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 cho’qqilardagi droplarni kamaytiradi; RED/CoDel buferblowatni cheklaydi.
BBR (Cubic o’rniga) ko’pincha p99 latentligini kamaytiradi, ayniqsa WAN/og’ir navbatlar ustidan.
4) L7-marshrutlash (HTTP/gRPC/WS)
4. 1 Routing mezonlari
Yo’llar/usullar (’/api/v1/’,’POST’), sarlavhalar (mijozning versiyasi, ficha-bayroqlar, kanareykali xeder), kukilar (A/B, sticky), JWT-tamg’alar (tenant/role), geo/ASN, vaqtinchalik derazalar, yuk (outlier detection).
Protokol: HTTP/2 (multiplekslash), HTTP/3/QUIC (paketlarni yo’qotishga chidamlilik), gRPC (bi-di streams), WebSocket (uzoq umr ko’radigan konnektlar).
4. 2 Tortilgan split/kanar relizlari
Rout’v1: 95%’,’v2: 5%’, «yashil» metriklarda avtomatik ravishda oshirish.
Kesish: xatolar/yashirin/biznes invariantlari.
Envoy (eskiz)
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 Sticky-sessiyalar va consistent hashing
Cookie/IP/JWT identifikatori boʻyicha Session affinity.
Consistent hashing uchun kesh-klasterlar, shardlangan servislar, geytveylar rate limit.
Nginx
nginx upstream api {
hash $cookie_user_id consistent;
server 10. 0. 0. 1;
server 10. 0. 0. 2;
}
4. 4 Geo- va latency-aware routing
GeoIP/ASN chekka (CDN/edge) → eng yaqin ROR/mintaqa.
Latency-aware: davriy health-testlar + o’lchovlar RTT → «eng tezkor» klasterga trafik.
4. 5 Outlier detection / circuit breaking
«Yomon» holatlar: max-ejection-percent, asosiy xatolar/latentlik.
Circuit breaker: navbatlarda/RPS/konnektlariga limitlar.
5) Shlyuzlar/mash-stek darajasida traffic shaping
5. 1 Rate limiting
Lokal (per-pod): arzon, ammo adolatli bo’lmagan replika.
Global (Redis/etcd): adolat per-tenant/API-kalit.
Siyosatchilar: per-route, per-method, per-tenant, burst.
Envoy RLS (eskiz)
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 Fairness va ustuvorliklar
Ustuvor pullar: «interaktiv»> «tizimli»> «fon».
DRR/WFQ ekvivalentlari L7 ga: kvotalar/vaznlar per-mijoz/tenant.
5. 3 Qayta yuklash va himoya qilish
Load-shed: budjetdan oshib ketganda rad etish/degradatsiya.
Adaptive concurrency: p50/p95/queue-len dan limitlar dinamikasi.
Server-side backpressure: 429/503 + Retry-After.
6) eBPF va CNI darajasi
6. 1 Cilium/eBPF
Yadroda filtrlash/yo’naltirish: kamroq kontekst-svitchlar, nozik L3-L7 siyosati.
Barqaror taqsimlash uchun Maglev hashing.
per-pod QoS (TC/XDP hooks) uchun eBPF dasturlari.
6. 2 Calico/NetworkPolicies
L3/L4 kirish siyosati, asosiy ustuvor sinflar, Kubernetes QoS (Guaranteed/Burstable/BestEffort) bilan integratsiya.
7) Edge/CDN va API-shlyuzlar
CDN: kesh-kalitlar (normalizatsiya query/headers), stale-while-revalidate, origin (rate limit/bot-filtrlar).
API-shlyuzlar: autentifikatsiya, kvotalar/tarif rejalari (per-consumer), SLA-cheklovlar, geo-routing, API versiyasi.
WAF: Yadro CPUsini sarflamaslik uchun chetga filtrlash.
8) Asinxron shinalar/striming
Kafka/NATS/Pulsar: prodyuserlar/konsumerlar uchun kvotalar, batch-o’lchamlari limiti, lag orqali backpressure.
Hodisalarni yo’naltirish: bir tekislik uchun «miltillovchi» partiyalar (tenant/idempotency-key) kalitlari.
Exactly-once ≈ «bir marta samarali»: tranzaksion prodyuserlar + idempotent sinki.
9) Taymautlar, retryalar, backoff
Vaqt oraligʻi: mijoz <proksi <servis (aksincha emas).
Retraylar: jitterlashtirilgan eksponensial backoff bilan cheklangan son, ammo bo’ronsiz.
Retrajlarda idempotentlik majburiy; aks holda - SAGA/kompensatsiya.
Hedged/parallel requests (ehtiyotkorlik bilan): p99 ni yaxshilaydi, umumiy trafikni oshiradi.
10) Kuzatuv va SLO
10. 1 Metrika
rate_limit_hits, requests_queued, shed_requests_total, latency_ms{p50,p95,p99}, error_ratio, retry_attempts, outlier_ejections, queue_time_ms.
10. 2 Treysing
Correlation-ID’ni tashlang; uyquni sabablar turi bilan belgilang:’retry’shed’throttle’queue’.
Kichik tizimlarga ta’sirini tushunish uchun retraj/hedges uchun linkalar.
10. 3 Logi/hisobotlar
Droplar/shedding/limitlar bo’yicha ma’lumotlar, yo’nalishlar bo’yicha issiqlik xaritalari.
Adolat uchun alohida panellar (fairness index).
10. 4 SLO-misollar
"95-percentile yuklamada p99 ≤ 300 ms; shed ≤ 0. 1%; error_ratio ≤ 0. 5%».
«Qayta yuklashda interaktiv sinfga kvotaning kamida 95 foizi kafolatlangan».
11) Konfiguratsiya namunalari
11. 1 Nginx: rate limit + burst + kanar spliti
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: circuit breaker + outlier detection
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: per-tenant kvota (label orqali zaxira)
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 Kubernetes QoS xintalar
Tanqidiy podalar uchun Guaranteed (requests = limits).
PodPriority & Preemption: tanqidiy pod’lar tanqislikda fonni almashtiradi.
Topology Spread Constraints: barqarorlik uchun zonalar bo’yicha taqsimlash.
12) Anti-patternlar
Global ko’z uchun limit → muhim mijozlarda soxta 429/taymautlar.
Jitter/idempotentlik → bo’ronsiz retraylar.
Taymautlarning chalkashligi (mijoz> server) → muzlash va «ikki marta ishlash».
Prod va eksperimentlar uchun umumiy kesh/navbatlar → maʼlumotlar ifloslanishi.
«Doimo sticky» sog’lom fikrsiz → notekis yuk/issiq tugunlar.
O’chirilgan outlier detection → «chirigan» holat haftaning metrikasini buzadi.
13) Joriy etish chek-varaqasi
- Trafikni segmentlash: sinflar/tenantlar/yo’nalishlar.
- Maqsadli byudjetlarni belgilang: RPS/konnektlar/baytlar va p95/p99.
- rate limit (lokal + global), circuit breaker, outlier detection.
- Kanar splitini + avtootkatini metriklarga moslang.
- Eksponensial backoff + jitter bilan taymaut/retrajlarni yozing.
- ECN/BBR (iloji boricha) va egress uchun fq_codel/HTB kiriting.
- «Soyalar» va tajribalar uchun alohida pullar/keshlar/navbatlar.
- Dashbordlar: limitlar, navbatlar, latentlik, fairness metrikasi.
- SLO va runbook: shedding/qaytarish/qoʻshish mezonlari.
14) FAQ
Q: Nima tanlash kerak: shaping yoki policing?
A: Foydalanuvchi yo’llari uchun - shaping (to’siqsiz tekislash). «Fon «/» bulk »servis-sinflari uchun - tanqidiy oqimlarni himoya qilish uchun policing.
Q: Retraj bo’ronlardan qanday qochish mumkin?
A: Jitterlashtirilgan backoff, urinishlar limiti, idempotentlik, «Retry-After» server maslahatlari, global kvotalar.
Q: Sticky yoki hashing?
A: Sticky - agar foydalanuvchiga sessiya/kesh kerak bo’lsa, lokal; hashing - chardingning bir tekisligi va barqarorligi kerak bo’lganda.
Q: HTTP/3/QUIC nima beradi?
A: HOL-blokirovkasiz TCP, yo’qotishlarga chidamlilik, tezroq tiklanish - p99/p999 dumlarini sezilarli darajada kamaytiradi.
15) Yakunlar
Samarali shaping va L7-marshrutlash - bu muvofiqlashtirilgan siyosatlar toʻplami: ustuvorlik va kvotalar, adolatli taqsimot, xavfsiz limitlar va kuzatuv va SLO bilan mustahkamlangan aqlli routing. Tavsiflangan amaliyotlar (quyi darajalarda HTB/fq_codel/ECN va yuqori darajalarda Envoy/Istio/Nginx/eBPF) yordamida siz oldindan aytib bo’lmaydigan latentlik, ortiqcha yuklashga chidamlilik va nazorat qilinadigan, xavfsiz relizlarga ega bo’lasiz.