非同期タスクを使用すると、ビジネスのステータスに関する情報をリアルタイムで取得し、機能の実行を管理できるため、アラート通知や自動再試行などの異常な状況をより適切に処理できます。 このトピックでは、Function Computeの非同期タスクのベストプラクティスについて説明します。

このタスクについて

Function as a service (FaaS) は、APIバックエンドサービス、画像処理、ストリーム処理など、初期段階でステートレス、短期、軽量のコンピューティングをサポートしています。 FaaS関数は、さまざまなシナリオで非同期または同期的に呼び出すことができます。 関数が同期して呼び出されると、関数は直ちに実行されます。 関数が非同期で呼び出されると、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)キューにプッシュして、デットレターキュー機能を使用します。 このようにして、メッセージに関する情報を取得し、後でメッセージを処理できます。

前提条件

手順

  1. 次のコマンドを実行して、プロジェクトを複製します。
    git clone https://github.com/awesome-fc/Stateful-Async-Invocation.git
  2. 次のコマンドを実行して、プロジェクトディレクトリに移動します。
    cdステートフル-非同期-呼び出し
  3. s.yamlファイルを変更します。
    最初の {please_replace_me} パラメーターの値をAlibaba CloudアカウントのIDに変更します。 他の2つの {please_replace_me} パラメーターの値を、設定した非同期呼び出しの宛先Message Notification Service (MNS)キュー名に変更します。
  4. プロジェクトディレクトリで次のコマンドを実行して、関数をデプロイします。
    s deploy -y
    関数のデプロイ後、Function Computeコンソールにログインして、サービスと関数が作成されているかどうか、および非同期タスク機能がその関数に対して有効になっているかどうかを確認できます。

より多くの情報

  • 非同期呼び出しの設定は、非同期呼び出しが実行された場合にのみ有効になります。 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)でエラーに関する情報を受け取ることができます。