GH GambleHub

Shaping y enrutamiento de tráfico

1) Por qué todo esto

Configuración y enrutamiento: base de disponibilidad administrada y latencia predecible:
  • Estabilidad: no dejamos que los «vecinos ruidosos» obstruyan los canales.
  • Equidad: prioridades y cuotas entre tenantes/clases.
  • Eficiencia: enviamos la solicitud a donde se procesa más rápido/más barato.
  • Control de cambios: lanzamientos canarios/weighted sin riesgo.
  • Ahorros: optimización de los costos egress/egress y de la memoria caché CDN.

2) Conceptos básicos

2. 1 Traffic shaping vs policing

Shaping: alinea el tráfico almacenando búfer y enviando paquetes a la velocidad de destino (suavizando «explosiones»).
Policing - «caraet» de exceso (drop/etiquetado) sin buffering. Más duro, pero más barato.

2. 2 Clases, colas y disciplinas

Colas prioritarias (PRIO), WFQ/DRR (distribución equitativa), HTB (cuotas jerárquicas), CoDel/RED (lucha contra el búfer), ECN (señal de congestión sin drop).
En L7, «colas» como límites de RPS/connects/bytes y agrupaciones prioritarias.

2. 3 Algoritmos de límite

Token Bucket (n tokens añadidos con rate r; solicitud «gasta» k tokens).
Leaky Bucket (salida fija; bueno para suavizar).
Límites globales/locales: local - rápido, global - justo (Redis/etcd/per-tenant).

3) QoS en L3/L4

3. 1 DSCP/ToS y clases de servicio

Etiquete los paquetes por tipo de tráfico (interactivo, backend-RPC, trabajos de fondo).
En los centros de datos: armonice la política DSCP con la fábrica/nube de la red.

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

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 reduce los drops en los picos; RED/CoDel limita el búfer.
BBR (en lugar de Cubic) a menudo reduce la latencia p99, especialmente sobre las colas WAN/pesadas.

4) Enrutamiento L7 (HTTP/gRPC/WS)

4. 1 Criterios de routing

Rutas/métodos ('/api/v1/', 'POST'), encabezados (versión del cliente, banderas de fichas, header canario), cookies (A/B, sticky), etiquetas JWT (tenant/role), geo/ASN, ventanas temporales, carga (outlier detection).
Protocolo: HTTP/2 (multiplexación), HTTP/3/QUIC (resistencia a la pérdida de paquetes), gRPC (bi-di streams), WebSocket (conexiones de larga vida).

4. 2 Split ponderado/lanzamientos canarios

Enganche 'v1: 95%', 'v2: 5%', aumento automático con métricas 'verdes'.
Cortes: errores/latencia/invariantes comerciales.

Envoy (esbozo)

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 Sesiones de Sticky y Consistent hashing

Afinidad de sesión por cookie/IP/JWT-ID.
Consistent hashing para clústeres de caché, servicios cifrados, gateways rate limit.

Nginx

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

4. 4 Geo- y latency-aware routing

GeoIP/ASN en el borde (CDN/edge) → el RR/región más cercana.
Latency-aware: muestras periódicas de salud + mediciones de RTT → tráfico al clúster «más rápido».

4. 5 Outlier detection / circuit breaking

Eliminación de instancias «malas»: max-ejection-percent, errores básicos/latencia.
Circuit breaker: límites para conexiones/RPS/en colas.

5) Traffic shaping a nivel de pasarela/pila de memoria

5. 1 Rate limiting

Local (per-pod): barato pero no justo entre réplicas.
Global (Redis/etcd): equidad per-tenant/API-key.
Políticas: per-route, per-method, per-tenant, burst.

Envoy RLS (esbozo)

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 y prioridades

Grupos prioritarios: «Interactivo»> «Sistema»> «Fondo».
DRR/WFQ equivalentes en L7: cuotas/pesos por cliente/tenant.

5. 3 Sobrecarga y protección

Load-shed: falla/degradación cuando se exceden los presupuestos.
Concurrencia adaptativa: dinámica de límites de p50/p95/queue-len.
Server-side backpressure: 429/503 + Retry-After.

6) Nivel eBPF y CNI

6. 1 Cilium/eBPF

Filtrado/enrutamiento en el núcleo: menos contextos, directivas de L3-L7 delgadas.
Maglev hashing para una distribución estable.
Programas de eBPF para QoS per-pod (TC/XDP hooks).

6. 2 Calico/NetworkPolicies

Directivas de acceso de L3/L4, clases de prioridad básica, integración con Kubernetes QoS (Guaranteed/Burstable/BestEffort).

7) Puertas de enlace Edge/CDN y API

CDN: claves de caché (normalización de query/headers), stale-while-revalidate, protección de origen (filtros de límite de velocidad/bot).
Pasarelas API: autenticación, contingentes/planes arancelarios (per-consumer), restricciones SLA, geo-routing, versión API.
WAF: filtrar en el borde para no desperdiciar la CPU del núcleo.

