شکل دهی و مسیریابی ترافیک
1) چرا این همه
شکل دهی و مسیریابی - پایه ای از دسترسی مدیریت شده و تاخیر قابل پیش بینی:- پایداری: به «همسایگان پر سر و صدا» امتیاز کانال ها را ندهید.
- عدالت: اولویتها و سهمیهها بین مستاجران/طبقات.
- کارایی: ما درخواست را به جایی که سریعتر/ارزان تر پردازش می شود ارسال می کنیم.
- کنترل تغییر: انتشار قناری/وزن بدون خطر.
- صرفه جویی: بهینه سازی هزینه های خروج/خروج و CDN-cache-hitrate.
2) مفاهیم اساسی
2. 1 شکل دادن به ترافیک در مقابل پلیس
شکل دادن - تراز ترافیک توسط بافر و ارسال بسته در نرخ هدف (صاف «انفجار»).
پلیس - «مجازات» بیش از حد (قطره/مارک) بدون بافر. سخت تر اما ارزان تر
2. 2 کلاس ها، صف ها و رشته ها
صف های اولویت (PRIO)، WFQ/DRR (تخصیص عادلانه)، HTB (سهمیه سلسله مراتبی)، CoDel/RED (کنترل بلوک بافر)، ECN (بدون سیگنال تراکم قطره).
در L7 - «صف» در قالب RPS محدودیت/اتصالات/بایت و استخر اولویت.
2. 3 محدود کردن الگوریتم ها
سطل توکن (n توکن با نرخ r اضافه شده است ؛ درخواست «صرف» K نشانه).
سطل نشتی (جریان خروجی ثابت ؛ خوب برای صاف کردن).
محدودیت های جهانی/محلی: محلی - سریع، جهانی - عادلانه (Redis/etcd/per-tenant).
3) QoS در هر L3/L4
3. 1 DSCP/ToS و کلاس های خدمات
بسته های برچسب بر اساس نوع ترافیک (تعاملی، RPC باطن، مشاغل پس زمینه).
در مراکز داده، مذاکره سیاست DSCP با پارچه شبکه/ابر.
3. 2 لینوکس 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/قرمز/BBR
ECN قطره را در قله کاهش می دهد ؛ RED/CoDel بافر را محدود می کند.
BBR (به جای Cubic) اغلب تأخیر p99 را کاهش می دهد، به خصوص در بالای صف های WAN/سنگین.
4) مسیریابی L7 (HTTP/gRPC/WS)
4. 1 معیارهای مسیریابی
مسیرها/روش ها ('/api/v1/'، 'POST')، هدر ها (نسخه مشتری، پرچم های ویژگی، هدر قناری)، کوکی ها (A/B، چسبنده)، تمبرهای JWT (مستاجر/نقش)، جغرافیایی/ASN، پنجره های زمان، بار (تشخیص بیرونی).
پروتکل: HTTP/2 (multiplexing)، HTTP/3/QUIC (مقاومت در برابر از دست دادن بسته)، gRPC (جریان بی دی)، WebSocket (اتصالات طولانی مدت).
4. 2 تقسیم وزنی/انتشار قناری
ریشه «v1: 95٪»، «v2: 5٪»، افزایش خودکار با معیارهای «سبز».
برش: خطاها/تاخیر/ثابت کسب و کار.
نماینده (طرح)
yaml route:
weighted_clusters:
clusters:
- name: svc-v1 weight: 95
- name: svc-v2 weight: 5
هستیو
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 جلسات چسبنده و هش کردن مداوم
پیوستگی نشست با شناسۀ کوکی/IP/JWT.
هش مداوم برای خوشه های کش، خدمات شاردی، دروازه های محدود کننده نرخ.
NGINX
nginx upstream api {
hash $cookie_user_id consistent;
server 10. 0. 0. 1;
server 10. 0. 0. 2;
}
4. 4 مسیریابی جغرافیایی و تاخیری
GeoIP/ASN در لبه (CDN/edge) → نزدیکترین POP/منطقه.
تاخیر آگاه: نمونه سلامت دوره ای + اندازه گیری RTT → ترافیک به «سریع ترین» خوشه.
4. 5 تشخیص بیرونی/شکستن مدار
ضربه زدن به موارد «بد»: حداکثر تخلیه درصد، خطاهای اساسی/تاخیر.
قطع کننده مدار: محدودیت در اتصالات/RPS/در صف.
5) شکل دادن به ترافیک در سطح پشته دروازه/مش
5. 1 محدود کردن نرخ
محلی (در هر غلاف): ارزان، اما منصفانه نیست.
جهانی (Redis/etcd): اعتبار هر مستاجر/کلید API.
سیاستمداران: در هر مسیر، در هر روش، در هر مستاجر، پشت سر هم.
نماینده 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. ۲ عدالت و اولویتها
استخرهای اولویت تعاملی> سیستم> پس زمینه.
معادل DRR/WFQ در L7: سهمیه/وزن در هر مشتری/مستاجر.
5. 3 اضافه بار و حفاظت
بار ریخته: شکست/تخریب زمانی که بودجه بیش از حد است.
همزمانی تطبیقی: دینامیک محدودیتها از p50/p95/صف-len.
فشار پشتی سمت سرور: 429/503 + Retry-After.
6) سطح eBPF و CNI
6. 1 Cilium/eBPF
فیلتر کردن/مسیریابی در هسته: سوئیچ های زمینه کمتر، سیاست های L3-L7 نازک.
هش Maglev برای توزیع پایدار.
برنامه های eBPF برای هر غلاف QoS (قلاب TC/XDP).
6. 2 کالیکو/شبکه سیاست ها
سیاست های دسترسی L3/L4، کلاس های اولویت اولیه، ادغام با Kubernetes QoS (Guaranteed/Burstable/BestEffort).
7) دروازه های لبه/CDN و API
CDN: کلیدهای حافظه پنهان (پرس و جو عادی سازی/هدر)، stale-while-revalidate، حفاظت از مبدا (فیلترهای نرخ محدود/ربات).
دروازه های API: احراز هویت، برنامه های سهمیه ای/تعرفه (برای هر مصرف کننده)، محدودیت های SLA، مسیریابی جغرافیایی، نسخه API.
WAF: فیلتر کردن در لبه به طوری که CPU هسته را هدر ندهد.
8) اتوبوس ناهمزمان/جریان
Kafka/NATS/Pulsar: سهمیه تولید کننده/مصرف کننده، محدودیت اندازه دسته ای، فشار پشتی از طریق تاخیر.
مسیریابی رویداد: مستاجر/idempotency-کلید، پارتیشن سوسو زدن برای یکنواختی.
دقیقا یک بار ≈ «یکبار موثر»: تولید کنندگان معامله + کبودی های بی نظیر.
9) زمان، عقب نشینی، عقب نشینی
پایان دادن به پایان زمان: مشتری <پروکسی <سرویس (نه برعکس).
Retrai: تعداد محدود با عقب نشینی نمایشی jitterized اما بدون طوفان.
Idempotency در عقب نشینی اجباری است; در غیر این صورت - SAGA/جبران خسارت.
درخواست های پرچین/موازی (احتیاط): p99 را بهبود می بخشد، ترافیک کلی را افزایش می دهد.
10) قابلیت مشاهده و SLO
10. 1 معیارها
، ، ، .
10. 2 ردیابی
اسکن شناسه همبستگی ؛ علامت گذاری به عنوان نوع علت: 'retry' ریخته 'throttle' صف.
لینک برای retrays/hedges برای درک تاثیر بر زیر سیستم.
10. 3 گزارش ها/گزارش ها
خلاصه قطره/ریختن/محدودیت ها، نقشه های گرما از طریق مسیر.
پانل های جداگانه برای شاخص عدالت.
10. 4 نمونه های SLO
"p99 ≤ 300 میلی ثانیه در بار 95 درصد ؛ ریختن ≤ 0. 1%; error_ratio ≤ 0 5%».
«حداقل 95٪ از سهمیه به کلاس تعاملی زمانی که بیش از حد تضمین شده است».
11) نمونه های پیکربندی
11. 1 Nginx: محدودیت نرخ + پشت سر هم + تقسیم قناری
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 نماینده: قطع کننده مدار + تشخیص بیرونی
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: مستاجر سهمیه (رزرو از طریق برچسب)
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 نکات کوبرنتیز QoS
تضمین شده برای پایین بحرانی (درخواست = محدودیت).
PodPriority & Preemption: پایین بحرانی خواهد تنگناها پس زمینه جایگزین.
توپولوژی گسترش محدودیت: منطقه بندی برای پایداری.
12) ضد الگوهای
محدودیت چشم جهانی: 429/زمان کاذب برای مشتریان مهم
Retray بدون لرزش/idempotency → طوفان.
سردرگمی از timeouts (مشتری> سرور) → یخ و «کار دو».
انبارهای مشترک/صف برای تولید و آزمایش → آلودگی داده ها.
«همیشه چسبنده» بدون حس مشترک → بار ناهموار/گره های داغ.
Disabled outlier detection → نمونه فاسد معیارهای هفته را خراب می کند.
13) چک لیست پیاده سازی
- ترافیک بخش: کلاس ها/مستاجران/مسیرها.
- بودجه هدف را به RPS/اتصالات/بایت و p95/p99 تنظیم کنید.
- فعال کردن محدودیت نرخ (محلی + جهانی)، قطع کننده مدار، تشخیص بیرونی.
- پیکربندی تقسیم قناری + بازگشت خودکار بر روی معیارها.
- ضبط زمان/retrays با عقب نشینی نمایشی + jitter.
- فعال کردن ECN/BBR (در صورت لزوم) و fq_codel/HTB برای خروج.
- استخرهای فردی/انبارها/صف برای سایه و آزمایش.
- داشبورد: معیارهای محدودیت، صف، تاخیر، انصاف.
- SLO و runbook: معیارهای ریختن/برگشت/فعال کردن.
14) سوالات متداول
س: چه چیزی را انتخاب کنید: شکل دادن یا پلیس ؟
A: برای مسیرهای سفارشی - شکل دادن (ضد aliasing بدون قطره). برای کلاس های خدمات «پس زمینه «/» فله «- پلیس برای محافظت از جریان های بحرانی.
س: چگونه از طوفان های عقب مانده جلوگیری می کنید ؟
A: عقب نشینی Jitterized، محدودیت تلاش، idempotency، سرور باعث می شود «Retry-After»، سهمیه های جهانی.
س: چسبنده یا هش کردن ؟
A: چسبنده - هنگامی که یک جلسه مورد نیاز است/کش محلی به کاربر است ؛ hashing - هنگامی که شما نیاز به یکنواختی و ثبات sharding.
س: چه چیزی به HTTP/3/QUIC می دهد ؟
A: بدون قفل TCP HOL، تحمل بهتر از دست دادن، بهبود سریع تر - به طور قابل توجهی دم p99/p999 را کاهش می دهد.
15) مجموع
شکل گیری کارآمد و مسیریابی L7 مجموعه ای از سیاست های سازگار است: اولویت ها و سهمیه ها، توزیع عادلانه، محدودیت های امن و مسیریابی هوشمند، با قابلیت مشاهده و SLO. با پیروی از شیوه های شرح داده شده (HTB/fq_codel/ECN در سطوح پایین تر و Envoy/Istio/Nginx/eBPF در بالا)، شما می توانید دم های تاخیر قابل پیش بینی، مقاومت در برابر اضافه بار و کنترل شده، انتشار امن.