このトピックでは、オンデマンド関数インスタンスの最大数を設定するための背景情報、シナリオ、使用制限、および手順について説明します。 このトピックでは、1秒あたりのトランザクション数 (TPS) の計算方法についても説明します。
背景情報
過剰な呼び出しによる予期しない課金を防ぐために、Alibaba Cloudアカウント内の各リージョンのオンデマンドインスタンスの最大数を設定できます。 この制限はすべての機能に適用されます。 たとえば、アカウント164901546557 **** では、特定のリージョンに最大300個のオンデマンドインスタンスを含めることができます。 アカウントには、function-a、function-b、function-cの3つの関数があります。 この場合、リクエストを同時に処理するオンデマンドインスタンスの最大数は300です。
Function Computeでは、function Computeコンソールで、またはAPI操作を呼び出して、単一の関数のオンデマンドインスタンスの最大数を設定することもできます。 これにより、過剰な呼び出しによって多数のインスタンスが1つの関数によって占有されるのを防ぎ、バックエンドリソースを保護し、予期しない課金を防ぎます。 たとえば、アカウント164901546557 **** には、function-a、function-b、function-cの3つの関数があります。 関数aに最大10個のオンデマンドインスタンスを設定できます。 この場合、関数aを呼び出すときに、最大10個のインスタンスを使用してリクエストを処理できます。
シナリオ
- 関数の同時実行を確認します。
たとえば、function-aとfunction-bはアカウント内のインスタンスの最大数を共有し、function-aは重要なビジネス関数です。 関数bが過度に呼び出されると、関数aの通常の要求が影響を受ける可能性があります。 この場合、関数bのオンデマンドインスタンスの最大数を設定して、過剰なインスタンスの消費を防ぐことができます。
- ダウンストリームサービスを保護します。
たとえば、Function ComputeがApsaraDB RDSに対して多数のアクセス要求を行った場合、ApsaraDB RDSにアクセスするために呼び出される関数のオンデマンドインスタンスの最大数を設定できます。 これにより、ApsaraDB RDSは、処理能力を超えるリクエストへの応答を停止します。
- 異常な関数呼び出しを終了します。
関数の呼び出しが異常な場合は、関数のオンデマンドインスタンスの最大数を0に設定することで、関数の呼び出しを終了できます。
- 予期しない関数の呼び出しを防ぎます。
関数のオンデマンドインスタンスの最大数を設定して、ブラウザまたはクライアントによる予期しない呼び出しを防ぐことができます。
- プロビジョニング済みインスタンスで使用します。
オンデマンドインスタンスの最大数と、1つの関数のプロビジョニング済みインスタンスの数を設定できます。 このように、関数呼び出し要求は、プロビジョニングされたインスタンスによってのみ、オンデマンドインスタンスによってのみ、またはプロビジョニングされたインスタンスとオンデマンドインスタンスの組み合わせによってのみ処理することができます。
オンデマンドインスタンスの制限を設定した後のリクエスト処理方法
データ型 | リクエスト処理方法 |
同期呼び出し | 必要なオンデマンドインスタンスの数が指定された制限を超えると、超過したリクエストは拒否され、ResourceExhausted エラーが返されます。 |
非同期呼び出し | 必要なオンデマンドインスタンスの数が指定された制限を超えると、リクエストは拒否されませんが、キューに入れられ、フルロードモードで処理されます。 |
詳細については、「関数の呼び出し」のトピックをご参照ください。
オンデマンドインスタンスとプロビジョニング済みインスタンスを組み合わせて使用する
関数にインスタンスがプロビジョニングされている場合、プロビジョニングされたインスタンスが最初に使用されます。 プロビジョニングされたすべてのインスタンスがリクエストを処理している場合、新しいリクエストはオンデマンドインスタンスによって処理されます。 次の表に、オンデマンドインスタンスとプロビジョニングインスタンスを組み合わせて使用する方法を示します。
オンデマンドインスタンスの制限 | プロビジョニング済みインスタンスの制限 | インスタンス使用率 |
0 | 10 | 最大10個のプロビジョニング済みインスタンスを使用でき、オンデマンドインスタンスは使用できません。 プロビジョニングされたインスタンスが同時リクエストを処理するには不十分な場合、新しいリクエストが抑制され、エラー429が返されます。 |
20 | 0 | 最大20個のオンデマンドインスタンスを使用でき、プロビジョニングされたインスタンスは使用できません。 |
50 | 30 | 30個のプロビジョニング済みインスタンスすべてを使用した後、最大50個のオンデマンドインスタンスを使用できます。 最大80個のインスタンスを使用できます。 |
使用上の注意
- 各リージョンのアカウント内の関数に対して、最大100個のインスタンス制限ルールを設定できます。 ルールに設定されているインスタンスの最大数は300を超えることはできません。 アカウントの制限は300です。
- 関数のインスタンス制限ルールは、エイリアスまたは関数の最新バージョンに適用する必要があります。 関数のエイリアスごとに異なる制限を設定できます。
TPSを計算する
TPSは、関数が1秒あたりに処理できるリクエストの数を示します。 TPSとビジネス要件に基づいて、オンデマンドインスタンスの最大数を設定できます。
TPS計算式: TPS = 1/DurationInSecond × InstanceConcurrency × MaxInstances
次の例では、リクエストの処理に0.1秒かかり、最大5つのインスタンスを使用して関数を実行できます。 インスタンスが最大2つのリクエストを同時に処理できる場合 (InstanceConcurrency = 2) 、5つのインスタンスは1秒あたり100 (1/0 × 2 × 5) のリクエストを処理できます (TPS = 100) 。
関連ドキュメント
オンデマンドインスタンスの管理方法の詳細については、「プロビジョニングされたインスタンスと自動スケーリングルールの設定」をご参照ください。