Jika fungsi Anda melibatkan logika yang memakan waktu, intensif sumber daya, atau rentan terhadap kesalahan, pemanggilan asinkron dapat sangat bermanfaat. Pemanggilan ini memungkinkan aplikasi Anda menangani lonjakan lalu lintas dengan efisiensi dan keandalan yang lebih tinggi. Saat sebuah fungsi dipanggil secara asinkron, Anda tidak perlu menunggu responsnya. Permintaan disimpan secara persisten dalam antrian internal Function Compute dan diproses secara andal di latar belakang. Topik ini menjelaskan skenario penggunaan dan fitur utama dari pemanggilan asinkron.
Kasus penggunaan
Berikut adalah contoh kasus penggunaan umum untuk pemanggilan asinkron:
Pengolahan audio dan video
Function Compute dapat menangani file audio dan video secara efisien, di mana tugas seperti encoding, decoding, dan transkoding sering kali memakan waktu. Dengan memicu operasi ini secara asinkron, proses berlangsung di backend, memungkinkan antarmuka depan untuk terus berjalan tanpa penundaan — meningkatkan pengalaman pengguna. Selain itu, pemanggilan asinkron memungkinkan eksekusi bersamaan dari beberapa fungsi, mengurangi waktu pemrosesan keseluruhan. Sebagai contoh, proyek besar dapat dibagi menjadi beberapa subtugas untuk pemrosesan paralel, atau satu video dapat dikonversi ke berbagai format secara bersamaan.
Pengolahan ETL data
Selama operasi ekstrak, transformasi, dan muat (ETL), tugas seperti kueri database, I/O file, dan pembersihan data sering kali independen dan dapat dieksekusi secara paralel. Pemanggilan asinkron memungkinkan proses ini berjalan bersamaan, secara signifikan mengurangi waktu pemrosesan dan meningkatkan kinerja sistem. Untuk tugas yang lebih kompleks atau intensif sumber daya, seperti transformasi data skala besar, pemanggilan asinkron memastikan pemrosesan backend tanpa memblokir antarmuka depan, menghasilkan pengalaman pengguna yang lebih lancar.
Pengembangan aplikasi web
Function Compute terintegrasi dengan mulus dengan layanan cloud lainnya untuk membangun aplikasi web yang kuat. Pemanggilan asinkron membantu mencegah pembekuan halaman yang disebabkan oleh operasi backend yang panjang, seperti pengiriman formulir, kueri, atau pemuatan data besar. Ini memungkinkan pengguna untuk terus berinteraksi dengan komponen lain dari aplikasi tanpa gangguan. Dalam skenario dengan konkurensi tinggi — seperti ketika banyak pengguna mengakses aplikasi secara bersamaan — pemanggilan asinkron membantu mendistribusikan beban, melindungi layanan backend dari kelebihan beban.
Pemanggilan Tertunda
Dalam skenario tertentu, Anda mungkin memerlukan Function Compute untuk menunda eksekusi fungsi setelah mengirimkan permintaan pemanggilan asinkron. Untuk mencapai ini, Anda dapat menggunakan API atau SDK Function Compute untuk mengatur pemanggilan tertunda.
Cukup sertakan header permintaan HTTP x-fc-async-delay dalam kode permintaan Anda. Rentang valid untuk parameter ini adalah (0, 3600) detik. Function Compute akan memanggil fungsi setelah periode penundaan yang ditentukan telah berakhir.
Kebijakan Pengulangan
Penanganan kesalahan dan mekanisme pengulangan didukung dalam pemanggilan asinkron. Tugas dapat dijadwalkan ulang tanpa memengaruhi seluruh proses jika tugas gagal. Function Compute secara otomatis mengulang pemanggilan asinkron jika pemanggilan gagal.
Mekanisme Pengulangan
Tabel berikut menjelaskan mekanisme pengulangan default untuk kesalahan umum.
Jenis Kesalahan | Perilaku Server | Ditagih | Solusi |
Kesalahan | Secara default, Function Compute mengulang fungsi hingga tiga kali. Anda dapat mengubah jumlah pengulangan berdasarkan kebutuhan bisnis Anda. | Ditagih berdasarkan jumlah pemanggilan. Untuk informasi lebih lanjut, lihat Ikhtisar Penagihan. | Periksa kode Anda. |
Batas atas konkurensi eksekusi terlampaui | Function Compute mengulang eksekusi fungsi hingga 5 jam dalam mode eksponensial biner mundur. Jika eksekusi fungsi Anda gagal, pengulangan dimulai 0,5 detik kemudian. Interval pengulangan berikutnya dihitung dalam mode eksponensial biner mundur, seperti 1 detik, 2 detik, 4 detik, dan 8 detik. Pengulangan berlangsung hingga 5 jam. | Tidak | Secara default, setiap Akun Alibaba Cloud dapat menjalankan hingga 100 instans di setiap wilayah. Kuota aktual yang ditampilkan di halaman Kuota Umum di konsol Quota Center yang berlaku. Anda dapat meningkatkan kuota di konsol Quota Center. |
Kesalahan Internal | Tidak | Gabung dengan grup DingTalk (ID: 64970014484) untuk dukungan teknis. | |
Kekurangan sumber daya Function Compute | Tidak |
Konfigurasikan Kebijakan Pengulangan
Anda dapat menentukan jumlah maksimum pengulangan dan masa hidup maksimum (TTL) untuk pesan di Function Compute.
Masuk ke Konsol Function Compute. Di panel navigasi sisi kiri, klik Functions.
Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi yang ingin Anda kelola.
Di halaman Detail Fungsi, navigasikan ke tab Tasks. Di bagian Task Mode, klik Modify. Sesuaikan parameter berikut di panel Task Mode yang muncul, lalu klik Deploy untuk menyimpan perubahan Anda.
Parameter | Deskripsi |
Task Mode | Menentukan apakah akan mengaktifkan mode tugas asinkron. Untuk informasi lebih lanjut, lihat Tugas Asinkron. |
Maximum Retries | Jumlah maksimum pengulangan untuk pesan dalam pemanggilan asinkron. Nilai valid: [0,8]. Secara default, Function Compute mengulang tiga kali untuk pesan yang gagal dipicu secara asinkron. Anda dapat mengurangi atau menambah jumlah pengulangan pemanggilan asinkron berdasarkan kebutuhan bisnis Anda. |
Maximum Message Lifetime | Masa hidup maksimum pesan dalam pemanggilan asinkron. Nilai valid: [1,604800]. Nilai default: 86400. Unit: detik. Durasi ini dihitung dari waktu ketika pemanggilan asinkron dipicu. Jika masa hidup maksimum pesan berakhir, pesan tersebut dibuang. Pesan yang dibuang dilacak oleh metrik Acara Pemicu Pemanggilan Asinkron di CloudMonitor. Untuk informasi lebih lanjut, lihat Metrik Pemantauan. |
Callback Hasil
Setelah menerima permintaan pemanggilan asinkron, Function Compute menyimpan permintaan tersebut dan segera mengembalikan respons tanpa menunggu permintaan selesai. Jika Anda ingin menyimpan permintaan yang gagal dieksekusi setelah diulang untuk jumlah maksimum yang ditentukan atau jika Anda ingin memberi tahu aplikasi hilir tentang hasil pemanggilan asinkron, Anda dapat mengonfigurasi panggilan balik hasil. Setelah Anda mengonfigurasi layanan tujuan untuk pemanggilan asinkron, Function Compute secara otomatis memicu panggilan balik ke layanan yang sesuai berdasarkan hasil eksekusi.
Cara Kerjanya
Gambar berikut menunjukkan proses panggilan balik hasil.
Skenario
Simpan acara yang dibuang untuk digunakan nanti
Jika permintaan asinkron gagal dieksekusi setelah sistem mengulang permintaan berdasarkan kebijakan pengulangan, Function Compute membuang permintaan tersebut. Jika tujuan dikonfigurasi untuk pemanggilan yang gagal, Function Compute mendorong informasi konteks permintaan yang gagal ke layanan tujuan seperti ApsaraMQ for RocketMQ untuk pemrosesan selanjutnya. Anda juga dapat mengatur layanan tujuan ke fungsi lain. Function Compute secara otomatis mendorong informasi konteks permintaan yang gagal ke fungsi ini untuk mengeksekusi logika penanganan kesalahan kustom.
Beritahukan layanan hilir tentang hasil eksekusi
Anda dapat mengonfigurasi tujuan untuk pemanggilan yang berhasil. Setelah permintaan berhasil dieksekusi, Function Compute mendorong informasi konteks permintaan ke layanan tujuan hilir. Misalnya, jika Anda menggunakan Function Compute untuk secara otomatis mengekstrak file ZIP yang diunggah ke Object Storage Service (OSS), Anda dapat mengonfigurasi panggilan balik hasil untuk fungsi ekstraksi jika Anda ingin menerima notifikasi setelah ekstraksi.
Layanan Tujuan yang Didukung untuk Pemanggilan Asinkron
Jika Anda mengonfigurasi tujuan untuk pemanggilan asinkron suatu fungsi, Function Compute mengirimkan konteks dan data permintaan ke layanan yang ditentukan ketika hasil pemanggilan asinkron memenuhi kondisi yang ditentukan. Anda dapat mengonfigurasi layanan tujuan yang berbeda untuk fungsi, alias, dan versi yang berbeda. Layanan tujuan berikut didukung untuk pemanggilan asinkron:
Simple Message Queue (formerly MNS)
Function Compute
EventBridge
ApsaraMQ for RocketMQ
Jika Anda memilih ApsaraMQ for RocketMQ, hanya instans ApsaraMQ for RocketMQ 4.x yang dapat dikonfigurasi sebagai layanan tujuan. Instans ApsaraMQ for RocketMQ 5.x tidak dapat dikonfigurasi sebagai layanan tujuan. Untuk informasi lebih lanjut, lihat Perbedaan dan Kompatibilitas antara v4.x dan v5.x.
Untuk detail tentang batas beban layanan tujuan untuk pemanggilan asinkron, lihat Batas Sumber Daya Waktu Proses Fungsi.
Perhatikan item berikut saat Anda mengonfigurasi layanan tujuan untuk pemanggilan asinkron:
Konten acara yang dikirim ke tujuan untuk pemanggilan asinkron
Kode sampel berikut memberikan contoh konten acara ketika tujuan untuk pemanggilan asinkron adalah Simple Message Queue (formerly MNS), Function Compute, atau ApsaraMQ for RocketMQ.
{ "timestamp": 1660120276975, "requestContext": { "requestId": "xxx", "functionArn": "acs:fc:{regionid}:{accountid}:functions/xxxx", "condition": "FunctionResourceExhausted", "approximateInvokeCount": 3 }, "requestPayload": "", "responseContext": { "statusCode": 200, "functionError": "" }, "responsePayload": "" }Tabel 1. Deskripsi Parameter
Parameter
Deskripsi
timestamp
Cap waktu pemanggilan.
requestContext
Konteks permintaan.
requestContext.requestId
ID permintaan pemanggilan asinkron.
requestContext.functionArn
Nama Sumber Daya Alibaba Cloud (ARN) dari fungsi yang dipanggil secara asinkron.
requestContext.condition
Kode kesalahan pemanggilan.
requestContext.approximateInvokeCount
Jumlah kali eksekusi pemanggilan asinkron. Nilai lebih dari 1 menunjukkan bahwa Function Compute mengulang eksekusi tersebut.
requestPayload
Muatan awal dari permintaan fungsi.
responseContext
Konteks respons.
responseContext.statusCode
Kode status sistem yang dikembalikan. Kode status selain 200 menunjukkan bahwa terjadi kesalahan sistem.
responseContext.functionError
Pesan kesalahan pemanggilan.
responsePayload
Muatan awal yang dikembalikan setelah fungsi dieksekusi.
Kode sampel berikut memberikan contoh konten acara ketika tujuan untuk pemanggilan asinkron adalah EventBridge. Untuk informasi lebih lanjut, lihat Ikhtisar.
{ "datacontenttype": "application/json", "aliyunaccountid": "143xxxx", "data": { "requestContext": { "condition": "", "approximateInvokeCount": 1, "requestId": "0fcb7f0c-xxxx", "functionArn": "acs:fc:{regionid}:{accountid}:functions/xxxx" }, "requestPayload": "", "responsePayload": "", "responseContext": { "functionError": "", "statusCode": 200 }, "timestamp": 1660120276975 }, "subject": "acs:fc:{regionid}:{accountid}:functions/xxxx", "source": "acs:fc", "type": "fc:AsyncInvoke:succeeded", "aliyunpublishtime": "2021-01-03T09:44:31.233Asia/Shanghai", "specversion": "1.0", "aliyuneventbusname": "xxxxxxx", "id": "ecc4865xxxxxx", "time": "2021-01-03T01:44:31Z", "aliyunregionid": "cn-shanghai-vpc", "aliyunpublishaddr": "199.99.xxx.xxx" }Batas Muatan
Item berikut mencantumkan batas ukuran muatan untuk layanan tujuan yang berbeda:
Simple Message Queue (formerly MNS): 64 KB
Function Compute: Batas Sumber Daya Waktu Proses Fungsi
EventBridge: 64 KB
ApsaraMQ for RocketMQ: 4 MB
Penghindaran Loop
Saat Anda mengonfigurasi tujuan untuk pemanggilan asinkron, pastikan bahwa pemanggilan loop tidak terjadi. Sebagai contoh, sebuah loop terjadi jika Anda mengonfigurasi Fungsi B sebagai tujuan untuk pemanggilan asinkron yang berhasil dari Fungsi A dan mengonfigurasi Fungsi A sebagai tujuan untuk pemanggilan asinkron yang berhasil dari Fungsi B. Pemanggilan asinkron dan eksekusi Fungsi A dapat memulai loop tak terbatas di mana Fungsi A dan Fungsi B terus-menerus saling memanggil.
Konfigurasikan Layanan Tujuan untuk Pemanggilan Asinkron
Masuk ke Konsol Function Compute. Di panel navigasi sisi kiri, klik Functions.
Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi yang ingin Anda kelola.
Di halaman Detail Fungsi, navigasikan ke tab Tasks. Di bagian Task Destination, klik Modify. Sesuaikan parameter berikut di panel Task Destination yang muncul, lalu klik Deploy untuk menyimpan perubahan Anda.
Konfigurasikan tujuan untuk pemanggilan yang berhasil:
Di panel Destination for Successful Invocations, atur Invoke Other Services upon Success ke Enable dan konfigurasikan parameter Layanan Tujuan. Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Deskripsi
Destination Service
Function Compute. Jika Anda memilih Function Compute dari daftar drop-down Layanan Tujuan, Anda harus mengonfigurasi parameter berikut:
Function Name: nama fungsi.
Version or Alias: alias atau versi fungsi.
Simple Message Queue (formerly MNS). Jika Anda memilih Simple Message Queue (formerly MNS) dari daftar drop-down Layanan Tujuan, Anda harus mengonfigurasi parameter berikut:
Destination Type: jenis tujuan yang menerima hasil dari pemanggilan yang berhasil. Nilai valid:
Queue
Model pesan berbasis antrian menyediakan layanan konsumsi pesan yang andal dan bersamaan. Setiap pesan dalam antrian hanya dapat dikonsumsi oleh satu klien.
Topic
Model pesan berbasis topik digunakan untuk mengirim pesan dari satu klien penerbit ke beberapa klien pelanggan. Topik SMQ dapat didorong sebagai pesan menggunakan beberapa metode.
Queue: nama antrian Simple Message Queue (formerly MNS). Parameter ini diperlukan jika Anda mengatur parameter Jenis Tujuan ke Queue.
Topic: nama topik Simple Message Queue (formerly MNS). Parameter ini diperlukan jika Anda mengatur parameter Jenis Tujuan ke Topic.
ApsaraMQ for RocketMQ. Jika Anda memilih ApsaraMQ for RocketMQ dari daftar drop-down Layanan Tujuan, Anda harus mengonfigurasi parameter berikut:
Instances: instans tujuan.
Topic: topik tujuan.
EventBridge. Jika Anda memilih EventBridge dari daftar drop-down Layanan Tujuan, Anda harus mengonfigurasi parameter Custom Event Bus.
Konfigurasikan tujuan untuk pemanggilan yang gagal:
Di panel Destination for Failed Invocations, atur Invoke Other Services upon Failure ke Enable. Kemudian, konfigurasikan parameter Layanan Tujuan.
Tangani Kegagalan Panggilan Balik
Jika peran yang dikonfigurasi untuk fungsi tidak memiliki izin pada layanan tujuan atau layanan tujuan tidak tersedia, panggilan balik ke layanan tujuan mungkin gagal. Anda dapat menangani kegagalan tersebut berdasarkan metrik dan log yang disediakan oleh Function Compute. Tabel berikut menjelaskan kesalahan umum dan tindakan sistem yang sesuai.
Kode status HTTP | Deskripsi | Tindakan sistem |
5xx | Permintaan dibatasi atau terjadi kesalahan konten. | Function Compute secara otomatis mengulang panggilan balik dalam mode eksponensial mundur. Interval pengulangan awal adalah 500 milidetik, dan durasi pengulangan maksimum adalah 30 menit. |
4xx | Anda tidak memiliki izin yang diperlukan, parameter permintaan salah, atau badan pesan permintaan melebihi batas layanan tujuan. Contoh parameter permintaan yang salah adalah bahwa sumber daya untuk layanan tujuan yang ditentukan oleh parameter permintaan telah dihapus. | Sistem mengembalikan kesalahan dan mencatat pesan kesalahan. |
Metrik Panggilan Balik
Saat panggilan balik gagal, Function Compute mencatat metrik yang sesuai dan menampilkannya di konsol. Anda dapat masuk ke Konsol Function Compute. Di panel navigasi sisi kiri, pilih . Di kolom Function Name, klik nama fungsi yang ingin Anda kelola.
Metrik | Deskripsi |
FunctionDestinationErrors | Jumlah permintaan yang gagal memicu tujuan yang ditentukan selama eksekusi fungsi. Statistik dikumpulkan setiap menit atau setiap jam. |
FunctionDestinationSucceed | Jumlah permintaan yang berhasil memicu tujuan yang ditentukan selama eksekusi fungsi. Statistik dikumpulkan setiap menit atau setiap jam. |
Untuk informasi lebih lanjut tentang metrik, lihat Metrik Pemantauan.
Tanya Jawab Umum
Bagaimana cara saya memicu pemanggilan asinkron suatu fungsi?
Anda dapat menggunakan salah satu metode berikut untuk memanggil fungsi Function Compute secara asinkron:
Masuk ke Konsol Function Compute, temukan fungsi yang diinginkan dan pilih Invoke the function in asynchronous mode di tab Tests.

Panggil operasi InvokeFunction dan atur nilai parameter
x-fc-invocation-typeke Async.Gunakan Serverless Devs untuk mengonfigurasi pemanggilan asinkron. Atur nilai parameter
invocation-typeke Async. Untuk informasi lebih lanjut, lihat Panggil fungsi.Buat pemicu yang mendukung pemanggilan asinkron. Untuk informasi lebih lanjut, lihat Picu tugas menggunakan acara.
Picu melalui HTTP atau domain kustom. Dalam hal ini, atur header permintaan
X-Fc-Invocation-TypekeAsync. Sebagai contoh:curl -v -H "X-Fc-Invocation-Type: Async" https://example.cn-shenzhen.fcapp.run/$path
Apa yang Harus Dilakukan Selanjutnya
Jika Anda ingin mendapatkan informasi status setiap fase dari permintaan asinkron, Anda dapat mengaktifkan mode tugas. Untuk informasi lebih lanjut, lihat Tugas Asinkron.