GH GambleHub

Shaping und Verkehrsführung

1) Warum das alles ist

Shaping und Routing - Basis für verwaltete Verfügbarkeit und vorhersehbare Latenz:
  • Stabilität: Wir verhindern, dass „lärmende Nachbarn“ die Kanäle verstopfen.
  • Fairness: Prioritäten und Quoten zwischen Tenanten/Klassen.
  • Effizienz: Wir leiten die Anfrage dorthin, wo sie schneller/billiger bearbeitet wird.
  • Change Control: Kanarien-/Weighted-Releases ohne Risiko.
  • Einsparungen: Optimierung der egress/egress-Werte und der CDN-Cache-Trefferquote.

2) Grundbegriffe

2. 1 Traffic shaping vs policing

Shaping - Gleicht den Datenverkehr durch Puffern und Senden von Paketen mit der Zielgeschwindigkeit aus (Glättung von „Explosionen“).
Policing - „Bestrafung“ der Überschreitung (Drop/Markierung) ohne Pufferung. Härter, aber billiger.

2. 2 Klassen, Warteschlangen und Disziplinen

Priority Queues (PRIO), WFQ/DRR (gerechte Verteilung), HTB (hierarchische Quoten), CoDel/RED (Bufferbloat-Bekämpfung), ECN (Drop-freies Überlastsignal).
Bei L7 gibt es „Warteschlangen“ in Form von RPS/Konnektivitäts-/Byte-Limits und Prioritätspools.

2. 3 Begrenzungsalgorithmen

Token Bucket (n Token werden mit der Rate r hinzugefügt; Anfrage „verbringt“ k Token).
Leaky Bucket (fester Abfluss; gut zum Glätten).
Globale/lokale Grenzen: lokal - schnell, global - fair (Redis/etcd/per tenant).

3) QoS auf L3/L4

3. 1 DSCP/ToS und Serviceklassen

Beschriften Sie Pakete nach Art des Datenverkehrs (interaktiv, Backend-RPC, Hintergrundjobs).
In Rechenzentren - Richten Sie die DSCP-Richtlinie mit der Netzwerkfabrik/Cloud aus.

3. 2 Linux tc: HTB + fq_codel (Skizze)

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 reduziert Tropfen auf Peaks; RED/CoDel schränkt das Pufferbloat ein.
BBR (anstelle von Cubic) reduziert oft die p99-Latenz, insbesondere über WAN/schwere Warteschlangen.

4) L7-Routing (HTTP/gRPC/WS)

4. 1 Routing-Kriterien

Pfade/Methoden ('/api/v1/', 'POST'), Header (Client-Version, Ficha-Flags, Kanarienkopf), Cookies (A/B, Sticky), JWT-Stempel (Tenant/Rolle), Geo/ASN, Zeitfenster, Last (Ausreißererkennung).
Protokoll: HTTP/2 (Multiplexing), HTTP/3/QUIC (Widerstand gegen Paketverlust), gRPC (Bi-Di-Streams), WebSocket (langlebige Anschlüsse).

4. 2 Gewichtete Split/Kanarienfreigaben

Root 'v1: 95%', 'v2: 5%', automatische Erhöhung bei „grünen“ Metriken.
Cutoff: Fehler/Latenz/Geschäftsinvarianten.

Envoy (Skizze)

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-Sessions und konsistentes Hashing

Sitzungsaffinität durch Cookie/IP/JWT-ID.
Konsistentes Hashing für Cache-Cluster, Shared Services, Gate-Rate-Limit.

Nginx

nginx upstream api {
hash $cookie_user_id consistent;
server 10. 0. 0. 1;
server 10. 0. 0. 2;
}

4. 4 Geo- und Latenzrouting

GeoIP/ASN am Rand (CDN/edge) → die nächstgelegene Region.
Latency-aware: Regelmäßige Gesundheitstests + RTT-Messungen → den Datenverkehr zum „schnellsten“ Cluster.

4. 5 Outlier detection / circuit breaking

