Dalam langkah-langkah Tugas Serverless Workflow, alur kerja dapat memanggil fungsi Function Compute secara asinkron. Pemanggilan asinkron cocok untuk skenario seperti tugas jangka panjang dan audit manual. Metode ini mencegah kesalahan pembatasan laju serta menyederhanakan penanganan kesalahan dan logika percobaan ulang. Topik ini menjelaskan skenario serta pola integrasi pemanggilan fungsi asinkron, serta memberikan contoh cara mengintegrasikan Serverless Workflow dengan pemanggilan fungsi asinkron.
Prasyarat
Langkah-langkah berikut harus dilakukan:
Opsional: Aktifkan pemanggilan asinkron. Untuk informasi lebih lanjut, lihat Ikhtisar.
Setelah mengaktifkan pemanggilan asinkron stateful, Anda dapat menghentikan instance fungsi saat tugas sedang dieksekusi, memberikan pandangan yang lebih rinci terhadap alur kerja.
Berikan izin Function Compute untuk mengakses Serverless Workflow. Ini memastikan bahwa Serverless Workflow dapat dipanggil kembali untuk mengeksekusi langkah-langkah berikutnya setelah eksekusi fungsi asinkron selesai. Berikut adalah contoh konfigurasi kebijakan izin:
{ "Statement": [ { "Effect": "Allow", "Action": [ "fnf:ReportTaskSucceeded", "fnf:ReportTaskFailed" ], "Resource": [ "*" ] } ], "Version": "1" }Untuk detail lebih lanjut tentang otorisasi, lihat Berikan izin Function Compute untuk mengakses layanan Alibaba Cloud lainnya.
Informasi latar belakang
Secara default, Serverless Workflow menggunakan pola sinkron ketika Serverless Workflow mengatur tugas Function Compute untuk mengimplementasikan alur tugas. Dalam pola sinkron, Serverless Workflow tidak melanjutkan ke langkah berikutnya sampai alur kerja menerima hasil eksekusi fungsi sebelumnya. Cuplikan berikut menunjukkan alur yang menggunakan pola sinkron.
version: v1
type: flow
steps:
- type: task
name: mytask
resourceArn: acs:fc:{region}:{account}:services/{serviceName}.{qualifier}/functions/{functionName}Masalah berikut dapat terjadi saat menggunakan pola sinkron untuk pemanggilan fungsi:
Pembatasan laju dapat terjadi akibat batasan sumber daya pada pemanggilan fungsi Function Compute. Secara default, maksimum 300 instance bayar sesuai penggunaan diperbolehkan dalam satu wilayah untuk akun Alibaba Cloud Function Compute.
Saat menggunakan Serverless Workflow untuk memanggil fungsi, pemanggilan tersebut berbagi kuota yang sama dengan pemanggilan fungsi dari layanan lain. Hal ini dapat menyebabkan kesalahan pembatasan laju. Dalam kasus ini, Anda perlu mendefinisikan kebijakan percobaan ulang yang kompleks dalam alur Serverless Workflow, namun hal ini tidak menjamin keberhasilan eksekusi alur.
Jika tugas memerlukan waktu lama untuk dieksekusi, koneksi persisten harus dibuat antara Serverless Workflow dan Function Compute. Kondisi jaringan yang tidak stabil dapat menyebabkan kesalahan tak terduga.
Serverless Workflow memungkinkan Anda menggabungkan fitur pemanggilan fungsi asinkron dengan berbagai pola integrasi untuk mengatasi masalah di atas, sekaligus memenuhi persyaratan berikut:
Dalam beberapa skenario, sistem perlu melanjutkan ke langkah berikut tanpa menunggu penyelesaian eksekusi langkah saat ini.
Jika kesalahan tak terduga terjadi selama eksekusi alur, sistem perlu melewati langkah saat ini dan melanjutkan ke langkah berikutnya.
Skenario
Dalam skenario yang berbeda, Serverless Workflow menggunakan pola permintaan-respon (requestResponse), pola sinkron (sync), atau pola tunggu-balasan (waitForCallback) untuk memanggil fungsi Function Compute secara asinkron.
Pola integrasi | Nilai parameter pola | Skenario |
Pola permintaan-respon (pola default) |
Contoh alur: | Tugas berjalan lama dan hasil eksekusi tugas tidak memiliki konsekuensi. |
Pola sinkronisasi |
Contoh alur: | Tugas berjalan lama dan mungkin dibatasi. |
Pola tunggu-balasan |
Contoh alur: | Saat alur mencapai langkah tertentu, alur perlu melanjutkan ke langkah-langkah berikut tanpa memperhatikan apakah eksekusi langkah saat ini selesai. Contoh skenario adalah audit manual. |
Parameter layanan
Dalam contoh-contoh berikut, Serverless Workflow menggunakan Function Compute sebagai node tugas, menggunakan resourceArn untuk menentukan Function Compute sebagai layanan tujuan, dan menggunakan serviceParams untuk menentukan parameter yang digunakan untuk memanggil fungsi Function Compute. serviceParams mendukung parameter berikut:
InvocationType: jenis pemanggilan fungsi. Nilai valid adalahSyncdanAsync. Sync menunjukkan pemanggilan sinkron, sedangkan Async menunjukkan pemanggilan asinkron.Opsional:
StatefulAsyncInvocationID: ID pemanggilan asinkron stateful. Parameter ini dapat digunakan untuk mencari nama tugas tujuan di konsol Function Compute.CatatanJika Anda mengatur
InvocationTypekeAsyncdan menentukan nilai untuk StatefulAsyncInvocationID, pola pemanggilan fungsi Serverless Workflow adalah pemanggilan asinkron stateful. Nilai parameter StatefulAsyncInvocationID harus unik untuk semua fungsi.
Pola integrasi pemanggilan fungsi asinkron
Pola permintaan-respon
Saat alur mencapai langkah yang ditentukan, Serverless Workflow memanggil fungsi yang ditentukan secara asinkron dan mengeksekusinya. Kemudian, alur melanjutkan ke langkah berikutnya tanpa menunggu panggilan balik atau penyelesaian eksekusi langkah sebelumnya.
version: v1
type: flow
steps:
- type: task
name: mytask
resourceArn: acs:fc:{region}:{account}:services/{serviceName}.{qualifier}/functions/{functionName}
pattern: requestResponse # Pemanggilan asinkron dengan pola sinkron
serviceParams:
InvocationType: AsyncContoh di atas menunjukkan bahwa fungsi dipicu untuk dieksekusi saat alur mencapai langkah mytask. Setelah fungsi dipicu, alur melanjutkan ke langkah berikutnya meskipun eksekusi langkah mytask mungkin belum selesai.
Pola sinkronisasi
Saat alur mencapai langkah yang ditentukan, Serverless Workflow memanggil fungsi yang ditentukan secara asinkron dan mengeksekusinya. Kemudian, alur ditangguhkan dan tidak melanjutkan ke langkah berikutnya sampai alur Serverless Workflow diberi tahu bahwa eksekusi fungsi telah selesai.
version: v1
type: flow
steps:
- type: task
name: mytask
resourceArn: acs:fc:{region}:{account}:services/{serviceName}.{qualifier}/functions/{functionName}
pattern: sync # Pemanggilan asinkron dengan pola sinkron
serviceParams:
InvocationType: AsyncContoh di atas menunjukkan bahwa saat alur mencapai langkah mytask, fungsi dipicu untuk dieksekusi. Kemudian alur ditangguhkan dan tidak melanjutkan ke langkah berikutnya sampai alur diberi tahu bahwa eksekusi fungsi telah selesai.
Penggunaan pola integrasi sinkron serupa dengan penggunaan fitur pemanggilan fungsi sinkron dalam hal operasi, hanya metode pemanggilan fungsi yang berbeda.
Pola tunggu-balasan
Saat alur mencapai langkah yang ditentukan, Serverless Workflow memanggil fungsi secara asinkron, mengeksekusinya, dan memasukkan token tugas. Kemudian, alur ditangguhkan. Terlepas dari apakah eksekusi fungsi selesai, alur tidak melanjutkan ke langkah berikutnya sampai Anda menggunakan token tugas untuk memberi tahu alur secara manual tentang hasil eksekusi fungsi.
version: v1
type: flow
steps:
- type: task
name: mytask
resourceArn: acs:fc:{region}:{account}:services/{serviceName}.{qualifier}/functions/{functionName}
pattern: waitForCallback # Pemanggilan asinkron dengan pola sinkron
serviceParams:
InvocationType: AsyncContoh di atas menunjukkan bahwa fungsi dipicu untuk dieksekusi saat alur mencapai langkah mytask. Setelah fungsi dipicu, alur ditangguhkan untuk menunggu panggilan balik yang diimplementasikan dengan pemanggilan operasi API ReportTaskSucceed atau ReportTaskFailed. Alur tidak melanjutkan ke langkah berikutnya sampai alur menerima dan memproses permintaan panggilan balik. Permintaan panggilan balik diinisiasi oleh Anda, baik saat eksekusi fungsi selesai maupun tidak.
Contoh: pemanggilan fungsi asinkron
Serverless Workflow menggabungkan fitur pemanggilan fungsi asinkron dan fitur pemanggilan asinkron stateful untuk mendukung skenario tipe pekerjaan. Saat mengaktifkan fitur pemanggilan asinkron stateful dan menggunakan pola pemanggilan asinkron, Anda dapat melihat status eksekusi fungsi dan menghentikan eksekusi fungsi saat atau setelah fungsi dipanggil. Hal ini membuat alur lebih mudah diamati dan dioperasikan. Berikut adalah cuplikan bahasa definisi alur (FDL) Serverless Workflow:
version: v1
type: flow
steps:
- type: task
name: mytask
resourceArn: acs:fc:::services/{serviceName}.{qualifier}/functions/{functionName}
pattern: sync # Pemanggilan asinkron dengan pola sinkron
inputMappings:
- target: id
source: $context.execution.name
serviceParams:
InvocationType: Async
StatefulAsyncInvocationID: $.id