同時実行

Knative serving では、リビジョンのスケーリングが自動的に行われます。すべての受信リクエストを処理できるように、必要なコンテナ インスタンスの数が調整されます。

リクエストを処理するコンテナ インスタンスが増えると、CPU とメモリの使用量も増加し、コストも高くなります。新しいコンテナ インスタンスの起動が必要になると、リクエストの処理に時間がかかり、サービスのパフォーマンスが低下する可能性があります。

より細かく制御するために、Knative serving では、特定のコンテナ インスタンスで同時に処理できる最大リクエスト数を指定する同時実行を設定できます。

同時実行の値

デフォルトでは、Knative serving コンテナ インスタンスは同時に最大 80 件のリクエストを受信できます。Cloud Run 関数などの Functions-as-a-Service(FaaS)ソリューションの同時実行数は 1 に固定されています。

デフォルトの同時実行の値を使用する必要がありますが、必要に応じて最大同時実行数を減らすことができます。たとえば、コードで並行リクエストを処理できない場合は、同時実行を 1 に設定します。

指定された同時実行の値は最大値であり、インスタンスの CPU の使用率がすでに高い場合、Knative serving は特定のコンテナ インスタンスにそれほど多くのリクエストを送信しません。

次の図は、同時実行の受信リクエストの処理に必要なコンテナ インスタンスの数に、同時実行の設定がどのように影響するかを示しています。

同時実行の図

同時実行を 1 つのリクエストに制限する場合

実行中のコンテナ インスタンスに同時に 1 つのリクエストしか送信されないように、同時実行を制限することもできます。次のような場合には、この設定を検討する必要があります。

  • 1 つのリクエストで利用可能な CPU またはメモリのほとんどを使用する場合。
  • たとえば、コンテナが 2 つのリクエストを共有できないグローバルな状態に依存している場合。コンテナ イメージは複数のリクエストを同時に処理するように設計されていません。

受信リクエストが急増したときに多くのコンテナ インスタンスを起動する必要があるため、同時実行を 1 に設定するとスケーリングのパフォーマンスが低下する可能性があります。

事例紹介

次の指標は、最大同時実行数が 1 に設定された Knative serving サービスに対して、400 のクライアントが 1 秒あたり 3 件のリクエストを行うユースケースを示しています。上の緑の線は時間の経過に伴うリクエスト数を示し、下の青い線はリクエストの処理を開始したコンテナ インスタンスの数を示しています。

同時実行を 1 に設定

次の指標は、最大同時実行数が 80 に設定された Knative serving サービスに対して、400 のクライアントが 1 秒あたり 3 件のリクエストを行うユースケースを示しています。上の緑の線は時間の経過に伴うリクエスト数を示し、下の青い線はリクエストの処理を開始したコンテナ インスタンスの数を示しています。同じリクエスト量を処理するために必要なインスタンスが、はるかに少ないことに注意してください。

同時実行を 80 に設定

次のステップ

Knative serving サービスの同時実行を管理する方法については、同時実行の設定をご覧ください。

同時実行の設定を最適化する方法については、同時実行を調整する際のヒントをご覧ください。