Knockout der „schlechten“ Instances: max-ejection-percent, Grundfehler/Latenz.
Circuit Breaker: Grenzen für Anschlüsse/RPS/in Warteschlangen.

5) Traffic-Shaping auf Gateway/Mash-Stack-Ebene

5. 1 Rate limiting

Lokal (per-pod): billig, aber nicht fair zwischen-Repliken.
Global (Redis/etcd): Gerechtigkeit per-tenant/API-Schlüssel.
Richtlinien: per-route, per-method, per-tenant, burst.

RLS aktivieren (Skizze)

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 und Prioritäten

Prioritätspools: „interaktiv“> „System“> „Hintergrund“.
DRR/WFQ-Äquivalente für L7: Quoten/Gewichte pro Kunde/Tenant.

5. 3 Überlastung und Schutz

Load-shed: Ausfall/Degradierung bei Budgetüberschreitung.
Adaptive Concurrency: Grenzdynamik aus p50/p95/queue-len.
Server-side backpressure: 429/503 + Retry-After.

6) eBPF und CNI-Ebene

6. 1 Cilium/eBPF

Filtern/Routing im Kernel: weniger Kontext-Switches, subtile Richtlinien L3-L7.
Maglev-Hashing für eine stabile Verteilung.
eBPF-Programme für Per-Pod-QoS (TC/XDP-Hooks).

6. 2 Calico/NetworkPolicies

L3/L4-Zugriffsrichtlinien, grundlegende Prioritätsklassen, Integration mit Kubernetes QoS (Guaranteed/Burstable/BestEffort).

7) Edge/CDN und API-Gateways

CDN: Cache-Schlüssel (Normalisierung query/headers), stale-while-revalidate, origin protection (rate limit/bot filter).
API-Gateways: Authentifizierung, Kontingente/Tarifpläne (per-consumer), SLA-Beschränkungen, Geo-Routing, API-Version.
WAF: Filterung am Rand, um die CPU des Kernels nicht zu verschwenden.

8) Asynchroner Bus/Streaming

Kafka/NATS/Pulsar: Quoten für Produzenten/Consumer, Batch-Size-Limit, Backpressure via Lag.
Event-Routing: Partitionierungsschlüssel (tenant/idempotency-key), „flackernde“ Parties für Gleichmäßigkeit.
Exactly-once ≈ „einmal effektiv“: Transaktionsproduzenten + idempotente Syncs.

9) Timeouts, Retrays, Backoff

Timeouts durch: Client <Proxy <Service (nicht umgekehrt).
Retrays: begrenzte Anzahl mit jitterisiertem exponentiellem Backoff, aber keine Stürme.
Idempotenz ist bei Retrays obligatorisch; ansonsten - SAGA/Entschädigung.
Hedged/parallel requests (Vorsicht): verbessert p99, erhöht den Gesamtverkehr.

10) Beobachtbarkeit und SLO

10. 1 Metriken

rate_limit_hits, requests_queued, shed_requests_total, latency_ms{p50,p95,p99}, error_ratio, retry_attempts, outlier_ejections, queue_time_ms.

Klassen: class = interactivesystembackground, tenant, route.

10. 2 Traising

Durchqueren Sie die Correlation-ID; Markieren Sie die Spans mit der Art der Ursache: 'retry' shed 'throttle' queue'.
Links für Retrays/Hedges, um die Auswirkungen auf Subsysteme zu verstehen.

10. 3 Protokolle/Berichte

Zusammenfassung von Drops/Shedding/Limits, Heatmaps nach Routen.
Separate Panels für den Per-Tenant der Gerechtigkeit (Fairness-Index).

10. 4 SLO-Beispiele

"p99 ≤ 300 ms bei 95-Perzentil Last; shed ≤ 0. 1%; error_ratio ≤ 0. 5%».
„Mindestens 95% der Quote sind für eine interaktive Klasse bei Überlastung garantiert“.

11) Beispiele für Konfigurationen

