Şekillendirme ve trafik yönlendirme
1) Bütün bunlar neden
Şekillendirme ve yönlendirme - yönetilen kullanılabilirlik ve öngörülebilir gecikme süresi temeli:- Kararlılık: kanalları puanlamak için "gürültülü komşular" vermeyin.
- Adalet: Kiracılar/sınıflar arasındaki öncelikler ve kotalar.
- Verimlilik: Talebi daha hızlı/daha ucuz işlendiği yere göndeririz.
- Değişiklik kontrolü: Risk olmadan kanarya/ağırlıklı salımlar.
- Tasarruf: çıkış/çıkış maliyetlerinin ve CDN-cache-hitrate optimizasyonu.
2) Temel kavramlar
2. 1 Trafik şekillendirme vs polislik
Şekillendirme - Paketleri hedef oranda tamponlayıp göndererek trafiği hizalar ("patlamaları" yumuşatır).
Polislik - tamponlama olmadan aşırılıkları "cezalandırır" (düşürme/işaretleme). Daha sert ama daha ucuz.
2. 2 Sınıflar, kuyruklar ve disiplinler
Priority Queues (PRIO), WFQ/DRR (Fair Allocation), HTB (Hiyerarşik Kotalar), CoDel/RED (Buffer Block Control), ECN (No Drop Congestion Signal).
L7'de - RPS limitleri/bağlantıları/baytları ve öncelik havuzları şeklinde "kuyruklar".
2. 3 Sınırlayıcı algoritmalar
Jeton Kovası (r oranı ile eklenen n jeton; Talep "harcıyor'k belirteçleri).
Sızdıran Kova (sabit çıkış; yumuşatmak için iyi).
Küresel/yerel sınırlar: yerel - hızlı, küresel - fuar (Redis/etcd/kiracı başına).
3) L3/L4 başına QoS
3. 1 DSCP/ToS ve Hizmet Sınıfları
Paketleri trafik türüne göre etiketleyin (etkileşimli, arka uç RPC, arka plan işleri).
Veri merkezlerinde, DSCP politikasını ağ yapısı/bulutu ile görüşün.
3. 2 Linux tc: HTB + fq_codel (küçük resim)
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/KIRMIZI/BBR
ECN zirvelerde düşmeleri azaltır; KIRMIZI/CoDel tamponlamayı kısıtlar.
BBR (Cubic yerine), özellikle WAN/ağır kuyrukların üstünde, genellikle p99 gecikmesini azaltır.
4) L7 yönlendirme (HTTP/gRPC/WS)
4. 1 Yönlendirme kriterleri
Yollar/yöntemler ('/api/v1/', 'POST'), başlıklar (istemci sürümü, özellik bayrakları, kanarya başlığı), çerezler (A/B, yapışkan), JWT damgaları (kiracı/rol), geo/ASN, zaman pencereleri, yük (aykırı algılama).
Protokol: HTTP/2 (çoğullama), HTTP/3/QUIC (paket kaybına karşı direnç), gRPC (bi-di akışları), WebSocket (uzun ömürlü bağlantılar).
4. 2 Ağırlıklı bölünmüş/kanarya bültenleri
Kök 'v1: %95', 'v2: %5','yeşil "metriklerle otomatik artış.
Kesintiler: hatalar/gecikme/iş değişmezleri.
Elçi (kroki)
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 Yapışkan oturumlar ve tutarlı karma
Çerez/IP/JWT tanımlayıcısı ile oturum yakınlığı.
Önbellek kümeleri, parçalı hizmetler, hız sınırı ağ geçitleri için tutarlı karma.
Nginx
nginx upstream api {
hash $cookie_user_id consistent;
server 10. 0. 0. 1;
server 10. 0. 0. 2;
}
4. 4 Coğrafi ve gecikmeye duyarlı yönlendirme
GeoIP/ASN kenarda (CDN/kenar) - en yakın POP/bölge.
Gecikmeye duyarlı: periyodik sağlık örnekleri + RTT ölçümleri -'en hızlı "kümeye trafik.
4. 5 Aykırı algılama/devre kesme
"Kötü" örnekleri devre dışı bırakma: max-ejection-yüzde, temel hatalar/gecikme.
Devre kesici: bağlantıların sınırları/RPS/kuyruklarda.
5) Ağ geçidi/mash yığını seviyesinde trafik şekillendirme
5. 1 Oran sınırlaması
Yerel (pod başına): Ucuz, ancak adil olmayan inter-replika.
Global (Redis/etcd): Kiracı/API anahtarı başına geçerlilik.
Politikacılar: rota başına, yöntem başına, kiracı başına, patlama.
Elçi RLS (kroki)
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 Adalet ve Öncelikler
Öncelikli havuzlar etkileşimli> sistem> arka plandır.
L7'deki DRR/WFQ eşdeğerleri: Müşteri/kiracı başına kotalar/ağırlıklar.
5. 3 Aşırı yük ve koruma
Load-shed: Bütçeler aşıldığında başarısızlık/bozulma.
Uyarlanabilir eşzamanlılık: p50/p95/queue-len sınırlarının dinamiği.
Sunucu tarafı geri basınç: 429/503 + Retry-After.
6) eBPF ve CNI seviyesi
6. 1 Cilium/eBPF
Çekirdekte filtreleme/yönlendirme: daha az bağlam anahtarı, ince L3-L7 politikaları.
Kararlı dağıtım için Maglev hashing.
Pod başına QoS (TC/XDP kancaları) için eBPF programları.
6. 2 Calico/Ağ Politikaları
L3/L4 erişim ilkeleri, temel öncelik sınıfları, Kubernetes QoS ile tümleştirme (Garantili/Burstable/BestEffort).
7) Kenar/CDN ve API ağ geçitleri
CDN: cache keys (normalization query/headers), stale-while-revalidate, origin protection (rate limit/bot filters).
API ağ geçitleri: kimlik doğrulama, kotalar/tarife planları (tüketici başına), SLA kısıtlamaları, coğrafi yönlendirme, API sürümü.
WAF: Çekirdeğin CPU'sunu boşa harcamamak için kenarda filtreleme.
8) Asenkron otobüsler/akış
Kafka/NATS/Pulsar: üretici/tüketici kotaları, parti büyüklüğü sınırı, gecikme yoluyla geri basınç.
Olay yönlendirme: kiracı/idempotency-key, tekdüzelik için titreyen bölümler.
Tam bir kez ≈'bir kez etkili ": işlemsel üreticiler + idempotent çürükler.
9) Zaman aşımları, geri çekilmeler, geri çekilme
Uçtan uca zaman aşımları: istemci <proxy <hizmeti (tersi değil).
Retrai: Jitterleştirilmiş üstel geri tepme ile sınırlı sayıda ancak fırtına yok.
Geri çekilmelerde idempotency zorunludur; Aksi takdirde - SAGA/tazminat.
Hedged/paralel istekler (dikkat): p99 geliştirir, genel trafiği artırır.
10) Gözlemlenebilirlik ve SLO
10. 1 Metrikler
, , , , , , ,
10. 2 İzleme
Tarama Korelasyon-ID; Neden türü: 'retry' shed 'throttle' queue'ile işaret aralıkları.
Alt sistemler üzerindeki etkisini anlamak için retrays/hedges için bağlantılar.
10. 3 Günlükler/Raporlar
Damla/dökülme/sınırların özeti, rotaya göre ısı haritaları.
Adalet indeksi için ayrı paneller.
10. 4 SLO örneği
"p99 ≤ 95 persentil yükte 300 ms; 0 ≤ döküldü. 1%; error_ratio ≤ 0. 5%».
"Kotanın en az %95'i aşırı yüklendiğinde etkileşimli sınıfa garanti edilir".
11) Yapılandırma örnekleri
11. 1 Nginx: hız limiti + patlama + kanarya bölünmesi
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 Elçi: devre kesici + aykırı algılama
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: kota kiracısı (etiket yoluyla rezerv)
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 ipucu
Kritik dipler için garantilidir (istekler = limitler).
PodPriority & Preemption: Kritik dipler arka plan darboğazlarının yerini alacaktır.
Topoloji Yayılma Kısıtlamaları: Sürdürülebilirlik için imar.
12) Anti-desenler
Global göz limiti - önemli müşteriler için yanlış 429/zaman aşımı.
Jitter/idempotency olmadan Retrai - fırtına.
Zaman aşımlarının karışıklığı (istemci> sunucu) - donar ve "çift iş".
Prod ve deneyler için ortak önbellekler/kuyruklar - veri kirliliği.
"Her zaman yapışkan" sağduyu olmadan - düzensiz yük/sıcak düğümler.
Disabled outlier detection - rotten instance haftanın metriklerini bozar.
13) Uygulama kontrol listesi
- Segment trafiği: sınıflar/kiracılar/rotalar.
- Hedef bütçeleri RPS/connections/bytes ve p95/p99 olarak ayarlayın.
- Hız sınırını etkinleştir (yerel + global), devre kesici, aykırı değer algılama.
- Ölçütlerde kanarya bölünmesini + otomatik geri dönüşünü yapılandırın.
- Üstel backoff + jitter ile zaman aşımları/retrays kaydedin.
- Çıkış için ECN/BBR (varsa) ve fq_codel/HTB etkinleştirin.
- Gölge ve deneyler için bireysel havuzlar/önbellekler/kuyruklar.
- Gösterge tabloları: sınırların metrikleri, kuyruklar, gecikme, adalet.
- SLO ve runbook: dökülme/geri alma/etkinleştirme kriterleri.
14) SSS
S: Ne seçmeli: şekillendirme veya polislik?
A: Özel yollar için - şekillendirme (damla olmadan kenar yumuşatma). Hizmet sınıfları için "arka plan "/" toplu "- kritik akışları korumak için polislik.
S: Geri çekilme fırtınalarından nasıl kaçınırsınız?
C: Jitterized backoff, deneme limiti, idempotency, sunucu 'Retry-After' komutları, global kotalar.
S: Yapışkan mı, hashing mi?
A: Yapışkan - bir oturum gerektiğinde/önbellek kullanıcı için yerel olduğunda; Hashing - yeknesaklığa ve sharding stabilitesine ihtiyacınız olduğunda.
S: HTTP/3/QUIC veren nedir?
C: TCP HOL kilitleri olmadan, daha iyi kayıp toleransı, daha hızlı kurtarma - p99/p999 kuyruklarını önemli ölçüde azaltır.
15) Toplam
Verimli şekillendirme ve L7 yönlendirme, tutarlı bir politikalar kümesidir: öncelikler ve kotalar, adil dağıtım, güvenli sınırlar ve akıllı yönlendirme, gözlemlenebilirlik ve SLO ile desteklenir. Açıklanan uygulamaları izleyerek (alt seviyelerde HTB/fq_codel/ECN ve üst kısımda Envoy/Istio/Nginx/eBPF), öngörülebilir gecikme kuyrukları, aşırı yüklenmeye karşı direnç ve kontrollü, güvenli sürümler elde edersiniz.