シェーピングとトラフィックルーティング
1)なぜすべてのこれ
シェーピングとルーティング-管理された可用性と予測可能なレイテンシのベース:- 安定性:スコアチャンネルに「騒々しい隣人」を与えないでください。
- 公平性:テナント/クラス間の優先順位と割り当て。
- 効率:私達はそれがより速く/より安く処理されるところに要求を送ります。
- 変更制御:リスクのないカナリア/重み付けされたリリース。
- 節約:egress/egress-costとCDN-cache-hitrateの最適化。
2)基本的な概念
2.1トラフィックシェーピングとポリシング
シェーピング-ターゲットレートでパケットをバッファリングして送信することでトラフィックを整列させます(「爆発」を平滑化)。
ポリシング-バッファリングなしで過剰(ドロップ/マーキング)を「罰する」。より堅く、しかしより安い。
2.2クラス、キューと分野
優先キュー(PRIO)、 WFQ/DRR(公正割り当て)、HTB(階層クォータ)、CoDel/RED(バッファブロック制御)、ECN(ドロップ混雑信号なし)。
L7では、RPS制限/接続/バイトおよび優先度プールの形で「キュー」となります。
2.3制限アルゴリズム
トークンバケット(rate rで追加されたnトークン;request 「spends」 kトークン)。
漏れやすいバケツ(固定流出;滑らかになることのためによい)。
グローバル/ローカルリミット:ローカル-高速、グローバル-フェア(Redis/etcd/テナントごと)。
3)1 L3/L4あたりのQoS
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の代わりに)は、特にWAN/ヘビーキューの上で、しばしばp99のレイテンシーを低減します。
4) L7ルーティング(HTTP/gRPC/WS)
4.1ルーティング基準
パス/メソッド('/api/v1/'、 'POST')、ヘッダー(クライアント版、フィーチャーフラグ、カナリアヘッダ)、クッキー(A/B、スティッキー)、JWTスタンプ(テナント/ロール)、ジオASN、タイムウィンドウ、ロード(アウトリエ検出)。
プロトコル:HTTP/2(多重化)、HTTP/3/QUIC(パケット損失に対する抵抗)、gRPC(バイディストリーム)、WebSocket(長寿命の接続)。
4.2重み付けされた分割/カナリアリリース
ルート'v1: 95%'、 'v2: 5%'、 「green」メトリックで自動的に増加します。
カットオフ:エラー/レイテンシ/ビジネス不変量。
使節(スケッチ)
yaml route:
weighted_clusters:
clusters:
- name: svc-v1 weight: 95
- name: svc-v2 weight: 5
イスティオ
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粘着性のあるセッションと一貫したハッシュ
Cookie/IP/JWT識別子によるセッションアフィニティ。
キャッシュクラスタ、シャーディサービス、レートリミットゲートウェイの一貫性のあるハッシュ。
Nginx
nginx upstream api {
hash $cookie_user_id consistent;
server 10. 0. 0. 1;
server 10. 0. 0. 2;
}
4.4ジオアンドレイテンシー対応ルーティング
エッジ(CDN/edge)のGeoIP/ASN→最寄りのPOP/region。
レイテンシー対応:定期的な健康サンプル+RTT測定→「最速」クラスタへのトラフィック。
4.5 Outlierの検出/回路の壊れ目
「悪い」インスタンスをノックアウト:max-ejection-percent、基本エラー/レイテンシ。
サーキットブレーカ:キュー内の接続/RPS/の制限。
5)ゲートウェイ/マッシュスタックレベルでのトラフィックシェーピング
5.1レート制限
ローカル(per-pod):安いが、公平な相互レプリカ。
グローバル(Redis/etcd): テナント/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公平性と優先順位
優先順位プールはインタラクティブ>システム>バックグラウンドです。
L7のDRR/WFQ等価:クライアント/テナントごとのクォータ/重量。
5.3積み過ぎおよび保護
Load-shed:予算を超過した場合の失敗/劣化。
適応並行性:p50/p95/queue-lenからの制限のダイナミクス。
サーバー側のバックプレッシャー:429/503+Retry-After。
6) eBPFおよびCNIレベル
6.1 Cilium/eBPF
カーネル内のフィルタリング/ルーティング:コンテキストスイッチの数が少なく、薄いL3-L7ポリシー。
安定した分布のためのMaglevハッシュ。
ポッドQoSごとのeBPFプログラム(TC/XDPフック)。
6.2 Calico/ネットワークポリシー
L3/L4アクセスポリシー、基本的な優先度クラス、Kubernetes QoSとの統合(保証/バースタブル/ベストエフォート)。
7) エッジ/CDNおよびAPIゲートウェイ
CDN:キャッシュキー(正規化クエリ/ヘッダー)、stale-while-revalidate、原点保護(レート制限/ボットフィルタ)。
APIゲートウェイ:認証、クォータ/関税計画(消費者ごとに)、SLA制限、ジオルーティング、APIバージョン。
WAF:カーネルのCPUを無駄にしないようにエッジでフィルタリングします。
8)非同期バス/ストリーミング
Kafka/NATS/Pulsar:生産者/消費者クォータ、バッチサイズ制限、遅延によるバックプレッシャー。
イベントルーティング:テナント/idempotency-key、均一性のための明滅パーティション。
正確に一度≈「効果的な一度」:トランザクションプロデューサー+特異なあざ。
9)タイムアウト、リトリート、バックオフ
エンドツーエンドのタイムアウト:クライアント<プロキシ<サービス(その逆ではありません)。
Retrai(レトライ):指数関数的なバックオフの数は限られていますが、嵐はありません。
リトリートではIdempotencyが必須です。それ以外の場合-SAGA/報酬。
ヘッジ/並列リクエスト(注意):p99を改善し、全体的なトラフィックを増加させます。
10)観察可能性およびSLO
10.1メトリクス
、 、 、 、 、 、 。
10.2トレース
スキャン相関ID;'retry' shed 'throttle' queue'。
サブシステムへの影響を理解するためのリトレイ/ヘッジ用のリンク。
10.3ログ/レポート
ドロップ/脱落/限界、ルート別のヒートマップの概要。
公平性指数のためのパネルを分離します。
10.4 SLOの例
"p99 ≤ 95パーセンタイル負荷で300ミリ秒。0 ≤流す。1%; 0 。5%».
「クォータの少なくとも95%は、オーバーロード時にインタラクティブクラスに保証されています。」
11)構成例
11.1 Nginx:レートリミット+バースト+カナリアスプリット
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:遮断器+outlierの検出
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イスティオ:クォータテナント(ラベルによる予約)
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ヒント
クリティカルボトムス(requests=limits)を保証します。
PodPriority&Preemption:クリティカルボトムはバックグラウンドボトルネックを置き換えます。
トポロジスプレッド制約:持続可能性のためのゾーニング。
12)アンチパターン
グローバルアイリミット→false 429/重要な顧客のタイムアウト。
ジッタ/idempotency→嵐のないレトライ。
タイムアウトの混乱(クライアント>サーバー)→フリーズと「ダブルワーク」。
prodとexperiments→data contaminationの一般的なキャッシュ/キュー。
常識のない「常に粘着性」→不均等な負荷/ホットノット。
無効なアウトリエ検出→腐ったインスタンスは、今週のメトリックを台無しにします。
13)実装チェックリスト
- セグメントトラフィック:クラス/テナント/ルート。
- ターゲット予算をRPS/connections/bytesとp95/p99に設定します。
- レート制限(ローカル+グローバル)、遮断器、アウトリエ検出を有効にします。
- メトリクスでcanary split+autoロールバックを構成します。
- 指数関数バックオフ+ジッタでタイムアウト/リトレイを記録します。
- egressのECN/BBR(該当する場合)とfq_codel/HTBを有効にします。
- シャドウと実験のための個々のプール/キャッシュ/キュー。
- ダッシュボード:制限、キュー、レイテンシー、公平性の指標。
- SLOとrunbook: shedding/rollback/enable criteria。
14) FAQ
Q:何を選ぶために:形作るか、またはpolicingか?
A:カスタムパスの場合-シェーピング(ドロップなしでアンチエイリアス)。サービスクラスの「背景「/」一括「-クリティカルフローを保護するためのポリシング。
Q:いかに退却の嵐を避けますか?
A: Jitterized backoff、 limit of tempts、 idempotency、 server prompts 'Retry-After'、 global quotas。
Q:粘着性があるか、またはハッシングか?
A: Sticky-セッションが必要な場合/キャッシュはユーザーにローカルです。ハッシング-シャーディングの均一性と安定性が必要な場合。
Q:何がHTTP/3/QUICを与えますか?
A: TCP HOLロックなしで、よりよい損失の許容、より速い回復-かなりp99/p999の尾を減らします。
15)合計
効率的なシェーピングとL7ルーティングは、優先順位とクォータ、公正な分配、安全な制限、および観測性とSLOに裏打ちされたスマートルーティングなど、一貫したポリシーのセットです。説明されている慣行(下位レベルと上位レベルのEnvoy/Istio/Nginx/eBPFでHTB/fq_codel/ECN)に従うことで、予測可能なレイテンシテール、過負荷への耐性、および制御された安全なリリースが得られます。