8) Neumáticos asíncronos/streaming

Kafka/NATS/Pulsar: cuotas para productores/consumers, límite de tamaño de batch, backpressure a través de lag.
Enrutamiento de eventos: llaves de lote (tenant/idempotency-key), lotes «parpadeantes» para uniformidad.
Exactly-once ≈ «efectivamente una vez»: productores transaccionales + xinki idempotente.

9) Taimouts, retrayas, backoff

Los tiempos de espera son de extremo a extremo: cliente <proxy <servicio (no al revés).
Retrai: número limitado con retroceso exponencial jitterizado, pero sin tormentas.
La idempotencia es obligatoria en los retratos; de lo contrario - SAGA/compensación.
Solicitudes Hedged/parallel (cuidado): mejora p99, aumenta el tráfico total.

10) Observabilidad y SLO

10. 1 Métricas

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

Clases: class = interactivesystembackground, tenant, route.

10. 2 Treasing

Busque la Correlación-ID; note los durmientes con el tipo de causa: 'retry' shed 'throttle' queue '.
Links para retraídos/hedges para entender el impacto en los subsistemas.

10. 3 Registros/Informes

Resumen de drops/shedding/límites, mapas térmicos a lo largo de las rutas.
Paneles separados para el per-tenant de la justicia (índice fairness).

10. 4 Ejemplos de SLO

"p99 ≤ 300 ms a 95-percentil de carga; shed ≤ 0. 1%; error_ratio ≤ 0. 5%».
«Al menos el 95% de la cuota está garantizada a la clase interactiva en caso de sobrecarga».

11) Ejemplos de configuraciones

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

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: pluma-tenant de la cuota (reserva a través de la etiqueta)

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 hints

Guaranteed para pods críticos (requests = limits).
PodPriority & Preemption: las podas críticas desplazarán a las de fondo cuando escaseen.
Topology Spread Constraints: distribución por zonas para la sostenibilidad.

12) Anti-patrones

El límite global «por ojo» → falsos 429/timeouts en clientes importantes.
Retraídas sin jitter/idempotencia → tormenta.
Confusión de tiempos de espera (cliente> servidor) → colgar y «doble trabajo».
Cachés/colas comunes para prod y experimentos → contaminación de datos.
«Siempre sticky» sin sentido común → carga desigual/nodos calientes.
La detección de outlier desactivada → las instancias «podridas» estropean las métricas de la semana.

13) Lista de verificación de implementación

  • Segmenta el tráfico: clases/tenantes/rutas.
  • Establecer presupuestos de destino: RPS/connects/bytes y p95/p99.
  • Habilite el límite de velocidad (local + global), circuito breaker, detección de salida.
  • Configure el split canario + autocorrección por métricas.
  • Impregnar los temporizadores/retraídos con backoff + jitter exponencial.
  • Habilite ECN/BBR (siempre que sea posible) y fq_codel/HTB para egresos.
  • Grupos/cachés/colas individuales para «sombras» y experimentos.
  • Dashboards: métricas de límites, colas, latencia, fairness.
  • SLO y runbook: criterios para la introducción/reversión/inclusión.

14) FAQ

P: ¿Qué elegir: shaping o policing?
R: Para rutas personalizadas - shaping (suavizado sin drops). Para las clases de servicio, «fondo «/» bulk »- policing para proteger los flujos críticos.

P: ¿Cómo evitar las tormentas retray?
R: backoff jitterizado, límite de intento, idempotencia, pistas de servidor 'Retry-After', cuotas globales.

P: ¿Sticky o hashing?
A: Sticky - Cuando se necesita una sesión/caché es local para el usuario; hashing - cuando se necesita uniformidad y estabilidad de charding.

P: ¿Qué da el HTTP/3/QUIC?
R: Sin bloqueos HOL TCP, mejor resistencia a las pérdidas, recuperación más rápida - reduce notablemente las colas p99/p999.

15) Resultados

La forma eficiente y el enrutamiento L7 son un conjunto coherente de políticas: prioridades y cuotas, distribución equitativa, límites seguros y enrutamiento inteligente respaldado por la observabilidad y el SLO. Siguiendo las prácticas descritas (HTB/fq_codel/ECN en los niveles inferiores y Envoy/Istio/Nginx/eBPF en los niveles superiores), obtendrá previsibles colas de latencia, resistencia a la sobrecarga y lanzamientos controlados y seguros.

Contact

Póngase en contacto

Escríbanos ante cualquier duda o necesidad de soporte.¡Siempre estamos listos para ayudarle!

Telegram
@Gamble_GC
Iniciar integración

El Email es obligatorio. Telegram o WhatsApp — opcionales.

Su nombre opcional
Email opcional
Asunto opcional
Mensaje opcional
Telegram opcional
@
Si indica Telegram, también le responderemos allí además del Email.
WhatsApp opcional
Formato: +código de país y número (por ejemplo, +34XXXXXXXXX).

Al hacer clic en el botón, usted acepta el tratamiento de sus datos.