非同期タスクを使用すると、ビジネスのステータスに関する情報をリアルタイムで取得し、機能の実行を管理できるため、アラート通知や自動再試行などの異常な状況をより適切に処理できます。 このトピックでは、Function Computeの非同期タスクのベストプラクティスについて説明します。
このタスクについて
202 HttpCode
はすぐに呼び出し元に返され、非同期で呼び出されたメッセージはバックエンドサービスによる処理のためにキューに入れられます。
シナリオ
一部のオンラインライブストリーミングシナリオでは、ビジネス開発のためにFaaSに徐々に移行しています。 このようなビジネスシナリオでは、実行期間が長く、関数の実行はレイテンシに敏感であり、高可用性が必要です。
開発者は、ビジネスのステータスに関する情報をリアルタイムで取得し、機能の実行を管理する必要があります。 非同期呼び出し中はレイテンシが鈍感であり、永続的な接続が不安定であり、同期呼び出し中はクライアントリソースが占有されるため、非同期呼び出しも同期呼び出しも実行できません。
トラフィックスパイクが発生した場合、同期呼び出しはオフラインビジネスの負荷をバランスさせ、ダウンストリームシステムのトラフィックをスムーズにバッファリングするのに役立ちます。
したがって、Function Computeは非同期タスクベースの非同期呼び出しを導入します。 非同期タスクは、次のビジネスシナリオに適しています。
- 実行は観察できます
- メッセージがキューから削除されたかどうか、関数の実行がトリガーされたかどうか、実行結果が
宛先
に送信されたかどうかなど、実行に関する情報をリアルタイムで表示します。 - ビジネスにはタスクプロパティがあります。
- 特定の実行ログとリアルタイム実行ログをトリガーするイベントを表示します。
- 実行の名前、時間、またはステータスに基づいて履歴レコードをクエリします。
- メッセージがキューから削除されたかどうか、関数の実行がトリガーされたかどうか、実行結果が
- 実行できる操作の実行
ビジネスにはタスクプロパティがあります。
- 場合によっては、実行時間が長い場合、関数の実行を停止します。
- 実行が失敗または成功した場合は、再度実行します。
非同期タスクの詳細については、「t2159491.html#task_2159491」をご参照ください。
例
次の例は、Serverless DevsとFunction Computeコンソールコンソールを使用して、宛先がMessage Notification Service (MNS)に設定されている非同期呼び出しを実行する方法を示しています。
非同期タスクを使用して、次の結果を取得できます。
- 関数の非同期実行が開始された後、Function Computeコンソールで実行ステータスを表示するか、Function Compute APIまたはSDKを呼び出して実行ステータスを表示できます。
- 関数の実行に失敗した場合、または関数の実行が停止した場合、Function Computeは非同期メッセージを指定されたMessage Notification Service (MNS)キューにプッシュして、デットレターキュー機能を使用します。 このようにして、メッセージに関する情報を取得し、後でメッセージを処理できます。
前提条件
- Serverless DevsとDockerのインストール
- Serverless Devsの設定
- MNSキューが作成されます。 詳細については、「t1835597.html#task106」をご参照ください。
- RAMロールが作成され、次のポリシーがRAMロールにアタッチされます。 AliyunFCDefaultRolePolicyポリシーをRAMロールにアタッチすることもできます。 詳細については、「信頼できるAlibaba CloudサービスのRAMロールの作成」をご参照ください。
{ "Version": "1", "Statement": [ { "Action": [ "fc:InvokeFunction" 、 "mns:SendMessage", "mns:PublishMessage" 、 "log:*" ], "Resource": "*", "Effect":"Allow" } ] }
手順
より多くの情報
- 非同期呼び出しの設定は、非同期呼び出しが実行された場合にのみ有効になります。 SDKまたはCLIを使用して、非同期呼び出しリクエストを送信できます。
この例では、サンプルプロジェクトのディレクトリで次のコマンドを実行して、非同期呼び出し要求を送信し、MNSキューを表示します。
invk main -t Async -s '{"failure":true}'
- Function Computeコンソールで非同期呼び出しを表示および管理できます。 詳細については、「t2203790.html#task_2203790」をご参照ください。
注 関数の実行ログなどの詳細情報を表示するには、関数のLog Serviceを設定する必要があります。 詳細については、「関数ログ」をご参照ください。
- 関数の実行後、宛先が設定されている場合は、宛先に移動してプッシュレコードを表示できます。
この例では、宛先が設定されている場合、次のコードに示すように、MNSコンソールで宛先にプッシュされたメッセージを受信できます。
{ "timestamp":xxxx、 "requestContext":{ "requestId":"xxxx" 、 "functionArn":"acs:fc::: サービス /Stateful-Invocation-demo.LATEST /関数 /メイン" 、 "condition":"UnhandledInvocationError" 、 "approximateInvokeCount":1 }, "requestPayload":"{\" failure\":true}" 、 "responseContext":{ "statusCode":200、 "functionError":"UnhandledInvocationError" }, "responsePayload":"{\" errorMessage\":\" リクエスト完了前にプロセスが予期せず終了しました (期間: 13689ms、maxMemoryUsage: 10.86MB)\"}" }
注 非同期呼び出しが失敗または終了した場合、Message Notification Service (MNS)でエラーに関する情報を受け取ることができます。