GH GambleHub

Shaping e instradamento del traffico

1) Perché tutto questo

Shaping e routing - Base di disponibilità gestita e latitanza prevedibile:
  • Stabilità: impediamo ai vicini rumorosi di chiudere i canali.
  • Le priorità e le quote tra tenenti e classi.
  • Efficienza: invia una richiesta dove viene elaborata più velocemente/meno costosa.
  • Controllo modifiche: rilasci canarini/weighted senza rischi.
  • Risparmio: ottimizzazione dei costi egress/egress e della cache CDN.

2) Concetti di base

2. 1 Traffic shaping vs policing

Shaping - Allinea il traffico tamponando e inviando pacchetti alla velocità di destinazione (anti-esplosione).
Policing - «punizione» del superamento (drop/marcatura) senza buffer. Più duro, ma più economico.

2. 2 Classi, code e discipline

Code con priorità (PRIO), WFQ/DRR (Equity Distribuzione), HTB (Quote gerarchiche), CoDel/RED (Lotta al Buffer), ECN (Segnale di sovraccarico senza drop).
Su L7 sono «code» come limiti RPS/connettori/byte e pool prioritari.

2. 3 Algoritmi di limitazione

Token Bucket (n token aggiunto con rate r; richiesta «spende» k token).
Leaky Bucket (uscita fissa; Bene per l'antialiasing).
Limiti globali/locali: locali - veloci, globali - equi (Redis/etcd/per-tenant).

3) QoS su L3/L4

3. 1 DSCP/ToS e classi di servizio

Contrassegnare i pacchetti per tipo di traffico ( , backend-RPC, operazioni di sfondo).
In datacenter: concordare il criterio DSCP con la rete/cloud.

3. 2 Linux tc: HTB + fq _ codel (sketch)

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 riduce i drop sui picchi RED/CoDel limita il buffer.
BBR (al posto di Cubic) spesso riduce la latitanza p99, soprattutto sopra le code WAN/pesanti.

4) Routing L7 (HTTP/gRPC/WS)

4. 1 Criteri di routing

Percorsi/metodi ('/api/v1/', 'POST'), intestazioni (versione client, flag fich, heder canario), cookie (A/B, sticky), etichette JWT (tenant/role), geo/ASN, finestre temporali, carico (outler detection).
Protocollo: HTTP/2 (multiplexing), HTTP/3/QUIC (resistenza alla perdita dei pacchetti), gRPC (bi-di streams), WebSocket (connettori a lunga vita).

4. 2 Split/release canarie ponderate

Rout'v1: 95% ',' v2: 5% ', aumento automatico con metriche verdi.
Rifilaggi: errori/latitanza/invarianti aziendali.

Avvoy (sketch)

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 sessioni Sticky e consistent hasing

Sessione affinity cookie/IP/JWT.
Consistent hasing per i cluster cache, i servizi sharded, i gateway rate limit.

Nginx

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

4. 4 Routing geo e latency-aware

a bordo (CDN/edge) per il RR/regione più vicina.
Latency-aware - Provini periodici health + misure RTT → il traffico verso il cluster «più veloce».

4. 5 Outlier detection / circuit breaking

Eliminazione di istanze «cattive»: max-ejection-percent, errori di base/latitanza.
Circuito breaker: limiti per connettori/RPS/in coda.

5) Traffic shaping a livello di gateway/mash-stack

5. 1 Rate limiting

Locale (per-pod) è una replica a basso costo, ma non equa.
Globale (Redis/etcd) - Giustizia per-tenant/API chiave.
Criteri: per-route, per-method, per-tenant, burst.

Avvoy RLS (sketch)

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 e priorità

I pool prioritari sono « »> «sistema»> «sfondo».
DRR/WFQ equivalenti su L7: quote/peso per-client/tenante.

5. 3 Sovraccarico e protezione

Load-shed: guasto/degrado in caso di eccesso di budget.
Adattative concertency: l'altoparlante dei limiti da p50/p95/queue-len.
Server-side backpressure: 429/503 + Retry-After.

6) Livello eBPF e CNI

6. 1 Cilium/eBPF

Filtro/instradamento nel nucleo: meno contesto-pergamena, più sottili criteri L3-L7.
Maglev hasing per una distribuzione stabile.
Il programma eBPF per per per-pod QoS (TC/XDP hooks).

6. 2 Calico/NetworkPolicies

Criteri di accesso L3/L4, classi di priorità di base, integrazione con Kubernets QoS (Guaranteed/Burstable/BestEffort).

7) Edge/CDN e gateway API

