Pemicu sumber event kustom di Function Compute mendukung pengaturan tingkat lanjut untuk pengiriman, keandalan, dan throughput. Konfigurasikan pengaturan ini untuk mengontrol cara pesan dibatch, diformat, dicoba ulang, dan didistribusikan di antara konsumen konkuren.
Fitur-fitur ini berlaku untuk jenis pemicu berikut:
Metode pemanggilan
Pemicu Function Compute mendukung pemanggilan sinkron dan asinkron. Kedua mode memiliki batas ukuran body dan periode timeout yang berbeda.
| Invocation mode | Ukuran maksimum body | Periode timeout maksimum |
|---|---|---|
| Pemanggilan sinkron | 32 MB | 5 menit |
| Pemanggilan asinkron | 128 KB | 5 menit |
Konfigurasi push
Batch push
Batch push menggabungkan beberapa pesan menjadi satu pemanggilan fungsi. Aktifkan fitur ini dengan mengonfigurasi parameter berikut:
| Parameter | Nilai valid | Bawaan | Deskripsi |
|---|---|---|---|
| Batch Push Messages | 1–10000 | — | Jumlah maksimum pesan per pemanggilan. |
| Batch Push Interval | 0–15 detik | — | Waktu tunggu maksimum sebelum mem-flush batch. Atur ke 0 untuk mengirim pesan secara real time. |
Sebuah batch akan di-flush ketika salah satu kondisi berikut terpenuhi lebih dulu:
Jumlah pesan dalam antrian mencapai batas Batch Push Messages.
Waktu yang berlalu mencapai batas Batch Push Interval.
Ukuran muatan agregat mencapai batas ukuran
bodyuntuk metode pemanggilan yang dikonfigurasi (32 MB untuk pemanggilan sinkron, 128 KB untuk pemanggilan asinkron).
Contoh
Contoh 1 — Kondisi jumlah terpenuhi lebih dulu
Batch Push Messages = 100, Batch Push Interval = 15 dtk, ukuran pesan = 1 KB. 100 pesan terkumpul dalam 10 detik. Batch langsung di-flush saat mencapai 100 pesan tanpa menunggu interval 15 detik.
Contoh 2 — Kondisi interval terpenuhi lebih dulu
Batch Push Messages = 100, Batch Push Interval = 15 dtk, ukuran pesan = 1 KB. Hanya 50 pesan yang terkumpul hingga tanda 15 detik. Batch langsung di-flush pada detik ke-15 tanpa menunggu hingga mencapai 100 pesan.
Contoh 3 — Batas ukuran muatan terpenuhi lebih dulu (pemanggilan asinkron)
Batch Push Messages = 100, Batch Push Interval = 15 dtk, ukuran pesan = 2 KB, metode pemanggilan = asinkron. 100 pesan terkumpul dalam 10 detik, total 200 KB — melebihi batas body asinkron sebesar 128 KB. Batch tersebut dipisah dan di-flush dalam dua batch: 64 pesan di batch pertama dan 36 pesan di batch kedua.
Format push
Format push menentukan struktur parameter event yang diterima fungsi Anda.
| Format | Deskripsi |
|---|---|
| CloudEvents | Pesan dikirim dalam format spesifikasi CloudEvents, termasuk semua bidang metadata event. |
| RawData | Hanya konten bidang data dari envelope CloudEvents yang dikirimkan. Bidang metadata dihilangkan. |
Contoh berikut menunjukkan struktur event untuk masing-masing format, menggunakan pemicu antrian Simple Message Queue (formerly MNS).
Pemanggilan pesan tunggal
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"
}Pemanggilan batch (mode aliran event)
Dalam mode aliran event, kedua format mengirimkan array pesan. Setiap elemen dalam array memiliki struktur yang sama seperti format pesan tunggal yang ditunjukkan di atas.
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"
}
]Kebijakan retry
Function Compute mencoba ulang pemanggilan yang gagal sesuai dengan kebijakan retry yang dikonfigurasi. Tersedia dua kebijakan:
| Kebijakan | Retry maksimum | Interval retry | Durasi total retry |
|---|---|---|---|
| Backoff Retry | 3 | 10–20 dtk (acak) | — |
| Exponential Decay Retry (bawaan) | 176 | 1 dtk, 2 dtk, 4 dtk, 8 dtk, 16 dtk, 32 dtk, 64 dtk, 128 dtk, 256 dtk, 512 dtk (512 dtk untuk 167 retry sisanya) | 24 jam |
Retry dipicu untuk jenis error berikut:
| Jenis error | Kondisi pemicu | Retry Behavior |
|---|---|---|
429 (throttling) | Function Compute sementara melakukan throttling terhadap permintaan. | Dicoba ulang secara otomatis sesuai kebijakan yang dikonfigurasi. |
5xx (error sistem) | Terjadi error tingkat sistem di Function Compute. | Dicoba ulang secara otomatis sesuai kebijakan yang dikonfigurasi. |
| Error eksekusi fungsi | Fungsi mengembalikan error karena masalah dalam implementasi fungsi. | Dicoba ulang secara otomatis sesuai kebijakan yang dikonfigurasi. |
Kebijakan toleransi kesalahan
Kebijakan toleransi kesalahan menentukan apa yang terjadi ketika suatu permintaan telah menghabiskan semua upaya retry.
| Kebijakan | Perilaku |
|---|---|
| Fault Tolerance Allowed | Melewati permintaan yang gagal dan melanjutkan pemrosesan pesan berikutnya. |
| Fault Tolerance Prohibited | Memblokir konsumsi hingga permintaan yang gagal berhasil. Tidak ada pesan berikutnya yang diproses. |
Antrian dead-letter
Antrian dead-letter (DLQ) menangkap pesan yang tidak dapat diproses setelah semua upaya retry habis.
Konfigurasi antrian dead-letter hanya tersedia ketika Fault Tolerance Allowed diaktifkan.
| Pengaturan DLQ | Perilaku |
|---|---|
| Enabled | Pesan yang tidak diproses dan pesan yang melebihi jumlah retry maksimum diteruskan ke layanan tujuan. Tujuan yang didukung: Simple Message Queue (formerly MNS), ApsaraMQ for RocketMQ, ApsaraMQ for Kafka, dan EventBridge. |
| Disabled | Pesan yang melebihi jumlah retry maksimum dibuang. |
Konsumsi konkuren
Konsumsi konkuren meningkatkan throughput pesan dengan memproses beberapa partisi topik secara paralel. Parameter Concurrency Quota hanya dapat dikonfigurasi untuk pemicu ApsaraMQ for Kafka, dan harus digunakan bersamaan dengan partisi topik Kafka.
Hubungan antara partisi topik dan thread konkuren menentukan throughput efektif:
| Skenario | Perilaku |
|---|---|
| Partisi topik = Thread konkuren | Setiap thread memproses satu partisi. Semua thread aktif. |
| Partisi topik > Thread konkuren | Thread didistribusikan merata di seluruh partisi. Semua thread aktif. |
| Partisi topik < Thread konkuren | Satu thread mengonsumsi satu partisi topik. Thread konsumsi tambahan tidak berlaku. |
Atur Concurrency Quota sama dengan atau kurang dari jumlah partisi topik agar seluruh thread konkuren dapat dimanfaatkan secara optimal.