GH GambleHub

Shaping和流量路由

1)为什么这一切都是

Shaping and Routing-可管理可用性和可预测潜伏力的基础:
  • 稳定:我们不让"嘈杂的邻居"堵塞渠道。
  • 公平性:Tenant/Class之间的优先事项和配额。
  • 效率:将查询发送到处理速度更快/更便宜的位置。
  • 变更控制:无风险的金丝雀/重量版本。
  • 节省:优化egress/egress驻留和CDN缓存命中。

2)基本概念

2.1 Traffic shaping vs policing

Shaping-通过以目标速度缓冲和发送数据包来对齐流量(消除了"爆炸")。
Policing-"carate"过度(丢弃/标记)而没有缓冲。更硬,但更便宜。

2.2年级,队列和学科

优先级队列(PRIO),WFQ/DRR(公平分配),HTB(分层配额),CoDel/RED(缓冲区斗争),ECN(无底盘拥塞信号)。
在L7上,以RPS/连接符/字节限制和优先池的形式出现"队列"。

2.3限值算法

Token Bucket(rate r中添加了n个令牌;请求"浪费"k令牌)。
Leaky Bucket(固定流出;有利于平滑)。
全球/本地限制:本地-快速,全球-公平(Redis/etcd/per tenant)。

3) QoS在L3/L4

3.1个DSCP/ToS和服务类

按流量类型(交互、后端RPC、后台作业)标记数据包。
在数据中心,将DSCP策略与网络工厂/云协调。

3.2 Linux 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/RED/BBR

ECN降低了峰值上的滴水;RED/CoDel限制缓冲区。
BBR(代替Cubic)通常会降低p99的潜伏期,尤其是在WAN/重队列之上。

4) L7路由(HTTP/gRPC/WS)

4.1漫游标准

路径/方法('/api/v1/','POST'),标题(客户端版本,幻灯片,金丝雀标记),cookie(A/B,sticky),JWT标签(tenant/role),geo/ASN,时间窗口,负载(outlier检测)。
协议:HTTP/2(多路复用),HTTP/3/QUIC(对数据包丢失的抵抗力),gRPC(bi-di streams),WebSocket(长寿命连接器)。

4.2加权拆分/金丝雀发行

"v1:95%","v2:5%",在"绿色"度量标准下自动提升。
截止:错误/潜在性/业务不变性。

Envoy(草图)

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会话和consistent hashing

通过Cookie/IP/JWT ID进行会议关联。
针对缓存群集、杂乱无章的服务、门户限制进行一致性抢购。

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)→最近的ROR/区域。
Latency-aware:定期健康样本+RTT测量→流量进入"最快"集群。

4.5 Outlier detection / circuit breaking

删除"不良"实例:最大响应,基本错误/潜伏。
电路断路器:连接限制/RPS/在队列中。

5)在网关/市政厅堆栈级别进行交通转换

5.1 Rate limiting

本地(per-pod):便宜但不公平的跨副本。
全局(Redis/etcd): per-tenant/API密钥公平性。
政策:按路线,按方法,按天数,爆破。

Envoy 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.2公平与优先事项

优先池:"side"> "system">"背景"。
DRR/WFQ等效于L7: 按客户端/tenant配额/权重。

5.3过载和保护

上载:超出预算时故障/降级。
Adaptive concurrency: p50/p95/queue-len的限制动态。

Server-side backpressure: 429/503 + Retry-After.

6)eBPF和CNI级别

6.1 Cilium/eBPF

内核中的过滤/路由:上下文卷轴较少,L3-L7策略较薄。
磁悬浮以实现稳定的分布。
Pod-pod QoS的eBPF程序(TC/XDP hooks)。

6.2 Calico/NetworkPolicies

L3/L4访问策略、基本优先级类别、与Kubernetes QoS的集成(Guaranteed/Burstable/BestEffort)。

7) Edge/CDN和API网关

CDN:缓存密钥(query/headers归一化),stale-wile-revalidate,原点保护(rate limit/bot过滤器)。
API网关:身份验证、配额/票价计划(按消费者)、SLA限制、地理路由、API版本。
WAF:在边缘过滤以避免浪费核心CPU。

