Shaping және трафикті бағыттау
1) Мұның бәрі не үшін
Shaping және маршруттау - басқарылатын қолжетімділік және болжамды жасырындылық базасы:- Тұрақтылық: «шулы көршілерге» арналарды толтыруға жол бермейміз.
- Әділеттілік: тенанттар/сыныптар арасындағы басымдықтар мен квоталар.
- Тиімділігі: сұрау салуды тез/арзан өңделетін жерге жібереміз.
- Өзгерістерді бақылау: қатерсіз канареялық/weighted-релиздер.
- Үнемдеу: egress/egress-құнды және CDN-кэш-хитрейтті оңтайландыру.
2) Базалық ұғымдар
2. 1 Traffic shaping vs policing
Shaping - трафикті буферлеу және пакеттермен мақсатты жылдамдықпен жіберу арқылы тегістейді («жарылыстарды» тегістеу).
Policing - буферлеусіз асып кетуді (дроп/таңбалау) «жазалайды». Қатты, бірақ арзан.
2. 2 Сыныптар, кезектер және пәндер
Басымдығы бар кезектер (PRIO), WFQ/DRR (әділ бөлу), HTB (иерархиялық квоталар), CoDel/RED (буферблоатпен күрес), ECN (дропсыз жүктелім туралы сигнал).
L7-де - RPS/коннектілер/байттар лимиттері және басым пулдар түріндегі «кезектер».
2. 3 Лимиттеу алгоритмдері
Token Bucket (n токендері rate r қосылады; сұрау k токендерін «жұмсайды»).
Leaky Bucket (белгіленген ағын; тегістеуге жақсы).
Жаһандық/жергілікті лимиттер: жергілікті - жылдам, жаһандық - әділ (Redis/etcd/пер-тенант).
3) L3/L4 QoS
3. 1 DSCP/ToS және қызмет көрсету сыныптары
Пакеттерді трафик түрі бойынша таңбалаңыз (интерактив, бэкенд-RPC, фондық тапсырмалар).
Дата орталықтарында - DSCP саясатын желілік фабрикамен/бұлтпен келісіңіз.
3. 2 Linux tc: HTB + fq_codel (нобай)
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 шыңдардағы дроптарды азайтады; RED/CoDel буферблоатты шектейді.
BBR (Cubic орнына) көбінесе p99 жасырындылығын азайтады, әсіресе WAN/ауыр кезектердің үстінен.
4) L7-маршруттау (HTTP/gRPC/WS)
4. 1 Роутинг критерийлері
Жолдар/әдістер ('/api/v1/', 'POST'), тақырыптар (клиенттің нұсқасы, фича-жалаулар, канареялық хедер), куки (A/B, sticky), JWT-таңбалар (tenant/role), гео/ASN, уақытша терезелер, жүктеме (outlier detection).
Хаттама: HTTP/2 (мультиплексиялау), HTTP/3/QUIC (пакеттердің жоғалуына төзімділік), gRPC (bi-di streams), WebSocket (ұзақ өмір сүретін коннектілер).
4. 2 Өлшенген сплит/канареялық релиздер
Роут 'v1: 95%', 'v2: 5%', «жасыл» метриктер кезінде автоматты түрде жоғарылату.
Ажыратулар: қателер/жасырындылық/бизнес-инварианттар.
Envoy (нобай)
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-сессиялар және consistent hashing
Cookie/IP/JWT идентификаторы бойынша Session affinity.
Кэш-кластерлер, шардаланған сервистер, rate limit гейтвейлері үшін Consistent hashing.
Nginx
nginx upstream api {
hash $cookie_user_id consistent;
server 10. 0. 0. 1;
server 10. 0. 0. 2;
}
4. 4 Гео- және latency-aware роутинг
Шетіндегі GeoIP/ASN (CDN/edge) → ең жақын РОР/өңір.
Latency-aware: кезеңдік health-сынамалар + өлшеу RTT → трафик «ең жылдам» кластерге.
4. 5 Outlier detection / circuit breaking
«Жаман» жағдайларды жою: max-ejection-percent, негізгі қателер/жасырындылық.
Circuit breaker: кезектегі/RPS/коннектілеріне арналған лимиттер.
5) Шлюздер/мэш-стек деңгейінде traffic shaping
5. 1 Rate limiting
Жергілікті (per-pod): арзан, бірақ әділ емес өзара реплика.
Жаһандық (Redis/etcd): әділдік per-tenant/API-кілті.
Саясаттар: per-route, per-method, per-tenant, burst.
Envoy RLS (нобай)
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 және басымдықтар
Басым пулдар: «интерактив»> «жүйелік»> «фондық».
DRR/WFQ L7 баламалары: квота/салмақ per-клиент/тенант.
5. 3 Шамадан тыс жүктеу және қорғау
Load-shed: бюджеттерден асып кеткен кезде бас тарту/тозу.
Adaptive concurrency: p50/p95/queue-len.
Server-side backpressure: 429/503 + Retry-After.
6) eBPF және CNI-деңгей
6. 1 Cilium/eBPF
Өзектегі сүзгілеу/бағыттау: контекст-свитчтерден аз, жұқа L3-L7 саясаты.
Тұрақты тарату үшін Maglev hashing.
per-pod QoS (TC/XDP hooks) үшін eBPF-бағдарламалар.
6. 2 Calico/NetworkPolicies
L3/L4 кіру саясаты, негізгі басымдық сыныптары, Kubernetes QoS (Guaranteed/Burstable/BestEffort) интеграциясы.
7) Edge/CDN және API-шлюздер
CDN: кэш-кілттер (қалыпқа келтіру query/headers), stale-while-revalidate, origin (rate limit/бот-сүзгілер).
API-шлюздер: аутентификация, квоталар/тарифтік жоспарлар (per-consumer), SLA-шектеулер, гео-роутинг, API нұсқасы.
WAF: Ядроның CPU шығындамау үшін шетінде сүзу.
8) Асинхронды шиналар/стриминг
Kafka/NATS/Pulsar: продюсерлерге/консюмерлерге квоталар, batch-өлшемдер лимиті, lag арқылы backpressure.
Оқиғаларды бағыттау: біркелкілік үшін «жыпылықтау» партияларының партиялану кілттері (tenant/idempotency-key).
Exactly-once ≈ «бір рет тиімді»: транзакциялық продюсерлер + демпотенттік синкалар.
9) Таймауттар, ретрациялар, backoff
Уақыт аралығы: клиент <прокси <сервис (керісінше емес).
Ретраилер: шектелген сан джиттерленген экспоненциалды backoff, бірақ дауылсыз.
Ретрациялар кезінде теңсіздік міндетті; басқаша - SAGA/өтемақы.
Hedged/parallel requests (мұқият): p99 жақсартады, жалпы трафикті ұлғайтады.
10) Бақылау және SLO
10. 1 Өлшемдері
rate_limit_hits, requests_queued, shed_requests_total, latency_ms{p50,p95,p99}, error_ratio, retry_attempts, outlier_ejections, queue_time_ms.
10. 2 Трейсинг
Correlation-ID лақтырыңыз; ұйықтауды себептердің түрімен белгілеңіз: 'retry' shed 'throttle' queue '.
Кіші жүйелерге әсерін түсіну үшін/hedges ретрайлері.
10. 3 Логи/есептер
Дроптар/шеддинг/лимиттер бойынша жиынтық, маршруттар бойынша жылу карталары.
Әділ пертенант үшін жеке панельдер (fairness index).
10. 4 SLO-мысалдар
"p99 ≤ 300 мс 95-перцентиль жүктеме кезінде; shed ≤ 0. 1%; error_ratio ≤ 0. 5%».
«Қайта тиеу кезінде интерактивті сыныпқа кемінде 95% квота кепілдендірілген».
11) Конфигурация мысалдары
11. 1 Nginx: rate limit + burst + канареялық сплит
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: пер-тенант квота (label арқылы резерв)
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 хинта
Сыни табандар үшін Guaranteed (requests = limits).
PodPriority & Preemption: сыни тұғырлар тапшылық кезінде фондық тұғырларды ығыстырады.
Topology Spread Constraints: тұрақтылық үшін аймақтар бойынша бөлу.
12) Қарсы үлгілер
Жаһандық көзбен шолу лимиті → маңызды клиенттердің жалған 429/таймауттары.
Джиттер/идемпотенттілігі жоқ ретраилер → дауыл.
Таймауттардың шатасуы (клиенттік> серверлік) → тұрып қалу және «қос жұмыс».
Жалпы кэштер/prod және эксперименттер үшін кезектер → деректердің ластануы.
«Әрқашан sticky» дұрыс мағынасыз → біркелкі емес жүктеме/ыстық түйіндер.
Ажыратылған outlier detection → «шіріген» инстанция апта өлшемдерін бұзады.
13) Енгізу чек-парағы
- Трафикті саралаңыз: кластар/тенанттар/бағыттар.
- Мақсатты бюджеттерді белгілеңіз: RPS/коннектілер/байттар және p95/p99.
- rate limit (жергілікті + жаһандық), circuit breaker, outlier detection қосыңыз.
- Канареялық сплит + автооткатты метриктер бойынша теңшеңіз.
- Экспоненциалды backoff + джиттер бар таймауттарды/ретраларды жазыңыз.
- ECN/BBR (мүмкін болған жерде) және egress үшін fq_codel/HTB қосыңыз.
- «Көлеңке» және эксперименттер үшін жеке пулдар/кэштер/кезектер.
- Дашбордтар: лимиттердің, кезектердің, жасырындылықтың, fairness өлшемдері.
- SLO және runbook: шеддинг/қайтару/қосу өлшемдері.
14) FAQ
Q: Қандай таңдау: shaping немесе policing?
A: Пайдаланушы жолдары үшін - shaping (тегістеу). «Фон «/» bulk »сервис-кластары үшін - сыни ағындарды қорғау үшін policing.
Q: Ретрай-дауылды қалай болдырмау керек?
A: Джиттерленген backoff, әрекеттер лимиті, демпотенттік, серверлік кеңестер 'Retry-After', жаһандық квоталар.
Q: Sticky немесе hashing?
A: Sticky - сессия/кэш қажет болғанда пайдаланушыға жергілікті; hashing - шардингтің біркелкілігі мен тұрақтылығы қажет болғанда.
Q: HTTP/3/QUIC не береді?
A: HOL-бұғаттаусыз TCP, жоғалтуға жақсы төзімділік, тезірек қалпына келтіру - p99/p999 қалдықтарын айтарлықтай азайтады.
15) Қорытынды
Тиімді shaping және L7-маршруттау - бұл бақылаумен және SLO-мен бекітілген басымдықтар мен квоталар, әділ бөлу, қауіпсіз лимиттер және ақылды роутинг сияқты саясаттардың келісілген жинағы. Сипатталған тәжірибелерді (төменгі деңгейлерде HTB/fq_codel/ECN және Envoy/Istio/Nginx/eBPF үстіңгі деңгейлерде) орындау арқылы сіз болжамды жасырын қалдықтарды, шамадан тыс жүктемеге төзімділікті және бақыланатын, қауіпсіз релиздерді аласыз.