タイムセール中の人気プロダクト ID や、単一 IP による API へのフラッディングなど、少数のパラメーター値にトラフィックが偏る場合、Microservices Engine (MSE) はパラメーターレベルでリクエストをスロットリングできます。MSE は、受信した各 HTTP リクエストを解析し、一意のパラメーター値ごとの頻度を追跡し、しきい値を超えた値のみをスロットリングします。その他の値は通常どおり処理され続けます。
HTTP リクエストに対するホットパラメーターの速度制限ルールは、以前は Web アプリケーション保護ルールとして知られていました。
仕組み
MSE は、各 HTTP リクエストのパラメーターを検査し、値ごとのカウンターを維持します。特定の値のリクエストレートが設定されたしきい値を超えると、MSE はその値にのみフロー制御メソッド (即時拒否またはキューイング) を適用します。
サポートされているフレームワーク:Servlet コンテナ、Spring Web、および Spring Boot。
速度制限のディメンション:
| ディメンション | MSE が追跡する内容 |
|---|---|
| クライアント IP | 各リクエストの送信元 IP アドレス。リクエストがプロキシを通過する場合、MSE は最初に X-Forwarded-For ヘッダーを読み取ります。 |
| リモートホスト | 各リクエストのホスト名。 |
| ヘッダー | 特定の HTTP ヘッダー値。このオプションを選択した後、ヘッダー名を指定します。値のマッチングをサポートします。 |
| URL パラメーター | 特定の URL パラメーター値。このオプションを選択した後、パラメーター名を指定します。値のマッチングをサポートします。 |
一般的なシナリオ:
タイムセール保護:一部の人気商品に大量のトラフィックが集中した場合にキャッシュの機能停止を防ぐため、プロダクト ID ごとのリクエストを制限します。
サクラ注文対策:不正な一括アクセスパターンをブロックするため、IP アドレスごとのリクエストを制限します。
前提条件
開始する前に、以下を確認してください。
サポートされている Web フレームワーク (Servlet、Spring Web、または Spring Boot) 上で実行されている MSE で管理されるアプリケーションがあること
MSE コンソールへのアクセス権があること
速度制限の対象となる API エンドポイントが特定されていること
ルールの作成
MSE コンソールにログインし、上部のナビゲーションバーでリージョンを選択します。
左側のナビゲーションウィンドウで、マイクロサービスガバナンス > アプリケーションガバナンス を選択します。
アプリケーションリスト ページで、対象アプリケーションのリソースカードをクリックします。
左側のペインで API Details をクリックします。Hotspot Parameter Protection (HTTP Requests) タブで、Hotspot Parameter Protection (HTTP Requests) タブをクリックし、New をクリックします。
New ダイアログボックスで、ルールパラメーターを設定します。各パラメーターの詳細については、「パラメーターリファレンス」をご参照ください。
New をクリックします。
ルールリストでルールを見つけ、Status 列の 有効化 をクリックします。
Tips メッセージで OK をクリックします。
例:プロダクト ID によるタイムセールトラフィックの速度制限
タイムセール中、一部の人気プロダクト ID がシステムに過負荷をかけるほどのトラフィックを生成することがあります。ホットパラメーターの速度制限ルールは、これらのプロダクト ID への超過リクエストを拒否し、API の残りの部分の応答性を維持します。
目標:各プロダクト ID に対して、1 秒あたり最大 100 リクエストを許可します。超過したリクエストは即座に拒否します。
New ダイアログボックスで、以下の設定を行います。
| 設定 | 値 | 理由 |
|---|---|---|
| Parameter Properties | URL パラメーター | プロダクトを識別する URL パラメーターで速度制限を行うため |
| URL パラメーター名 | stockId | ご利用の API のプロダクト ID パラメーター |
| しきい値 | 100 リクエスト/秒 | 一意の stockId 値ごとの最大レート |
| フロー制御メソッド | Fast failure | 過剰なリクエストを即座に拒否し、キューへの登録の代わりにする |
結果:MSE は、一意の stockId 値ごとに 1 秒あたり最大 100 リクエストを処理します。ある stockId がこのしきい値を超えると、MSE は超過リクエストを即座に拒否し、Association Behavior で設定された応答を返します。カスタム応答が設定されていない場合は、デフォルトのテキストメッセージ付きの 429 ステータスコードが返されます。
Parameter Properties を、プロダクトを識別するパラメーターと一致するように設定します。例えば、ご利用の API で stockId がプロダクト ID パラメーターである場合、URL パラメーター を選択し、URL パラメーター名 フィールドに stockId と入力します。
例:不審な IP アドレスの速度制限
プロモーション中、単一の IP アドレスが大量のリクエストを送信して在庫を買い占めたり、サーバーリソースを枯渇させたりすることがあります。ホットパラメーターの速度制限ルールは、各 IP アドレスからの超過リクエストをキューに入れ、一定のレートで処理します。
目標:各 IP アドレスから 1 秒あたり 100 リクエストを許可します。超過したリクエストはキューに入れ、30 ミリ秒のタイムアウトで一定のレートで処理します。
New ダイアログボックスで、以下の設定を行います。
| 設定 | 値 | 理由 |
|---|---|---|
| Parameter Properties | クライアント IP | 送信元 IP アドレスで速度制限を行うため |
| しきい値タイプ | リクエスト数 (デフォルト) | リクエスト数をカウントする(他のメトリックではなく) |
| しきい値 | 100 リクエスト/秒 | 一意の IP アドレスごとの最大レート |
| フロー制御メソッド | Waiting in line | 超過リクエストを即座に拒否するのではなく、キューに入れるため |
| 有効期限 | 30 (ミリ秒) | リクエストがキューで待機できる最大時間 |
| Whether to open | オン | 作成直後にルールを有効化する |
結果:MSE は、各 IP アドレスから 10 ミリ秒ごとに 1 つのリクエスト (100 リクエスト/秒) を処理し、超過分をキューに入れます。キューに入れられたリクエストの待機時間が 30 ミリ秒を超えると予想される場合、そのリクエストは即座に拒否されます。
フロー制御メソッド を Waiting in line に設定する場合、QPS しきい値は 1,000 リクエスト/秒以下に設定してください。
パラメーターリファレンス
以下の表は、New ダイアログボックスのパラメーターについて説明しています。
保護ルールの設定
パラメータープロパティ
速度制限を行うリクエストのディメンション。以下のいずれかのオプションを選択します。
| オプション | 説明 |
|---|---|
| クライアント IP | クライアントの送信元 IP アドレス。リクエストがプロキシを通過する場合、MSE は最初に X-Forwarded-For ヘッダーを読み取り、それを実際のクライアント IP として使用します。 |
| リモートホスト | クライアントのホスト名。 |
| ヘッダー | 特定の HTTP ヘッダー値。このオプションを選択した後、ヘッダー名を指定します。値のマッチングをサポートします (下記参照)。 |
| URL パラメーター | 特定の URL パラメーター値。このオプションを選択した後、パラメーター名を指定します。値のマッチングをサポートします (下記参照)。 |
マッチパターンとマッチ文字列 (オプション)
Parameter Properties が ヘッダー または URL パラメーター に設定されている場合に使用できます。プロパティ値のマッチング をオンにすると、追跡および速度制限の対象となるパラメーター値をフィルターできます。
| マッチパターン | 動作 | 例 |
|---|---|---|
| 正確 | 完全な文字列一致。マッチ文字列と完全に一致する値のみが速度制限の対象となります。 | マッチ文字列 abc は abc のみに一致します。 |
| 部分文字列 | 値に指定された文字列が含まれている場合に一致します。 | 部分一致文字列 ab は aba と cabc には一致しますが、cba には一致しません。 |
| 通常 | 正規表現に基づいて値を照合します。 | パターン ^user_\d+$ は user_123 に一致します。 |
しきい値
| パラメーター | 説明 | デフォルト |
|---|---|---|
| しきい値タイプ | トラフィックを測定するために使用されるメトリック。 | リクエスト数 |
| しきい値 | 速度制限をトリガーする最大リクエストレート。数値と時間単位 (秒、分、時、日) を指定します。例えば、10 リクエスト/分 は、一意のパラメーター値ごとに 1 分あたり最大 10 リクエストを許可します。 | -- |
フロー制御
| パラメーター | 説明 | デフォルト |
|---|---|---|
| フロー制御メソッド | MSE が超過リクエストをどのように処理するか。詳細は下記をご参照ください。 | -- |
| バーストサイズ | トラフィックスパイクに対応するために、しきい値を超えて許可される追加リクエストの数。Fast failure でのみ使用可能です。 | -- |
| 有効期限 | キューの最大待機時間 (ミリ秒)。Waiting in line でのみ使用可能です。推定待機時間がこのタイムアウトを超えるリクエストは即座に拒否されます。 | -- |
| Whether to open | 作成後すぐにルールを有効にするかどうかを制御します。オン:即時有効になります。オフ:作成されますが、手動で有効化されるまで非アクティブです。 | オフ |
フロー制御メソッド のオプション:
Fast failure:超過リクエストを即座に拒否します。Configure Protection Behavior で設定されたカスタム応答、またはカスタム応答が設定されていない場合はデフォルトのテキストメッセージ付きの
429ステータスコードを返します。Waiting in line -- 過剰なリクエストをキューに格納し、一定のレートで処理します。MSE は、リクエストがキューに入った際に推定待ち時間を計算します。推定待ち時間が [有効期限] を超える場合、そのリクエストはキューに格納されずに拒否されます。たとえば、しきい値が 1 秒あたり 10 リクエストの場合、MSE は 100 ミリ秒ごとに 1 つのリクエストを処理し、残りのリクエストをキューに格納します。1 秒あたり 5 リクエストの場合、MSE は 200 ミリ秒ごとに 1 つのリクエストを処理します。
Waiting in line を使用する場合、QPS しきい値は 1,000 リクエスト/秒以下に設定してください。
保護動作の設定
| パラメーター | 説明 | デフォルト |
|---|---|---|
| Association Behavior | 速度制限されたクライアントに返される応答。Default Behavior:デフォルトのテキストメッセージ付きの 429 ステータスコードを返します。New behavior:カスタム応答を作成し、Association Behavior ドロップダウンリストから選択します。 | Default Behavior |