8)异步总线/流媒体

Kafka/NATS/Pulsar:生产者/生产者配额,击球尺寸限制,通过拉格后压。
事件路由:分期密钥(tenant/idempotency-key),"闪烁"分期以实现均匀性。
Exactly-once ≈"有效一次":交易制作人+等效合成器。

9)Taymauts,retrai,backoff

Taymauts是端到端的:客户端<代理服务(反之亦然)。
Retrai:数量有限,带有指数后退,但没有暴风雨。
在回避中必须具有幂等性;否则-SAGA/赔偿。
Hedged/parallel requests(注意):改善p99、增加总流量。

10)可观察性和SLO

10.1个指标

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

类:class=interactivesystembackground, tenant, route.

10.2 Tracing

穿过Correlation-ID;睡觉的原因类型:"retry" shed "throttle" queue"。
Links for retrais/hedges了解对子系统的影响。

10.3 Logi/报告

Drop/Shedding/限速摘要,路线热图。
正义神父的单独面板(公平索引)。

10.4个SLO示例

"p99 ≤ 300毫秒,载荷为95 percentile;shed ≤ 0.1%;error_ratio ≤ 0.5%».

"至少95%的配额在超载时保证给互动类。"

11)配置示例

11.1 Nginx: rate limit+burst+金丝雀拆分

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:配额常数(通过标签储备)

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 hinta

保证关键子集(requests=limits)。
PodPriority&Preemption:关键的垫子会在短缺的情况下取代背景。
Topology Spread Constraints:按区域分布以实现可持续性。

12)反模式

全球眼界限→重要客户虚假的429/taymout。
Retrai没有猛烈的震动/偶然性→风暴。
时空混乱(客户端>服务器)→挂起和"双重工作"。
prod和实验的常见缓存/队列→数据污染。
没有常识的"总是粘稠"→不均匀的负载/热节点。
断开的outlier检测→"烂"实例破坏了本周的指标。

13)实施支票

  • 分段流量:类/tenants/路线。
  • 设定目标预算:RPS/连接/字节和 p95/p99。
  • 启用rate limit(本地+全局)、circuit breaker、outlier检测。
  • 根据度量标准调整金丝雀+自动收割机。
  • 用指数后方+跳跃器来描述taymauts/retrai。
  • 启用ECN/BBR(在可能的情况下)和egress fq_codel/HTB。
  • "阴影"和实验的单独池/缓存/队列。
  • Dashbords:限制,队列,潜伏期,公平度的度量。
  • SLO和runbook: shedding/Back/Inside标准。

14) FAQ

问:选择什么:塑造还是警务?
A:对于自定义路径-shaping(无滴平滑)。对于服务类,"背景"/"bulk"是用于保护关键流的警务。

问:如何避免回避风暴?
答:Jitterized backoff,尝试限制,等效性,服务器提示"Retry-After",全球配额。

Q: sticky还是hashing?

A: Sticky-当用户需要会话/缓存时;hashing-当需要均匀性和稳定性时。

问:HTTP/3/QUIC有什么好处?
答:没有HOL TCP锁,对损失的抵抗力更好,恢复速度更快-显着降低p99/p999尾巴。

15)结果

有效的shaping和L7路由是一套一致的策略:优先级和配额,公平分配,安全限制和智能漫游,并得到可观察性和SLO的支持。按照所描述的做法(HTB/fq_codel/ECN在较低级别和Envoy/Istio/Nginx/eBPF在上层),您将获得可预测的潜伏尾巴,过载抵抗力和受控的安全版本。

Contact

联系我们

如需任何咨询或支持,请随时联系我们。我们随时准备提供帮助!

Telegram
@Gamble_GC
开始集成

Email — 必填。Telegram 或 WhatsApp — 可选

您的姓名 可选
Email 可选
主题 可选
消息内容 可选
Telegram 可选
@
如果填写 Telegram,我们也会在 Telegram 回复您。
WhatsApp 可选
格式:+国家代码 + 号码(例如:+86XXXXXXXXX)。

点击按钮即表示您同意数据处理。