Shaping և միկրոօրգանիզացիա
1) Ինչու՞ է այս ամենը
Shaping-ը և միկրոօրգանիզացիան կառավարման հասանելիության և կանխատեսելի լատենտության հիմքն են
Տե՛ ս ՝ մենք չենք տալիս «աղմկոտ հարևաններին» ջրանցքներ։
Արդարություն 'գերակայություններ և քվոտաներ տենանտների/դասարանների միջև։
Արդյունավետությունն այն է, որ մենք դիմում ենք այնտեղ, որտեղ այն զարգանում է ավելի արագ/ավելի էժան։
Փոփոխությունների վերահսկումը 'կանարյան/weighted ֆորումը առանց ռիսկի։
Խնայողությունները 'egress/egress-stoimosts և CDN-kash-hitraite-ի օպտիմիզացումը։
2) Հիմնական հասկացությունները
2. 1 Traffic shaping vs policing
Shaping-ը հավասարեցնում է շարժիչները, անջատելով և ուղարկելով փաթեթներ տեխնոլոգիական արագությամբ («պայթյունների» հարթեցումը)։
Policing-ը ավելցուկի «կարաիտ» է (dom/պիտակավորում) առանց բուֆերիզացիայի։ Ավելի կոշտ, բայց ավելի էժան։
2. 2 Դասարաններ, գծեր և կարգապահություններ
Առաջնահերթություն (PRIO), WFQ/MSR (արդար բաշխում), HTB (հիերարխիկ քվոտաներ), Codel/RED (կռվել քրոնբլոատի հետ), ECN (ազդանշան փոխպատվաստման մասին)։
L7-ի վրա «հերթերը» RPS/connects/bit և գերակա փամփուշտների տեսքով։
2. 3 Սահմանման ալգորիթմներ
Token Bucket (n token ավելացվում է rate r; հարցումը «ծախսում է» k token)։
Leaky Bucket (ֆիքսված արտահոսք; լավ է աչքերի համար)։
Գլոբալ/տեղական լիմիթներ 'տեղական' արագ, գլոբալ 'արդար (Redis/etcd/108-տենանտ)։
3) QoS-ը L3/L4-ում
3. 1 DSCP/WindowS և ծառայության դասարաններ
Նշեք փաթեթները կոդավորման տեսակի վրա (ինտերակտիվ, backend-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-cleima (tenae/role), geo/ASN, ժամանակավոր պատուհաններ, wwwww.ider deter detrone)։
Արձանագրություն ՝ HTTP/2 (բազմաբնույթ), HTTP/3/QUIC (դիմադրությունը պարտքի կորստի համար), gRPC (bi-di streams), Madio Socket (երկար)։
4. 2 Կշռված սպլիտ/կանարեկային խառնուրդներ
Rout '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
Session affinity cookie/IP/JWT-2019։
Consistent hashing-ը քեշի կլաստերների, շարդանի ծառայությունների, gattweev rate limit-ի համար։
Nginx
nginx upstream api {
hash $cookie_user_id consistent;
server 10. 0. 0. 1;
server 10. 0. 0. 2;
}
4. 4 Geo- և latency-aultrowting
GeoIP/ASN տարածքում (CDN/edge) գտնվում է ամենամոտ ROR/տարածաշրջանը։
Latency-a.ru: պարբերական health-փորձարկումներ + RTT չափումը կատարվում է «ամենաարագ» կլաստերի մեջ։
4. 5 Outlier detection / circuit breaking
«Վատ» instans 'max-ejam-percent, հիմնական սխալներ/լատենտություն։
Circuit breaker: Connects/RPS/հերթերում։
5) Traffic shaping-ը դարպասի/mash-ապակու մակարդակում։
5. 1 Rate limiting
Տեղական (per-pod) 'էժան, բայց ոչ արդար ռեդիկ։
Գլոբալ (Redis/etcd) 'per-tenae/API բանալին։
Քաղաքական գործիչները ՝ per-rome, per-method, per-tenae, burst։
Envoy RSA (ուրվագիծ)
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 և առաջնահերթություններ
Գերակայական շուլերը ՝ «ինտերակտիվ»> «entertainment»> «ֆոնային»։
SDR/WFQ համարժեքները L7: քվոտաներ/քաշը per-հաճախորդ/տենանտ։
5. 3 Ծանրաբեռնվածություն և պաշտպանություն
Load-shed: հրաժարումը/քայքայումը, երբ ավելանում է։
Adaptive concurrency: Limits դինամիկան p50/p95/queue-len-ից։
Server-side backpressure: 429/503 + Retry-After.
6) eBPF և CNI մակարդակը
6. 1 Cilium/eBPF
Ֆիլտրացում/միկրոօրգանիզացիա միջուկում 'ավելի քիչ ենթատեքստ-սվիտչի, բարակ L3-L7 քաղաքականություններ։
Maglev hashing-ը կայուն բաշխման համար։
EBPF ծրագրերը per-pod QoS-ի համար (TC/XDP hooks)։
6. 2 Calico/NetworkPolicies
L3/L4 հասանելիության քաղաքականությունը, առաջնահերթության հիմնական դասարանները, Kubernetes QoS (Guaranteed/Burstable/BestEffect) հետ ինտեգրումը։
7) Edge/CDN և API դարպասը
CDN 'քեշի բանալիներ (query/headers), stale-while-revalidate, origin պաշտպանություն (rate limit/bot-ֆիլտրեր)։
API դռները 'վավերացում, քվոտաներ/ստացիոնար պլաններ (per-consumer), SLA սահմանափակումներ, geo-routing, API տարբերակը։
WAF 'ֆիլտրում է եզրին, որպեսզի չծախսեք CPU միջուկը։
8) Ասինխրոն անվադողեր/ստրիմինգ
Kafka/NATS/Pulsar: քվոտաներ արտադրողների/վահանակների, batch չափսերի սահմանափակում, backpressure lag-ի միջոցով։
Իրադարձությունների երթուղայնացումը 'կուսակցության բանալիները (tenault/idempoty-key), հավասարության համար «չափող» կուսակցությունը։
Exactly-once-ը «արդյունավետ մեկ անգամ» է 'գործարքային արտադրողները + idempotent սինգլներ։
9) Թայմաուտներ, ռեթրա, backoff
Թայմաուտները միջով 'հաճախորդը <108 <ծառայություն (հակառակը)։
Retrai 'սահմանափակված թիվ ջիթթերիզացված էքսպոնենցիալ backoff-ի հետ, բայց առանց փոթորիկների։
Idempotenty-ը պարտադիր է ռետրերի ժամանակ։ հակառակ դեպքում 'SAGA/փոխհատուցում։
Hedged/parallel reques.ru (զգույշ) 'բարելավում է 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 Թրեյսինգ
Անցեք Eurelation-ID; քնում եք պատճառի տեսակը '«retry' shed 'throttle' queue»։
Links/hedges-ի համար, որպեսզի հասկանան ազդեցությունը ենթահամակարգերի վրա։
10. 3 Լոգներ/հաշվետվություններ
Drops/Sheddinga/limitas, ջերմային քարտեզներ երթուղիներով։
Առանձին վահանակներ արդարության տենանտ (fairness index) համար։
10. 4 SLO օրինակներ
"p99-300 ms 95-պերցենտիլում բեռի։ shed ≤ 0. 1%; error_ratio ≤ 0. 5%».
«Քվոտայի առնվազն 95 տոկոսը երաշխավորված է ինտերակտիվ դասին ծանրաբեռնվածության ժամանակ»։
11) Միգրացիայի օրինակներ
11. 1 Nginx: rate limit + burst + canareced clepite
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: 71-ստենանտ քվոտա (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 hinta
Guaranted-ը կրիտիկական ենթատեսակների համար (requesium = limits)։
PodPriority & Systemption: Քննադատական բարձրանալը կհանձնվի ֆոնային դեֆորմացիայի ժամանակ։
Topology Spread Constrainment-ը կայունության գոտիների բաժանումն է։
12) Anti-patterna
Գլոբալ սահմանը «աչքերի վրա» պարունակում է կեղծ 429/թայմաուտներ կարևոր հաճախորդների մոտ։
Retrai առանց ջիթերի/idempotenty-ի։
Թայմաուտների խառնաշփոթը (հաճախորդի> սերվերային) կախված և «կրկնակի աշխատանք»։
Ընդհանուր քեշները/հերթերը հաճախորդների և փորձերի համար բացատրում են տվյալների աղտոտումը։
«Միշտ sticky» -ը առանց ողջամտության անհավասարակշիռ տերմին է/տաք։
Անջատված www.ier det.ru-ը «փտած» instans-ը փչացնում է շաբաթվա մետրը։
13) Ներդրման չեկի ցուցակ
- Սեգմենտը. Դասարաններ/տենանտներ/երթուղիներ։
- Թույլ տվեք բյուջեներ ՝ RPS/կոննեկտներ/բայթ և p95/p99։
- Միացրեք rate limit (տեղական + գլոբալ), circuit breaker, corier detae։
- Պարեք կանարեկային սպիրտ + ինքնաբերաբար։
- Վերանայեք թայմաուտները/ռետաները էքսպոնենցիալ backoff + jitter-ով։
- Միացրեք ECN/BBR (որտեղ հնարավոր է) և fq _ codel/HTB egress համար։
- Առանձին փամփուշտներ/քեշներ/հերթեր «ստվերի» և փորձերի համար։
- Dashbords: Limits, հերթեր, լատենտ, fairness։
- SLO և runbook: գլուխգործոցի/ներառման չափանիշներ։
14) FAQ
Q 'Ի՞ նչ ընտրել' shaping կամ policing։
A 'Օգտագործողի ճանապարհների համար' shaping (բացակայում է)։ «Ֆոն «/» bulk »դասարանների համար պոլիկինգը կրիտիկական հոսքերի պաշտպանության համար։
Q 'Ինչպե՞ ս խուսափել փոթորիկներից։
A: Ջիտթերիզացված backoff, փորձարկումների սահմանափակում, կուռքեր, սերվերներ «Retry-After», գլոբալ քվոտաներ։
Q: Sticky կամ hashing?
A: Sticky, երբ անհրաժեշտ է նստաշրջան/cash localen օգտագործողը։ hashing, երբ անհրաժեշտ է շարդինգի հավասարություն և կայունություն։
Q: Ի՞ նչ է տալիս HTTP/3/QUIC-ը։
A: Առանց HOL արգելափակման TCP-ը, կորուստների ավելի լավ դիմադրությունը, արագ վերականգնումը, նկատելիորեն նվազեցնում է p99/p999 պոչերը։
15) Արդյունքները
Shaping-ը և L7-միկրոօրգանիզացիան քաղաքական համակարգված հավաքածու է 'գերակայություններ և քվոտաներ, արդար բաշխում, անվտանգ սահմաններ և խելացի ռոտինգներ, որոնք ամրացված են դիտարկմամբ և SLO-ով։ Հետևելով նկարագրված պրակտիկային (HTB/fq _ codel/ECN ներքևի մակարդակներում և Envoy/Istio/Nginx/eBPF վերևում), դուք կստանաք կանխատեսելի լատենտային պոչեր, դիմադրություն ծանրաբեռնվածության և վերահսկվող, անվտանգ օրինագծերի։