HTTP リクエストのホットパラメーター スロットリングルールは、Web サービスを提供するアプリケーションへの受信リクエスト内の個々のパラメータに、きめ細かいスロットリングを適用します。Servlet コンテナー、Spring Web、Spring Boot などの主要な Web フレームワークを使用するアプリケーションの場合、Microservices Engine (MSE) は API レベルでリクエストパラメータを解析します。これにより、リクエストのディメンションごとにリソースコールをスロットリングし、サービスとシステムの安定性を保護できます。このトピックでは、アプリケーションの HTTP リクエストに対してホットパラメーター スロットリングルールを設定する方法について説明します。
HTTP リクエストのホットパラメーター スロットリングルールは、以前は Web アプリケーション保護ルールとして知られていました。
背景情報
Web サービスのシナリオでは、リクエストの送信元 IP アドレスやリクエストパラメータなどのディメンションによるリソースコールのスロットリング保護は、API レベルのスロットリングとデグレデーションを補完し、アプリケーションの期待どおりの動作を維持するのに役立ちます。たとえば、高トラフィックの Web シナリオでは、現在の API だけでなく、アクセス頻度が最も高い送信元 IP アドレスや、アクセス頻度が最も高い製品 ID も制限する必要がある場合があります。以下に、このようなケースの例を示します。
一定期間内に最も頻繁に購入される製品 ID を制限し、データベースに大量のリクエストが送信されることによるキャッシュペネトレーションを防ぎます。
一定期間内に大量のリクエストを送信する送信元 IP アドレスを制限し、偽の情報を送信する不正な大量リクエストを防ぎます。
注意事項
HTTP リクエストのホットパラメーター スロットリングルールを設定する前に、以下の動作と制限を確認してください。
クライアント IP の解決:パラメーターのプロパティ を [クライアント IP] に設定し、リクエストがプロキシを通過する場合、MSE はまず
X-Forwarded-Forリクエストヘッダーから IP アドレスの取得を試みます。そのヘッダーに IP アドレスが含まれている場合、MSE はそれを実際のクライアント IP アドレスとして使用します。スロットリングされたリクエストへのレスポンス:拒否されたリクエストは、動作管理で設定されたカスタムメッセージを返します。カスタムメッセージが設定されていない場合、デフォルトの動作が適用されます。つまり、HTTP 429 エラーコードとデフォルトのテキストメッセージが返されます。
キューイングのしきい値上限:処理待ち を使用する場合、QPS を 1,000 (リクエスト間隔 1 ms) より大きい値に設定しないでください。
操作手順
MSE コンソールにログインし、上部のナビゲーションバーでリージョンを選択します。
左側のナビゲーションウィンドウで、マイクロサービス管理センター > アプリケーション管理 を選択します。
アプリケーション一覧 ページで、目的のアプリケーションのリソースカードをクリックします。
アプリケーションに移動した後、左側メニューで API の詳細 を選択し、ホットスポットパラメーター保護 (HTTP リクエスト) タブをクリックしてから、新規作成 をクリックします。
ホットスポットパラメーター保護 (HTTP リクエスト) ダイアログボックスで、ルール情報を設定し、新規作成 をクリックします。
ルール情報は、「パラメータ」の説明に基づいて設定します。
ルールリストで、作成したルールを選択し、ステータス 列の 有効化 をクリックします。
ヒント ダイアログボックスで、OK をクリックして、設定した保護ルールを有効にします。
パラメータ
次の表に、ホットスポットパラメーター保護 (HTTP リクエスト) ダイアログボックスのパラメータを示します。説明のない行は、その後にリストされているパラメータを含む設定ステップまたはダイアログボックスのセクションを示します。クライアント IP 解決ルール、スロットリングされたリクエストに返されるレスポンス、およびキューイングのしきい値上限については、「注意事項」をご参照ください。シナリオと値のセットをマッピングする例については、「ユースケース」をご参照ください。
| パラメータ | 説明 |
| [保護ルールの設定] | |
| パラメーターのプロパティ | 選択した API のパラメータープロパティに基づいてスロットリングを適用します。サポートされているプロパティについては、「パラメータープロパティの値」をご参照ください。 |
| (オプション) [マッチパターン] と [一致文字列] | パラメーターのプロパティ を [Header] または URL パラメーター に設定した場合に利用可能です。プロパティ値の一致 スイッチをオンにして、一致パターン と マッチング文字列 を指定します。サポートされているパターンについては、「マッチパターン」をご参照ください。 |
| しきい値タイプ | デフォルト値は リクエスト数 です。 |
| しきい値設定 | [分]API のスロットリングをトリガーする統計オブジェクトの QPS しきい値。しきい値を設定する際に、統計期間を選択します。秒、分、時、日がサポートされています。たとえば、しきい値を 10 に設定し、統計期間として を選択した場合、1 分あたり 10 件を超えるリクエストは許可されません。 |
| 詳細オプション | |
| スロットル方式 | スロットリングされたトラフィックの処理方法を指定します。サポートされている方法については、「フロー制御方法」をご参照ください。 |
| [バーストサイズ] | スロットル方式 を フェイルファスト に設定した場合、トラフィックの急増時に許可される追加リクエスト数であるバーストサイズを指定できます。 |
| Timeout time | スロットル方式 を 処理待ち に設定した場合、タイムアウトをミリ秒 (ms) 単位で指定する必要があります。たとえば、QPS が 5 の場合、200 ms ごとに 1 つのリクエストのみが通過し、超過したリクエストはキューに入れられます。タイムアウトは最大キューイング時間です。最大キューイング時間を超えたリクエストは拒否されます。 |
| 有効化 | [Enabled]:HTTP リクエストのホットパラメーター スロットリングルールは作成されるとすぐに有効になります。[Disabled]:ルールは作成後、有効になりません。 |
| [防御動作の構成] | |
| 動作の関連付け | ルールのスロットリング後の動作を指定します。利用可能なオプションについては、「関連付け動作のオプション」をご参照ください。 |
パラメータープロパティの値
パラメーターのプロパティ でサポートされている値は次のとおりです。
[クライアント IP]:リクエストを送信するクライアントの IP アドレス。
[リモートホスト]:リクエストを送信するクライアントの Host ヘッダー。
[Header]:指定された HTTP ヘッダーに基づいてスロットリングを行います。特定のヘッダーキーを入力すると、ルールはそのヘッダーキーに紐づくホットバリューを個別に制限します。[Header] を選択した後、リクエスト属性値のマッチングポリシーを設定できます。パターンに一致する属性値のみがカウントされ、スロットリングされます。
URL パラメーター:指定された HTTP リクエストパラメータに基づいてスロットリングを行います。対応するパラメータ名を入力する必要があります。URL パラメーター を選択した後、リクエスト属性値のマッチングポリシーを設定できます。パターンに一致する属性値のみがカウントされ、スロットリングされます。
マッチパターン
一致パターン の有効な値は次のとおりです。
正確:指定された一致文字列と厳密に一致する値を照合します。
[Substring]:リクエスト属性値に部分文字列が含まれている場合に一致します。たとえば、部分文字列が
abの場合、abaとcabcは両方とも一致しますが、cbaは一致しません。正規表現:指定された正規表現で値を照合します。
フロー制御方法
スロットル方式 でサポートされている値は次のとおりです。
フェイルファスト:しきい値タイプが QPS の場合、スロットリングされたトラフィックはフェイルファストします。つまり、しきい値に達するとリクエストは即座に拒否されます。
処理待ち:しきい値タイプが QPS の場合、スロットリングされたリクエストは一定のレートで通過し、キューイングが許可されます。タイムアウトを指定する必要があります。タイムアウトに達すると予想されるリクエストは、キューに入らずに即座に拒否されます。たとえば、QPS が 10 の場合、100 ms ごとに 1 つのリクエストのみが通過し、超過したリクエストはキューに入れられます。タイムアウトは最大キューイング時間です。最大キューイング時間を超えたリクエストは拒否されます。
関連付け動作のオプション
動作の関連付け でサポートされている値は次のとおりです。
デフォルトの動作:デフォルトのオプションです。スロットリング後の動作をカスタマイズする必要がない場合は、デフォルトの動作を使用します。
動作の追加:カスタムのスロットリング後動作を追加します。動作を作成すると、動作の関連付け ドロップダウンリストから選択できるようになります。
ユースケース
以下の各例は、シナリオと、そのシナリオで ホットスポットパラメーター保護 (HTTP リクエスト) ダイアログボックスで必要となるパラメータ値のマッピングを示しています。例に記載されていないパラメータ (有効化 など) は、「パラメータ」の説明に従って設定してください。
人気商品のタイムセール
タイムセールなどのシナリオでは、トラフィックが集中するとシステムのレスポンスが遅くなったり、クラッシュしたりする可能性があります。システムの安定性を維持するには、HTTP リクエストのホットパラメーター スロットリングルールを設定します。指定されたしきい値を超えると、システムは人気商品に対する超過トラフィックを拒否します。
たとえば、個々の人気商品 ID ごとに 1 秒あたり最大 100 件の注文リクエストを許可し、その商品に対する超過したすべての注文リクエストを拒否するには、次のパラメータを設定します。
パラメーターのプロパティ を URL パラメーター に設定します。
URL パラメーター名 に
stockIdを入力します。しきい値設定 を 100 リクエスト/Second に設定します。
スロットル方式 を フェイルファスト に設定します。
パラメーターのプロパティ には、現在の人気商品の ID を含むパラメータフィールドを選択します。この例では、URL パラメータに、リクエストされた商品 ID を含む stockId フィールドが含まれています。
プロモーション中の不正な大量リクエスト
プロモーション期間中、大量の不正な大量リクエストによって商品在庫やサーバーリソースが消費される可能性があります。この場合、リクエストの送信元 IP アドレスに 処理待ち を適用して、リクエストが一定のレートで通過するようにし、過剰なリクエストがサービスの安定性に影響を与えないようにします。
たとえば、次のパラメータを設定します。各送信元 IP アドレスからこの API に送信されるリクエストは、10 ms ごとに 1 リクエスト (1 秒/100 = 10 ms) の一定のレートで通過し、超過したリクエストはキューに入れられます。キューに入れられたリクエストが 30 ms を超えて待機すると、即座に拒否されます。
パラメーターのプロパティ を [クライアント IP] に設定します。
しきい値タイプ はデフォルト値の リクエスト数 のままにします。
しきい値設定 を 100 リクエスト/Second に設定します。
スロットル方式 を 処理待ち に設定します。
Timeout time に 30 を入力します。
有効化 を [Enabled] に設定します。