本文介紹觸發(fā)器的高級系統(tǒng)功能。
使用說明
本文介紹的高級功能只適用于自定義事件源觸發(fā)器,包括輕量消息隊列(原 MNS)隊列觸發(fā)器、RocketMQ觸發(fā)器、RabbitMQ觸發(fā)器、Kafka觸發(fā)器和DTS觸發(fā)器。
調用方式
函數(shù)計算的觸發(fā)器支持同步調用和異步調用兩種調用方式。兩種調用方式的限制如下所示。
調用模式 |
| 超時時間上限 |
同步調用 | 32 MB | 5分鐘 |
異步調用 | 128 KB | 5分鐘 |
推送配置
批量推送需結合body
大小限制決定是否減少聚合消息數(shù)。關于body
大小限制,請參見調用方式。
批量推送
批量推送需設置批量推送條數(shù)和推量推送間隔。
批量推送條數(shù):一次調用函數(shù)發(fā)送的最大批量消息條數(shù),當積壓的消息數(shù)量到達設定值時才會發(fā)送請求。取值范圍為[1,10000]。
推量推送間隔:調用函數(shù)的時間間隔,系統(tǒng)每到間隔時間點會將消息聚合后發(fā)給函數(shù)計算。取值范圍為[0,15],單位為秒。0秒表示無需等待,實時投遞。
批量推送幫助您批量聚合多個事件,當批量推送條數(shù)和批量推送間隔兩者條件滿足其中一個時,觸發(fā)函數(shù)執(zhí)行,將請求消息批量推送到函數(shù)計算。
批量推送案例
案例一
您設置的批量推送條數(shù)為100條,每條消息大小為1 KB,批量推送間隔為15s。在10s內消息條數(shù)累積100條,則立即觸發(fā)推送,無需等到15s再推送。
案例二
您設置的批量推送條數(shù)為100條,每條消息大小為1 KB,批量推送間隔為15s。在15s內消息積累50條,則立即觸發(fā)推送,無需等待消息積累到100條后再推送。
案例三
您設置的批量推送條數(shù)為100條,每條消息大小為2 KB,推量推送間隔為15s,調用方式為異步調用。在10s內消息積累100條(消息累積大小100*2KB=200KB),達到異步調用
body
大小限制數(shù),則立即觸發(fā)推送,第一批聚合64條消息推送到函數(shù)計算,第二批聚合36條消息推送到函數(shù)計算。
推送格式
用于指定函數(shù)入口參數(shù)Event中每個數(shù)據(jù)元素的格式。
CloudEvents:以通用格式描述事件數(shù)據(jù)的規(guī)范,旨在簡化不同服務和平臺間的事件聲明和傳輸。
RawData:只投遞CloudEvents中數(shù)據(jù)字段的內容,不包含CloudEvents格式中的其它元數(shù)據(jù)信息。
以輕量消息隊列(原 MNS)隊列觸發(fā)器為例,事件模式下,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"
}
]
重試策略
函數(shù)請求在部分失敗場景下,可按配置的重試策略進行重試。重試策略選項如下。
退避重試:重試3次,每次重試的時間間隔為介于10s~20s的隨機值。
指數(shù)衰減重試:默認重試策略。重試176次,每次重試的時間間隔按照指數(shù)遞增至512s,總計重試時間為24小時,即重試時間間隔為1s、2s、4s、8s、16s、32s、64s、128s、256s、512s……512s(共計167次間隔512s)。
觸發(fā)重試的場景
429
錯誤:指請求被函數(shù)計算限流。限流是短暫的,因此會觸發(fā)重試。5xx
錯誤:指函數(shù)計算系統(tǒng)異常導致函數(shù)無法執(zhí)行。函數(shù)執(zhí)行出錯:指因函數(shù)實現(xiàn)引發(fā)的函數(shù)執(zhí)行出錯。
常見問題FAQ
Q:因函數(shù)實現(xiàn)問題引發(fā)的函數(shù)執(zhí)行出錯是否會觸發(fā)執(zhí)行重試策略?
A:會,函數(shù)執(zhí)行出錯會觸發(fā)重試策略。
容錯策略
當發(fā)生錯誤時是否選擇容錯。
允許容錯
請求失敗且重試失敗后,跳過此請求,繼續(xù)處理下一條請求。
禁止容錯
請求失敗且重試失敗后,消費任務阻塞。
死信隊列
僅當開啟允許容錯時,可配置死信隊列。
如果啟用死信隊列,未被處理或超過重試次數(shù)的消息會被投遞到目標服務中。函數(shù)計算支持的目標服務包括輕量消息隊列(原 MNS)、云消息隊列 RocketMQ 版、云消息隊列 Kafka 版和事件總線EventBridge,您可以根據(jù)需求選擇不同的隊列類型。
如果未啟用死信隊列,超過重試次數(shù)的消息會被丟棄。
并發(fā)消費
您可以通過設置并發(fā)消費線程數(shù)提高吞吐,目前僅Kafka觸發(fā)器支持設置并發(fā)配額,云消息隊列 Kafka 版并發(fā)消費需配合Topic分區(qū)共同實現(xiàn),包括以下幾種場景。
Topic分區(qū)數(shù)=并發(fā)消費數(shù):一個線程消費一個Topic分區(qū)。
Topic分區(qū)數(shù)>并發(fā)消費數(shù):多個并發(fā)消費會均攤所有分區(qū)消費。
Topic分區(qū)數(shù)<并發(fā)消費數(shù):一個線程消費一個Topic分區(qū),多出的消費數(shù)無效。
為保證您的資源被充分利用,建議您選擇Topic分區(qū)數(shù)=并發(fā)消費數(shù)或Topic分區(qū)數(shù)>并發(fā)消費數(shù)場景。