CDN: chiavi cache (normalizzazione query/headers), stale-while-revalidate, protezione origin (rate limit/bot-filtri).
Gateway API: autenticazione, quote/piani tariffari (per-consumer), vincoli SLA, geo-routing, API.
WAF - Filtraggio sul bordo per non sprecare CPU del nucleo.

8) Pneumatici asincroni/stretch

Kafka/NATS/Pulsar: quote per produttori/consumatori, limite di dimensioni batch, backpressure tramite lag.
Routing eventi: chiavi di partizionamento (tenant/idempotency-key) che misurano le partizioni per uniformità.
Exactly-once «efficiente una volta»: produttori transazionali + sink idempotati.

9) Timeout, retrai, backoff

Timeout completi: client <proxy <servizio (non il contrario).
Retrai: numero limitato con backoff esponenziale jitterizzato, ma senza tempeste.
Idampotenza obbligatoria per i retrai; altrimenti - SAGA/compensi.
Hedged/parallel richiesti (attenzione): migliora il p99, aumenta il traffico totale.

10) Osservabilità e SLO

10. 1 Metriche

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

Classi: class = interattivesystembackground, tenant, route.

10. 2 Tracing

Scorrere Correlation-ID; contrassegnare il tipo di motivo per cui "retry" shed "throttle" queue ".
Links per i retrai/hedges per capire l'impatto sui sottosistemi.

10. 3 Logi/report

Riepilogo di drop/shedding/limits, mappe termiche lungo le rotte.
Pannelli separati per il feirness (fairness index).

10. 4 esempi SLO

"p99 ≤ 300 ms a 95 percento di carico; shed ≤ 0. 1%; error_ratio ≤ 0. 5%».
Almeno il 95% della quota è garantito alla classe interattiva durante il sovraccarico.

11) Esempi di configurazione

11. 1 Nginx: rate limit + burst + split canareo

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: per-tenente quota (riserva tramite 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 Kubernets hints

Guaranteed per sottoprodotti critici (sollests = limits).
PodPriority & Preemption - I sottostanti critici supereranno quelli di sfondo in caso di deficit.
Topology Spread Constrains: distribuzione delle aree per la stabilità.

12) Anti-pattern

Il limite globale è di 429/timeout falsi su clienti importanti.
Retrai senza jitter/idampotenza della tempesta.
Confusione dei timeout (Client> Server) e doppi lavori.
Cache/code comuni per prod e esperimenti per l'inquinamento dei dati.
«Sempre sticky», senza buon senso, è un carico ineguagliabile/nodi caldi.
Un outlier detection disattivato con un'istanza «marcio» rovina le metriche della settimana.

13) Assegno-foglio di implementazione

  • Segmentare il traffico: classi/tenenti/percorsi.
  • Impostare i budget di destinazione: RPS/connettori/byte e p95/p99.
  • Includere rate limit (locale + globale), circuito breaker, outlier detection.
  • Regolare lo split canario + ripristinare automaticamente le metriche.
  • Inserire timeout/retrai con backoff esponenziale + jitter.
  • Attivare ECN/BBR (se possibile) e fq _ codel/HTB per egress.
  • Singoli pool/cache/coda per «ombre» e esperimenti.
  • Dashboard: metriche di limiti, code, latitanza, fairness.
  • SLO e runbook: criteri di shedding/reimpostazione/inclusione.

14) FAQ

Q: Cosa scegliere, shaping o policing?
A: Per i percorsi personalizzati, shaping (antialiasing senza drop). Per le classi di servizio sfondo/bulk, policing per la protezione dei flussi critici.

Come evitare le tempeste retrae?
A: backoff jitterizzato, limite di tentativi, idampotenza, suggerimenti server «Retry-After», quote globali.

Q: Sticky o hasing?
A: Sticky - Quando si desidera una sessione/cache è locale; hashing - quando serve uniformità e stabilità dello sharding.

Q: Cosa dà HTTP/3/QUIC?
A: Senza blocchi HOL TCP, migliore resistenza alle perdite, recupero più rapido - riduce notevolmente le code p99/p999.

15) Riepilogo

Shaping efficiente e routing L7 sono un insieme coerente di regole: priorità e quote, equa distribuzione, limiti di sicurezza e routing intelligente, supportati da osservabilità e SLO. Seguendo le prassi descritte (HTB/fq _ codel/ECN ai livelli inferiori e superiore), otterrai code di latitanza prevedibili, resistenza al sovraccarico e rilasci controllati e sicuri.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Telegram
@Gamble_GC
Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.