マイクロサービスがスケールアップすると、単一の遅延する依存関係や予期せぬトラフィックスパイクが、呼び出しチェーン全体に波及し、本番環境を停止させる可能性があります。Microservices Engine (MSE) のトラフィック保護機能は、トラフィックを起点とし、分散アプリケーション全体でリアルタイムの速度制限、サーキットブレーカー、デグラデーション、およびシステム過負荷制御を実施することで、サービスの安定性を確保します。オープンソースの Sentinel フレームワークを基盤とする商用プロダクトであり、独身の日などの大規模プロモーションイベントの裏側で稼働するコアコンポーネントです。
トラフィック保護の仕組み
分散アプリケーションでは、クライアントからのリクエストが、ゲートウェイ、ファイアウォール、Network Load Balancer (NLB) を経由してフロントエンドネットワークサービスに到達し、さらにバックエンドサービスへと進みます。この過程で、下流サービスやサードパーティアプリケーションが呼び出される場合があります。
トラフィック保護は、この全リクエストフローにわたり動作します。各レイヤーにおけるトラフィックパターンを継続的に分析し、数秒以内に専門的かつ安定したトラフィック保護措置を適用・強制します。ルールの更新は即時反映されます。
保護モデルには、以下の 2 つのコア特性があります:
秒単位の検出および適用:トラフィック変化発生後数秒以内に異常を検出し、ルールを適用します。
動的なルール更新:新しいまたは変更された保護ルールをリアルタイムでプッシュします。
各機能の適用範囲
トラフィック保護には、相互に補完し合う 4 つの機能が含まれます。以下の表を参照し、ご使用のシナリオに最も適した機能を選択してください:
| シナリオ | 課題 | 機能 | 効果 |
|---|---|---|---|
| フラッシュセールまたはプロモーションイベント | 急激なトラフィックスパイクによりバックエンドの処理能力が逼迫 | Ingress 速度制限 | サービスエントリポイントにおける着信リクエストレートを、下流サービスの処理能力に合わせて制限 |
| メッセージのピーク負荷シフト | 突発的なメッセージトラフィックによりコンシューマーのパフォーマンスが低下 | Ingress 速度制限 + 同時実行数隔離 | リクエストレートを制限するとともに、応答が遅いコンシューマーを隔離し、共有リソースの枯渇を防ぐ |
| クラスターレベルの速度制限 | 集約トラフィックがサービスクラスターの総処理能力を超過 | Ingress 速度制限 | クラスターノード間で分散されたリクエストレート制限を適用 |
| ホットスポットパラメーター | 特定のパラメーター値(例:頻繁にアクセスされる商品 ID)が不均衡な負荷を生成 | ホットスポット隔離 | ホットスポットトラフィックを通常トラフィックから分離し、通常のリクエストが十分な処理能力を確保できるようにする |
| カスケード障害 | 応答が遅い、または障害を起こしている依存関係が呼び出しチェーン全体を停止させる | 不安定な依存関係に対するサーキットブレーカー | 不安定な依存関係に対してサーキットブレーカーをトリップさせ、影響範囲を最小限に抑える |
機能の詳細
トラフィック保護は、専門的かつ多様な予防措置を提供します:
Ingress 速度制限
サービスの処理能力に基づき、着信リクエストレートを制御します。ゲートウェイ、フロントエンドアプリケーション、サービスプロバイダーなど、アプリケーションのエントリポイントで速度制限を適用し、下流サービスが処理可能な範囲を超えるトラフィックの流入を防止します。
Ingress 速度制限は第一線の防御機能です。システム内部への流入前に過剰なリクエストを拒否することで、呼び出しチェーン内のすべての下流サービスを保護します。
同時実行性の隔離
指定されたリソースに対する並行スレッドの最大数を制限します。応答が遅い呼び出しがスレッドを長時間占有しても、他のインターフェイスはスレッドプールの枯渇を回避できるため、応答性を維持できます。
サービスが共通のスレッドプールを共有しており、単一の遅延する依存関係が利用可能なすべてのスレッドを独占してしまう可能性がある場合に、同時実行数隔離をご利用ください。
ホットスポット隔離
ホットスポットトラフィックを通常トラフィックから分離します。これにより、無効なホットスポットが通常トラフィックの処理能力を先行占有することを防ぎます。特定のパラメーター値(例:頻繁にアクセスされる商品 ID)が不均衡な負荷を生成する場合、そのパラメーターに対するレート制限を設定することで、通常のリクエストが十分な処理能力を確保できるようにします。
不安定な依存関係に対するサーキットブレーカー
アプリケーション間およびアプリケーション内において、サーキットブレーカーを適用します。下流の依存関係が応答が遅くなる、またはしきい値を超えてエラーを返すなど不安定な状態になると、サーキットブレーカーがトリップし、影響範囲を限定してカスケード障害を防止します。
モニタリング
トラフィック保護は、クライアントレベルでのリアルタイムなトラフィックモニタリングおよびトラフィック診断・分析機能を提供します。これにより、O&M 担当者はアプリケーションの安定性を守るための予防措置を講じることができます。
トラフィック保護は、以下の 3 段階の可観測性を提供します:
| レベル | 対象範囲 |
|---|---|
| 単一ノードモニタリング | 個別のサービスインスタンスに対するリアルタイムメトリック |
| 集約モニタリング | すべてのノードにわたるメトリックを統合したクラスター全体のビュー |
| 履歴データ照会 | 過去のトラフィックデータを保存し、後続の分析に活用可能 |
参考文献
Sentinel — トラフィック保護の基盤となるオープンソースフレームワーク。