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,我們將在 Email 之外,同步於 Telegram 回覆您。
WhatsApp 選填
格式:國碼 + 電話號碼(例如:+886XXXXXXXXX)。

按下此按鈕即表示您同意我們處理您的資料。