プラグインのキューイングについて
Kong プラグインの中には、キューを使用して、プロキシパス内のデータの生成と、そのデータのサーバー(ログサーバーなど)への送信を分離するものがあります。これにより、アップストリームサーバーが多数のプロキシリクエストを同時に受信することによる負荷がかかりません。
次のプラグインはキューイングを使用します。
このページでは、キューが必要な理由とプラグインのキューイングの仕組みについて説明します。
キューが必要な理由
HTTP LogやDatadogのような分析プラグインや監視プラグインは、Kong Gatewayによって処理されるリクエスト情報をアップストリームサーバーに送信する必要があります。
情報をキューに入れるのではなく、ログハンドラーからアップストリームのサーバーに直接送信することで、リクエストとレスポンスに遅延が発生するのを防ぐことができます。ただし、この方法では、 Kong Gateway負荷が高いときに大量のリクエストが作成され、ログ サーバーが過負荷になり、 Kong Gatewayを実行しているマシンがリクエストをプロキシする機能に悪影響を与える可能性があります。
これを解決するには、バッチリクエストを使用します。キューイングでは、リクエスト情報はアップストリームサーバーに送信される前に、構成可能なキューに挿入されます。このアプローチには、次の利点があります。
- アップストリームサーバーで発生する可能性のある同時実行を削減します
- ネットワークや管理の変更によるアップストリームサーバーの一時的な停止への対処に役立ちます
- 1回のリクエストでキューから複数のエントリを収集することで、Kong Gateway とアップストリームサーバーの両方のリソース使用量を減らすことができます
注: キューは Kong Gateway のコンポーネントの構造要素なので、各ワーカープロセスのメインメモリにのみ存在し、ワーカー間で共有されることはありません。そのため、停電や、メモリ不足やプログラムエラーによる予期しないワーカープロセスのシャットダウンなど、異常な動作状況では、キューに入っているコンテンツは保存されません。
プラグインのキューイングの仕組み
Kong Gateway特定のプラグインからのリクエストを処理するときに、リクエストをアップストリームサーバーに送信する前にキューイングを使用してリクエストをグループ化します。
図 1: プラグインからのリクエストが Kong Gateway に送信される例。
図2: プラグインリクエストがKong Gatewayに送信された後、キューがアップストリームサーバーに送信されます。
キューイングには、いくつかの異なる構成可能なパラメータを使用できます。次のセクションでは、プラグインキューイングのこれらの機能について詳しく説明します。
キュー容量制限
以前は、キューには容量制限がありませんでした。その結果、データが非常に高速で生成され、アップストリームサーバーが低速または使用できない場合、ワーカープロセスがすべての使用可能なメモリを使い果たしていました。
ここで、 max_entries
パラメータを使用して、いつでもキューに入れることができるエントリの最大数を構成できます。キューがキューイングの最大エントリ数に達した状態で、別のエントリがキューに投入されると、新しいエントリのためのスペースを確保するために、キュー内の最も古いエントリが削除されます。
キューコードは、容量のしきい値の 80% に達して、キューからエントリの削除を開始する時に、警告ログエントリを出力します。また、状況が正常化したときにもログエントリを書き込みます。
タイマー使用量の削減
バックグラウンドでキュー処理を開始するために使用されるタイマーは 1 つだけです。キューが空になると、タイマーハンドラは終了し、新しいエントリがキューにプッシュされるとすぐに新しいタイマーが作成されます。
シャットダウン時のキューフラッシュ
Kong Gatewayシャットダウンが開始されると、キューがフラッシュされます。これにより、新しいエントリが一括処理されるのを待っていても Kong Gateway をシャットダウンでき、上流のサーバーに確実にアクセスできるようになります。
再試行ロジック
キューの処理に失敗した場合、エラーが一時的なものであれば(たとえば、ネットワークの問題やアップストリームが使用できない場合)、キューライブラリは自動的に処理を再試行できます。再試行する前に、ライブラリは initial_retry_delay
パラメータで指定された時間だけ待機します。この待機時間は、再試行が失敗するたびに 2 倍になり、max_retry_time
パラメータで指定された最大待機時間に達するまで継続します。
詳細情報
プラグインキューイングのリファレンス - 設定できるプラグインキューイングパラメータの詳細をご覧ください。