11. 1 Nginx: rate limit + burst + Kanariensplit

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: pro Tenant der Quote (Reserve über 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 von Hinta

Garantiert für kritische Pods (requests = limits).
PodPriority & Preemption: Kritische Pods verdrängen bei Knappheit den Hintergrund.
Topologie Spread Constraints: Verteilung auf Zonen für Nachhaltigkeit.

12) Anti-Muster

Das globale Limit pro Auge → falsche 429/Timeouts bei wichtigen Kunden.
Retrai ohne Jitter/Idempotenz → Sturm.
Verwirrung von Timeouts (Client> Server) → Einfrieren und „Doppelarbeit“.
Gemeinsame Caches/Warteschlangen für prod und Experimente → Datenverschmutzung.
„Immer sticky“ ohne gesunden Menschenverstand → ungleichmäßige Belastung/heiße Knoten.
Eine deaktivierte Outlier-Erkennung → einer „faulen“ Instance verdirbt die Metriken der Woche.

13) Checkliste Umsetzung

  • Segmentieren Sie den Verkehr: Klassen/Tenanten/Routen.
  • Legen Sie die Zielbudgets fest: RPS/Anschlüsse/Bytes und p95/p99.
  • Aktivieren Sie rate limit (lokal + global), circuit breaker, outlier detection.
  • Richten Sie Kanariensplit + Auto-Otcat für Metriken ein.
  • Schreiben Sie Timeouts/Retrays mit exponentiellem Backoff + Jitter.
  • Aktivieren Sie ECN/BBR (wo möglich) und fq_codel/HTB für egress.
  • Separate Pools/Caches/Warteschlangen für „Schatten“ und Experimente.
  • Dashboards: Metriken für Limits, Warteschlangen, Latenz, Fairness.
  • SLO und Runbook: Shedding/Rollback/Include Kriterien.

14) FAQ

Q: Was zu wählen: shaping oder policing?
A: Für benutzerdefinierte Pfade - Formen (Glätten ohne Tropfen). Für die Serviceklassen „Hintergrund „/“ Masse “- Policing zum Schutz kritischer Threads.

F: Wie vermeide ich Retray-Stürme?
A: Jitterisierter Backoff, Versuchsbegrenzung, Idempotenz, serverseitige' Retry-After '-Hinweise, globale Quoten.

F: Sticky oder Hashing?
A: Sticky - wenn eine Sitzung/Cache benötigt wird, ist der Benutzer lokal; Hashing - wenn Sie die Gleichmäßigkeit und Stabilität von Sharding benötigen.

F: Was bedeutet HTTP/3/QUIC?
A: Ohne HOL-TCP-Sperren, bessere Verlustfestigkeit, schnellere Erholung - reduziert die p99/p999-Schwänze deutlich.

15) Ergebnisse

Effektives Shaping und L7-Routing ist ein kohärenter Satz von Richtlinien: Prioritäten und Quoten, faire Verteilung, sichere Grenzen und intelligentes Routing, unterstützt durch Beobachtbarkeit und SLO. Indem Sie die beschriebenen Praktiken befolgen (HTB/fq_codel/ECN auf den unteren Ebenen und Envoy/Istio/Nginx/eBPF auf den oberen Ebenen), erhalten Sie vorhersehbare Latenzschwänze, Überlastungsresistenz und kontrollierte, sichere Releases.

Contact

Kontakt aufnehmen

Kontaktieren Sie uns bei Fragen oder Support.Wir helfen Ihnen jederzeit gerne!

Telegram
@Gamble_GC
Integration starten

Email ist erforderlich. Telegram oder WhatsApp – optional.

Ihr Name optional
Email optional
Betreff optional
Nachricht optional
Telegram optional
@
Wenn Sie Telegram angeben – antworten wir zusätzlich dort.
WhatsApp optional
Format: +Ländercode und Nummer (z. B. +49XXXXXXXXX).

Mit dem Klicken des Buttons stimmen Sie der Datenverarbeitung zu.