Function Computeは、インスタンス管理にオンデマンドモードとプロビジョニングモードの2つのモードを提供します。 2つのモードのインスタンスの総数とスケーリング速度の制限に基づいて、オートスケーリングルールを設定できます。 プロビジョニングモードのインスタンスでは、特定の時点で、または特定のメトリックに基づいて、スケーリング速度の制限を設定できます。
スケーリング制限の設定
オンデマンドインスタンスのスケーリング制限の設定
Function Computeは既存のインスタンスを優先的に使用してリクエストを処理します。 既存のインスタンスが完全にロードされた場合、Function Computeはリクエストを処理するための新しいインスタンスを作成します。 呼び出し回数が増えると、Function Computeは、リクエストを処理するのに十分なインスタンスが作成されるか、上限に達するまで、新しいインスタンスを作成し続けます。 インスタンスのスケールアウト時には、次の制限が適用されます。
デフォルトでは、リージョンごとに実行中のインスタンスの総数は300です。
実行中のインスタンスのスケールアウト速度は、バースト可能なインスタンスの上限とインスタンスの成長率によって制限されます。 異なるリージョンのスケールアウトの制限については、「プロビジョニング済みインスタンスと自動スケーリングルールの設定」トピックの「異なるリージョンのインスタンスのスケーリング速度の制限」をご参照ください。
バースト可能インスタンス: すぐに作成できるインスタンスの数。 バースト可能インスタンスのデフォルトの上限は、リージョンに基づいて100または300されます。
インスタンスの増加率: バースト可能インスタンスの上限に達した後、1分あたりに追加できるインスタンスの数。 成長率のデフォルトの上限は、地域に基づいて100または300です。
インスタンスの総数またはインスタンスのスケールアウト速度が制限を超えると、Function Computeはスロットリングエラーを返します。HTTPステータスコード
は429
です。 次の図は、呼び出し回数が急増するシナリオでFunction Computeがスロットリングを実行する方法を示しています。
1: バースト可能インスタンスの上限に達する前に、Function Computeはリクエスト数が増加するとすぐにインスタンスを作成します。 このプロセス中、コールドスタートが発生しますが、スロットリングエラーは報告されません。
2: バースト可能インスタンスの制限に達すると、インスタンスの増加は成長率によって制限されます。 一部のリクエストでは、スロットルエラーが報告されます。
3: インスタンスの上限に達すると、一部のリクエストが抑制されます。
デフォルトでは、上記のスケーリング制限は、同じリージョンのAlibaba Cloudアカウント内のすべての機能に対して有効になります。 特定の機能のインスタンス数の制限を設定するには、「オンデマンドインスタンスの最大数の設定の概要」をご参照ください。 オンデマンドインスタンスの最大数が指定された後、Function Computeは、関数の実行中インスタンスの総数が指定された制限を超えると、スロットリングエラーを返します。
プロビジョニング済みインスタンスのスケーリング制限の設定
バースト可能な呼び出しの数が多い場合、多数のインスタンスの作成が抑制され、リクエストの失敗が発生します。 インスタンスのコールドスタートは、リクエストのレイテンシーも増加させます。 これらの問題を防ぐために、Function Computeでプロビジョニングされたインスタンスを使用できます。 プロビジョニングされたインスタンスは、呼び出し前に予約されたインスタンスです。 プロビジョニングされたインスタンスの数の上限と、プロビジョニングされたインスタンスのスケーリング速度は、オンデマンドインスタンスの制限とは無関係です。
デフォルトでは、リージョンごとにプロビジョニングされるインスタンスの上限は300です。
デフォルトでは、プロビジョニングされたインスタンスの1分あたりのスケーリング速度の上限は100または300です。 制限は地域によって異なります。 詳細については、「プロビジョニング済みインスタンスと自動スケーリングルールの設定」トピックの「異なるリージョンでのインスタンスのスケーリング速度の制限」をご参照ください。 次の図は、前の図と同じロードシナリオでプロビジョニングされたインスタンスが構成されている場合に、Function Computeがスロットリングを実行する方法を示しています。
1: プロビジョニングされたすべてのインスタンスが使用される前に、リクエストは直ちに処理されます。 このプロセス中、コールドスタートは発生せず、スロットリングエラーは報告されません。
2: プロビジョニングされたすべてのインスタンスが使用されると、Function Computeはバースト可能インスタンスの上限に達する直前にインスタンスを作成します。 このプロセス中、コールドスタートが発生しますが、スロットリングエラーは報告されません。
異なるリージョンでのインスタンスのスケーリング速度の制限
リージョン | バースト可能インスタンスの制限 | インスタンスの成長率の制限 |
中国 (杭州) 、中国 (上海) 、中国 (北京) 、中国 (張家口) 、中国 (深セン) | 300 | 1分あたりの300 |
その他 | 100 | 100/ 分 |
同じリージョン内のプロビジョニング済みインスタンスとオンデマンドインスタンスのスケーリング速度制限は同じです。
より高速なスケーリングが必要な場合は、DingTalkグループ (ID: 11721331) に参加してテクニカルサポートに連絡してください。
GPU高速化インスタンスのスケーリング速度は、エラスティックインスタンスのスケーリング速度よりも遅くなります。 GPUアクセラレーションインスタンスをプロビジョニングモードで使用することを推奨します。
自動スケーリングルールの設定
スケーリングルールの作成
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスと機能] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。 [サービス] ページで、目的のサービスをクリックします。
[関数] ページで、変更する関数をクリックします。
[関数の詳細] ページで、[スケーリングポリシー] タブをクリックし、[ルールの作成] をクリックします。
表示されるページで、次のパラメーターを設定し、[作成] をクリックします。
オンデマンドインスタンスのスケーリングルールの設定
[最小インスタンス数] パラメーターを0に設定し、[最大インスタンス数] パラメーターをビジネス要件に最適な値に設定します。 [最大インスタンス数] パラメーターを設定しない場合、インスタンスの最大数は、Alibaba Cloudアカウントおよび現在のリージョンのインスタンスの制限の対象となります。
説明プロビジョニングされたインスタンスでは、[アイドルモード] 、[スケジュール設定変更] 、および [メトリックベースの設定変更] パラメーターが有効になります。
プロビジョニング済みインスタンスのスケーリングルールの設定
パラメーター
説明
基本設定
バージョンまたはエイリアス
作成するプロビジョニング済みインスタンスのバージョンまたはエイリアスを選択します。
説明LATESTバージョンは、プロビジョニングされたインスタンスに対してのみ作成できます。
最小インスタンス数
作成するプロビジョニング済みインスタンスの数を入力します。 インスタンスの最小数は、作成するプロビジョニング済みインスタンスの数と同じです。
説明関数インスタンスの最小数を設定して、コールドスタートと関数呼び出し要求に応答する時間を減らすことができます。 これにより、応答遅延に敏感なオンラインアプリケーションのサービスパフォーマンスが向上します。
アイドルモード
ビジネス要件に基づいてアイドルモードを有効または無効にします。 デフォルトでは、アイドルモードは無効になっています。 以下の点にご注意ください。
このモードを有効にすると、インスタンスがリクエストを処理している場合にのみ、プロビジョニングされたインスタンスにvCPUリソースが割り当てられます。 インスタンスがリクエストを処理していない場合、インスタンスのvCPUリソースは凍結されます。
アイドルモード機能が有効になっている場合、Function Computeは、インスタンスが完全にロードされるまで、関数のインスタンスごとの同時実行設定に基づいて、同じインスタンスにリクエストを優先的に配信します。 たとえば、関数のインスタンスごとの同時実行性を50に設定し、10個のアイドルプロビジョニングインスタンスがある場合、40個のリクエストを受信すると、function Computeは40個のリクエストすべてを1つのインスタンスに送信し、1つのインスタンスのみがアクティブ状態になります。
このモードを無効にすると、インスタンスがリクエストを処理しているかどうかに関係なく、プロビジョニングされたインスタンスにvCPUが割り当てられます。
最大インスタンス数
インスタンスの最大数を入力します。 インスタンスの最大数は、プロビジョニングされたインスタンスの数にオンデマンドインスタンスの最大数を加えたものに等しくなります。
説明関数インスタンスの最大数を設定すると、1つの関数が過剰な呼び出しによる多数のインスタンスを使用しないようにし、バックエンドリソースを保護し、予期しないコストを防ぐことができます。
このパラメーターを設定しない場合、インスタンスの最大数はAlibaba Cloudアカウントと現在のリージョンの上限に従います。
(オプション) スケジュール設定の変更: スケジュールされたスケーリングルールを作成して、プロビジョニングされたインスタンスを柔軟に設定できます。 プロビジョニングされたインスタンスの数を、スケジュールされた時点で指定された値に自動的に調整するように設定できます。 これにより、プロビジョニングされたインスタンスの数は、ビジネスの同時実行要件を満たすことができます。 設定の原則と例の詳細については、「スケジュール設定の変更」をご参照ください。
ポリシー名
ポリシー名を入力してください。
最小インスタンス数
プロビジョニングされたインスタンスの最小数を入力します。
スケジュール式 (UTC)
スケジュールの式を入力します。 例: cron(0 0 20 * * *) 。 詳細については、「パラメーター」をご参照ください。
有効時間 (UTC)
スケジュールされたスケーリングの設定が有効になり、有効期限が切れる時刻を指定します。
(オプション) メトリックベースの設定の変更: プロビジョニングされたインスタンスは、インスタンスのメトリックまたはプロビジョニングされたインスタンスの同時使用率に基づいて、1分ごとにスケールインまたはスケールアウトされます。 設定の原則と例の詳細については、表1をご参照ください。 フィールドの説明
ポリシー名
ポリシー名を入力してください。
インスタンスの最小範囲
プロビジョニングされたインスタンスの最小数の値の範囲を指定します。
利用タイプ
このパラメーターは、GPUアクセラレーションインスタンスが設定されている場合にのみ表示されます。 自動スケーリングポリシーの設定に基づくメトリックの種類を選択します。 GPUアクセラレーションインスタンスの自動スケーリングポリシーの詳細については、「プロビジョニングされたGPUアクセラレーションインスタンスの自動スケーリングポリシーの作成」をご参照ください。
同時実行使用のしきい値
スケーリングをトリガーするしきい値を設定します。 メトリックの値がである場合、またはプロビジョニングされたインスタンスの同時使用率が指定された値より低い場合、スケールインが実行されます。 メトリックの値が、またはプロビジョニングされたインスタンスの同時使用率が指定された値より高い場合、スケールアウトが実行されます。
有効時間 (UTC)
メトリックベースの自動スケーリングの設定が有効になり、有効期限が切れる時刻を指定します。
オートスケーリングルールが作成されたら、関数の [auto scaling] タブに移動し、ルールの詳細を表示できます。
自動スケーリングルールの変更または削除
[Auto Scaling] タブで、作成したルールを表示できます。 管理するルールを見つけ、[操作] 列の [変更] または [削除] をクリックして、ルールを変更または削除します。
プロビジョニングされたインスタンスを削除するには、[最小インスタンス数] パラメーターを0に設定します。
プロビジョニング済みインスタンスのスケーリングポリシー
プロビジョニングされたモードでは、Function Computeは指定された数のインスタンスを作成しますが、インスタンスが完全に使用されない場合があります。 スケジュール設定変更とメトリックベースの設定変更を使用して、プロビジョニングされたインスタンスをより有効に活用できます。
スケジュール設定の変更
定義: スケジューリングされたスケーリングは、プロビジョニングされたインスタンスを柔軟に設定できます。 インスタンスの数がビジネスの同時実行要件を満たすように、プロビジョニングされたインスタンスの数を指定された時点で指定された値に自動的に調整するように設定できます。
適用可能なシナリオ: 関数は、周期的なルールまたは予測可能なトラフィックピークに基づいて機能します。 プロビジョニングされたインスタンスがすべての関数呼び出し要求を処理するには不十分な場合、残りの要求はオンデマンドインスタンスによって処理されます。 詳細については、「インスタンスタイプとインスタンスモード」トピックの「オンデマンドモード」セクションをご参照ください。
例: 次の図は、インスタンスのスケーリングの2つのスケジュールアクションを示しています。 最初のスケジュールされたアクションは、トラフィックピークの前にプロビジョニングされたインスタンスをスケールアウトし、2番目のスケジュールされたアクションは、トラフィックピークの後にプロビジョニングされたインスタンスをスケールアウトします。
次のサンプルコードは、設定の詳細を示しています。 この例では、service_1という名前のサービスのfunction_1という名前の関数は、自動的にスケールインおよびスケールアウトするように構成されています。 設定は、2022年11月1日の10:00:00から2022年11月30日の10:00:00まで有効になります。 プロビジョニングされたインスタンスの数は、毎日20:00に50、22:00に10に調整されます。 PutProvisionConfig操作を使用してスケジュールされたスケーリングを設定する方法の詳細については、リクエストパラメーターを設定する次のサンプルコードを参照してください。
{
"ServiceName": "service_1",
"FunctionName": "function_1",
"Qualifier": "alias_1",
"ScheduledActions": [
{
"Name": "action_1",
"StartTime": "2022-11-01T10:00:00Z",
"EndTime": "2022-11-30T10:00:00Z",
"TargetValue": 50,
"ScheduleExpression": "cron(0 0 20 * * *)"
},
{
"Name": "action_2",
"StartTime": "2022-11-01T10:00:00Z",
"EndTime": "2022-11-30T10:00:00Z",
"TargetValue": 10,
"ScheduleExpression": "cron(0 0 22 * * *)"
}
]
}
パラメータ説明
パラメーター | 説明 |
名前 | スケジュールされたスケーリングタスクの名前。 |
StartTime | 設定が有効になり始める時刻。 値をUTCで指定します。 |
EndTime | 設定の有効期限が切れる時刻。 値をUTCで指定します。 |
ターゲット値 | スケールアウトまたはスケールインするインスタンスの数。 |
ScheduleExpression | スケジュールされたスケーリングタスクをいつ実行するかを指定する式。 次の形式がサポートされています。
|
次の表に、cron式のフィールドをSeconds Minutes Hours Day-of-month Day-of-weekの形式で示します。
表 1 フィールドの説明
フィールド | 値の範囲 | 許可された特殊文字 |
秒 | 0から59 | なし |
分 | 0から59 | , - * / |
時間 | 0から23 | , - * / |
月の日 | 1から31 | , - * ? / |
月 | 1〜12またはJAN〜DEC | , - * / |
曜日 | 1〜7またはMON〜SUN | , - * ? |
表 2. 特殊文字
キャラクター | 説明 | 例 |
* | anyまたはそれぞれを指定します。 |
|
, | 値リストを指定します。 |
|
- | 範囲を指定します。 |
|
? | 不確定な値を指定します。 | この特殊文字は、他の指定された値とともに使用されます。 たとえば、特定の日付を指定しても、指定した日付を特定の曜日にする必要がない場合は、 |
/ | 増分を指定します。 n/mは、nの位置から始まるmの増分を指定する。 |
|
メトリックベースの設定の変更
定義: メトリックベースの自動スケーリングは、メトリックを追跡して、プロビジョニングされたインスタンスを動的にスケーリングします。
シナリオ: Function Computeは、プロビジョニングされたインスタンスの同時使用率またはインスタンスのリソース使用率メトリックを定期的に収集し、これらのメトリックをスケーリング操作に指定したしきい値とともに使用して、プロビジョニングされたインスタンスのスケーリングを制御します。 これにより、プロビジョニングされたインスタンスの数をビジネス要件に合わせて調整できます。
原則: プロビジョニングされたインスタンスは、メトリック値に基づいて1分ごとにスケーリングされます。
メトリック値が設定したしきい値を超えると、システムは迅速にスケールアウト操作を実行して、プロビジョニングされたインスタンスの数を指定された値に調整します。
メトリック値が設定したしきい値より低い場合、システムはスケールイン操作をわずかに実行して、プロビジョニングされたインスタンスの数を指定された値に調整します。
プロビジョニングされたインスタンスの最大数と最小数が設定されている場合、システムはプロビジョニングされたインスタンスを最大数と最小数の間でスケーリングします。 インスタンス数が最大数または最小数に達すると、スケーリングは停止します。
サンプル設定: 次の図は、プロビジョニングされたインスタンスの同時実行使用率の例を示しています。
トラフィックが増加してしきい値に達すると、プロビジョニングされたインスタンスの数が上限に達するまで、プロビジョニングされたインスタンスのスケールアウトが開始されます。 プロビジョニングされたインスタンスで処理できないリクエストは、オンデマンドインスタンスに送信されます。
トラフィックが減少してしきい値に達すると、プロビジョニングされたインスタンスのスケールインが開始されます。
プロビジョニングされたインスタンスの同時使用率を計算するために、プロビジョニングされたインスタンスの統計のみが収集されます。 オンデマンドインスタンスの統計は含まれません。
プロビジョニングされたインスタンスの同時使用率は、次の式に基づいて計算されます。プロビジョニングされたインスタンスが応答する同時リクエストの数 /すべてのプロビジョニングされたインスタンスが応答できる同時リクエストの最大数。 同時実行の範囲は0から1です。
プロビジョニングされたインスタンスが応答できる同時リクエストの最大数は、さまざまなインスタンスの同時発生に基づいて計算されます。 詳細については、「インスタンス同時実行の設定」をご参照ください。
各インスタンスは一度に1つのリクエストを処理します。最大同時実行数=インスタンス数。
各インスタンスは複数のリクエストを同時に処理します。最大同時実行数=インスタンス数 × 1つのインスタンスによって同時に処理されるリクエスト数。
スケーリングのターゲット値:
値は、現在のメトリック値、メトリックターゲット、プロビジョニングされたインスタンスの数、およびスケールインファクタによって決定されます。
計算原理: システムは、スケールイン係数に基づいてプロビジョニングされたインスタンスをスケールインします。 係数の値は0 (除外) から1の範囲です。 スケールインファクタは、スケールイン速度を遅くするために使用されるシステムパラメータである。 スケールイン係数を設定する必要はありません。 スケーリング操作のターゲット値は、次の計算結果以上の最小の整数です。
スケールアウト目標値=現在のプロビジョニング済みインスタンス × (現在のメトリック値 /メトリック目標)
スケールイン目標値=現在のプロビジョニング済みインスタンス × スケールイン係数 × (1-現在のメトリック値 /メトリック目標)
例: 現在のメトリック値が80% 、メトリックターゲットが40% 、プロビジョニングされたインスタンスの数が100の場合、ターゲット値は次の式に基づいて計算されます。100 × (80%/40%) = 200。 プロビジョニングされたインスタンスの数を200に増やして、メトリックターゲットが40% の近くに留まるようにします。
次のサンプルコードは、設定の詳細を示しています。 この例では、service_1という名前のサービスのfunction_1という名前の関数は、ProvisionedConcurrencyUtilizationメトリックに基づいて自動的にスケールインおよびスケールアウトするように構成されています。 設定は、2022年11月1日の10:00:00から2022年11月30日の10:00:00まで有効に設定されています。 同時実行使用率が60% を超えると、プロビジョニングされたインスタンスはスケールアウトされ、プロビジョニングされたインスタンスの数は最大100になります。 同時実行使用率が60% より低い場合、プロビジョニングされたインスタンスがスケールインされ、プロビジョニングされたインスタンスの数を10に減らすことができます。 PutProvisionConfig操作を使用してスケジュールされたスケーリングを設定する方法の詳細については、リクエストパラメーターを設定する次のサンプルコードを参照してください。
{
"ServiceName": "service_1",
"FunctionName": "function_1",
"Qualifier": "alias_1",
"TargetTrackingPolicies": [
{
"Name": "action_1",
"StartTime": "2022-11-01T10:00:00Z",
"EndTime": "2022-11-30T10:00:00Z",
"MetricType": "ProvisionedConcurrencyUtilization",
"MetricTarget": 0.6,
"MinCapacity": 10,
"MaxCapacity": 100,
}
]
}
パラメータ説明
パラメーター | 説明 |
名前 | 設定されたメトリックベースのスケーリングの名前。 |
StartTime | 設定が有効になり始める時刻。 値をUTCで指定します。 |
EndTime | 設定の有効期限が切れる時刻。 値をUTCで指定します。 |
MetricType | 追跡されるメトリック。 パラメーターをProvisionedConcurrencyUtilizationに設定します。 |
MetricTarget | メトリックベースのスケーリングのしきい値。 |
MinCapacity | スケールアウト用にプロビジョニングされたインスタンスの最大数。 |
MaxCapacity | スケールイン用にプロビジョニングされたインスタンスの最小数。 |
参考資料
オンデマンドインスタンスとプロビジョニングされたインスタンスの基本概念と課金方法: インスタンスタイプと使用モード
プロビジョニング済みインスタンスの自動スケーリングを設定した後、関数によって実行されるプロビジョニング済みインスタンスの数を表示する場合は、[プロビジョニング済みインスタンスの数] メトリックを表示できます。 詳細については、「関数固有のメトリック」をご参照ください。