すべてのプロダクト
Search
ドキュメントセンター

Function Compute:トリガーの高度な機能

最終更新日:Sep 09, 2024

このトピックでは、トリガーの高度な機能について説明します。

使用上の注意

このトピックで説明する高度な機能は、MNSキュートリガーApsaraMQ for RocketMQトリガーRabbitMQトリガーApsaraMQ for KafkaトリガーDTSトリガーなどのカスタムイベントソーストリガーにのみ適用できます。

呼び出しメソッドInvocation methods

Function Computeのトリガーは、同期呼び出しモードと非同期呼び出しモードをサポートしています。 次の表に、2つのモードの制限を示します。

呼び出しモード

最大ボディサイズ

最大タイムアウト期間

同期呼び出し

32 MB

5 分

非同期呼び出し

128 KB

5 分

プッシュ設定

説明

bodyサイズの制限を使用して、バッチプッシュで集約されたメッセージの数を減らすかどうかを決定する必要があります。ボディサイズの制限の詳細は、「呼び出しメソッド」をご参照ください。

バッチプッシュ

バッチプッシュを有効にした後、バッチプッシュメッセージおよびバッチプッシュ間隔パラメーターを設定する必要があります。

  • バッチプッシュメッセージ: 各呼び出しに対して送信されるメッセージの最大数。 リクエストは、バックログ内のメッセージ数が指定された値に達した場合にのみ送信されます。 有効な値: 1 ~ 10000

  • バッチプッシュ間隔: 関数が呼び出される間隔。 システムはメッセージを集約し、指定された時間間隔でメッセージをFunction Computeに送信します。 有効な値: 0 ~ 15。 単位は秒です。 値0は、メッセージがリアルタイムで送信されることを示します。

バッチプッシュは、複数のイベントを集約するのに役立ちます。 Batch Push MessagesおよびBatch Push Intervalパラメーターのいずれかの条件が満たされると、関数がトリガーされ、リクエストメッセージが一度にfunction Computeにプッシュされます。

例のバッチプッシュ

  • 例 1

    バッチプッシュメッセージは100に設定され、バッチプッシュ間隔は15秒に設定されます。 各メッセージのサイズは1 KBです。 メッセージの数は10秒で100に達します。 この場合、メッセージは15秒間待たずにすぐに送信されます。

  • 例 2

    バッチプッシュメッセージは100に設定され、バッチプッシュ間隔は15秒に設定されます。 各メッセージのサイズは1 KBです。 間隔が15秒に達すると、メッセージの数は50です。 この場合、メッセージは、メッセージの数が100に達するのを待たずに直ちに送信される。

  • 例 3

    バッチプッシュメッセージは100に設定され、バッチプッシュ間隔は15秒に設定されます。 各メッセージのサイズは 2 KB です。 呼び出しメソッド非同期呼び出しに設定されます。 メッセージの数は10秒で100に達し、メッセージのサイズは200 KB (100x2 KB) に達します。これは、非同期呼び出しの本体サイズの上限を超えています。 この場合、メッセージはすぐに2つのバッチで送信されます。 最初のバッチでは64のメッセージがFunction Computeにプッシュされ、2番目のバッチでは36のメッセージがFunction Computeにプッシュされます。

プッシュ形式

プッシュ形式は、イベントパラメーターのデータ要素の形式を指定します。

  • CloudEvents: 共通形式でイベントデータを記述するための仕様。 CloudEventsは、異なるサービスとプラットフォーム間のイベント宣言と送信を簡素化します。

  • RawData: CloudEventsのデータフィールドのコンテンツのみが配信されます。 CloudEvents形式のその他のメタデータは配信されません。

次のサンプルコードは、CloudEventsおよびRawData形式のイベントを示しています。 サンプルコードでは、MNSキュートリガーが使用されています。

CloudEvents

{
    "id":"c2g71017-6f65-fhcf-a814-a396fc8d****",
    "source":"MNS-Function-mnstrigger",
    "specversion":"1.0",
    "type":"mns:Queue:SendMessage",
    "datacontenttype":"application/json; charset=utf-8",
    "subject":"acs:mns:cn-hangzhou:164901546557****:queues/zeus",
    "time":"2021-04-08T06:28:17.093Z",
    "aliyunaccountid":"164901546557****",
    "aliyunpublishtime":"2021-10-15T07:06:34.028Z",
    "aliyunoriginalaccountid":"164901546557****",
    "aliyuneventbusname":"MNS-Function-mnstrigger",
    "aliyunregionid":"cn-chengdu",
    "aliyunpublishaddr":"42.120.XX.XX",
    "data":{
        "requestId":"606EA3074344430D4C81****",
        "messageId":"C6DB60D1574661357FA227277445****",
        "messageBody":"TEST"
    }
}

RawData

{
    "requestId":"606EA3074344430D4C81****",
    "messageId":"C6DB60D1574661357FA227277445****",
    "messageBody":"TEST"
}

次のサンプルコードは、イベントストリーミングモードのCloudEventsおよびRawData形式のイベントを示しています。

CloudEvents

