全部產品
Search
文件中心

Function Compute:觸發器進階功能

更新時間:Sep 20, 2024

本文介紹觸發器的進階系統功能。

使用說明

本文介紹的進階功能只適用於自訂事件來源觸發器,包括輕量訊息佇列(原 MNS)隊列觸發器RocketMQ觸發器RabbitMQ觸發器Kafka觸發器DTS觸發器

調用方式

Function Compute的觸發器支援同步調用和非同步呼叫兩種調用方式。兩種調用方式的限制如下所示。

調用模式

body大小

逾時時間上限

同步調用

32 MB

5分鐘

非同步呼叫

128 KB

5分鐘

推送配置

說明

批量推送需結合body大小限制決定是否減少彙總訊息數。關於body大小限制,請參見調用方式

批量推送

批量推送需設定批量推送條數推量推送間隔

  • 批量推送條數:一次調用函數發送的最大批量訊息條數,當積壓的訊息數量到達設定值時才會發送請求。取值範圍為[1,10000]。

  • 推量推送間隔:調用函數的時間間隔,系統每到間隔時間點會將訊息彙總後發給Function Compute。取值範圍為[0,15],單位為秒。0秒錶示無需等待,即時投遞。

批量推送協助您批量彙總多個事件,當批量推送條數批量推送間隔兩者條件滿足其中一個時,觸發函數執行,將請求訊息批量推送到Function Compute

批量推送案例

  • 案例一

    您設定的批量推送條數為100條,每條訊息大小為1 KB,批量推送間隔為15s。在10s內訊息條數累積100條,則立即觸發推送,無需等到15s再推送。

  • 案例二

    您設定的批量推送條數為100條,每條訊息大小為1 KB,批量推送間隔為15s。在15s內訊息積累50條,則立即觸發推送,無需等待訊息積累到100條後再推送。

  • 案例三

    您設定的批量推送條數為100條,每條訊息大小為2 KB,推量推送間隔為15s,調用方式非同步呼叫。在10s內訊息積累100條(訊息累積大小100*2KB=200KB),達到非同步呼叫body大小限制數,則立即觸發推送,第一批彙總64條訊息推送到Function Compute,第二批彙總36條訊息推送到Function Compute

推送格式

用於指定函數入口參數Event中每個資料元素的格式。

  • CloudEvents:以通用格式描述事件數目據的規範,旨在簡化不同服務和平台間的事件聲明和傳輸。

  • RawData:只投遞CloudEvents中資料欄位的內容,不包含CloudEvents格式中的其它中繼資料資訊。

輕量訊息佇列(原 MNS)隊列觸發器為例,事件模式下,CloudEvents和RawData類型的Event格式如下。

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類型的Event格式如下。

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"
    }
]

重試策略

函數請求在部分失敗情境下,可按配置的重試策略進行重試。重試策略選項如下。

  • 退避重試:重試3次,每次重試的時間間隔為介於10s~20s的隨機值。

  • 指數衰減重試:預設重試策略。重試176次,每次重試的時間間隔按照指數遞增至512s,總計重試時間為24小時,即重試時間間隔為1s、2s、4s、8s、16s、32s、64s、128s、256s、512s……512s(共計167次間隔512s)。

觸發重試的情境

  • 429錯誤:指請求被Function Compute限流。限流是短暫的,因此會觸發重試。

  • 5xx錯誤:指Function Compute系統異常導致函數無法執行。

  • 函數執行出錯:指因函數實現引發的函數執行出錯。

常見問題FAQ

Q:因函數實現問題引發的函數執行出錯是否會觸發執行重試策略?

A:會,函數執行出錯會觸發重試策略。

容錯策略

當發生錯誤時是否選擇容錯。

  • 允許容錯

    請求失敗且重試失敗後,跳過此請求,繼續處理下一條請求。

  • 禁止容錯

    請求失敗且重試失敗後,消費任務阻塞。

無效信件佇列

僅當開啟允許容錯時,可配置無效信件佇列。

  • 如果啟用無效信件佇列,未被處理或超過重試次數的訊息會被投遞到目標服務中。Function Compute支援的目標服務包括輕量訊息佇列(原 MNS)雲訊息佇列 RocketMQ 版雲訊息佇列 Kafka 版事件匯流排EventBridge,您可以根據需求選擇不同的隊列類型。

  • 如果未啟用無效信件佇列,超過重試次數的訊息會被丟棄。

並發消費

您可以通過設定並發消費線程數提高吞吐,目前僅Kafka觸發器支援設定並發配額雲訊息佇列 Kafka 版並發消費需配合Topic分區共同實現,包括以下幾種情境。

  • Topic分區數=並發消費數:一個線程消費一個Topic分區。

  • Topic分區數>並發消費數:多個並發消費會均攤所有分區消費。

  • Topic分區數<並發消費數:一個線程消費一個Topic分區,多出的消費數無效。

說明

為保證您的資源被充分利用,建議您選擇Topic分區數=並發消費數或Topic分區數>並發消費數情境。