[
    {
    "id":"c2g71017-6f65-fhcf-a814-a396fc8d****",
    "source":"MNS-Function-mnstrigger",
    "specversion":"1.0",
    "type":"mns:Queue:SendMessage",
    "datacontenttype":"application/json; charset=utf-8",
    "subject":"acs:mns:cn-hangzhou:164901546557****:queues/zeus",
    "time":"2021-04-08T06:28:17.093Z",
    "aliyunaccountid":"164901546557****",
    "aliyunpublishtime":"2021-10-15T07:06:34.028Z",
    "aliyunoriginalaccountid":"164901546557****",
    "aliyuneventbusname":"MNS-Function-mnstrigger",
    "aliyunregionid":"cn-chengdu",
    "aliyunpublishaddr":"42.120.XX.XX",
    "data":{
        "requestId":"606EA3074344430D4C81****",
        "messageId":"C6DB60D1574661357FA227277445****",
        "messageBody":"TEST"
    }
    },
    {
    "id":"d2g71017-6f65-fhcf-a814-a396fc8d****",
    "source":"MNS-Function-mnstrigger",
    "specversion":"1.0",
    "type":"mns:Queue:SendMessage",
    "datacontenttype":"application/json; charset=utf-8",
    "subject":"acs:mns:cn-hangzhou:164901546557****:queues/zeus",
    "time":"2021-04-08T06:28:17.093Z",
    "aliyunaccountid":"164901546557****",
    "aliyunpublishtime":"2021-10-15T07:06:34.028Z",
    "aliyunoriginalaccountid":"164901546557****",
    "aliyuneventbusname":"MNS-Function-mnstrigger",
    "aliyunregionid":"cn-chengdu",
    "aliyunpublishaddr":"42.120.XX.XX",
    "data":{
        "requestId":"606EA3074344430D4C81****",
        "messageId":"C6DB60D1574661357FA227277445****",
        "messageBody":"TEST"
    }
    }
]

RawData

[
    {
        "requestId":"606EA3074344430D4C81****",
        "messageId":"C6DB60D1574661357FA227277445****",
        "messageBody":"TEST"
    },
    {
        "requestId":"606EA3074344430D4C81****",
        "messageId":"C6DB60D1574661357FA227277445****",
        "messageBody":"TEST"
    }
]

再試行ポリシー

失敗した関数リクエストは、設定された再試行ポリシーに基づいて再試行できます。 次の項目は、使用可能な再試行ポリシーを示します。

  • Backoff Retry: システムはリクエストを最大3回まで再試行します。 2つの連続した再試行の間隔はランダムに10〜20秒の範囲です。

  • 指数減衰再試行: デフォルトの再試行ポリシー。 システムはリクエストを最大176回再試行します。 各再試行の時間間隔は指数関数的に512秒に増加します。 再試行時間の合計は24時間です。 リトライ間隔は、1s、2s、4s、8s、16s、32s、64s、128s、256s、512sです。 512秒の間隔は167回使用されます。

再試行がトリガーされるシナリオ

  • 429エラー: リクエストはFunction Computeによって抑制されます。 スロットリングは一時的なもので、リクエストは再試行されます。

  • 5xxエラー: function Computeのシステムエラーのため、関数の実行に失敗しました。

  • 関数実行エラー: 関数の実装が正しくないため、関数の実行に失敗しました。

よくある質問

Q: 関数実装の問題によって引き起こされる関数実行エラーは、再試行ポリシーをトリガーしますか?

A:はい。

フォールトトレランスポリシー

フォールトトレランスポリシーは、エラーが発生したときに無視するかどうかを指定します。

  • 許容障害

    システムは、リタイア後に実行されなかった要求をスキップし、次の要求の処理に進む。

  • フォールトトレランス禁止

    再試行後にリクエストの実行に失敗すると、消費はブロックされます。

デッドレターキュー

フォールトトレランス許可が有効になっている場合にのみ、無効キューを設定できます。

  • デットレターキュー機能を有効にすると、処理されていないメッセージ、または再試行の最大数に達したメッセージが宛先サービスに配信されます。 Function Computeは、Message Service (MNS)ApsaraMQ for RocketMQApsaraMQ for KafkaEventBridgeの宛先サービスをサポートしています。

  • デットレターキュー機能を有効にしない場合、リトライの最大回数を超えたメッセージは破棄されます。

同時消費

同時消費スレッドを使用してスループットを向上させることができます。 同時実行クォータは、ApsaraMQ for Kafkaトリガーに対してのみ設定できます。 ApsaraMQ for Kafkaの同時使用は、トピックパーティションと一緒に実装する必要があります。 以下のシナリオが含まれます。

  • トピックパーティション=同時消費スレッド: 1つのスレッドが1つのトピックパーティションを消費します。

  • Topicパーティション> 同時消費スレッド: 複数の同時消費スレッドがすべてのパーティションを均等に消費します。

  • Topicパーティション <同時消費スレッド: 1つのスレッドが1つのトピックパーティションを消費します。 余分な消費スレッドは無効です。

説明

リソースを完全に活用するには、[Topic partitions]=[Concurrent consumption threads] または [Topic partitions]> [Concurrent consumption threads] を選択することを推奨します。