Dokumen ini menjelaskan cara mengonfigurasi percobaan ulang untuk fungsi Cloud Run berbasis peristiwa.
Seperti yang dijelaskan dalam Peristiwa percobaan ulang, jika tujuan pesan Pub/Sub tidak dapat mengonfirmasi pesan, respons Pub/Sub default adalah mengirim pesan lagi dengan backoff eksponensial. Backoff eksponensial memungkinkan Anda menambahkan penundaan yang semakin lama di antara upaya percobaan ulang. Namun, ini mungkin bukan perilaku yang Anda inginkan untuk penerapan tertentu.
Properti percobaan ulang tidak diterapkan pada fungsi itu sendiri, tetapi pada pemicu Eventarc yang memanggil fungsi, yang memberikan lebih banyak fleksibilitas. Artinya, untuk tujuan Cloud Run (termasuk fungsi Cloud Run yang dibuat dengan Cloud Run Admin API atau Cloud Functions v2 API), Anda dapat mengonfigurasi satu upaya pengiriman tanpa percobaan ulang. Ini adalah konfigurasi default saat Anda membuat pemicu Eventarc di Google Cloud konsol dari halaman Cloud Run. Untuk mengetahui informasi selengkapnya, lihat Membuat pemicu dengan Eventarc.
Alasan fungsi berbasis peristiwa gagal diselesaikan
Fungsi berbasis peristiwa dapat gagal diselesaikan karena terjadi error pada kode fungsi itu sendiri. Alasan terjadinya hal ini meliputi:
- Fungsi berisi bug dan runtime menampilkan pengecualian.
- Fungsi tersebut tidak dapat menjangkau endpoint layanan, atau waktu habis saat mencoba melakukannya.
- Fungsi sengaja menampilkan pengecualian (misalnya, saat parameter menggagalkan validasi).
- Fungsi Node.js menampilkan promise yang ditolak, atau meneruskan nilai non-
nullke callback. - Terkadang, fungsi keluar sebelum waktunya karena terjadi error internal, dan secara default, fungsi tersebut akan atau tidak akan dicoba ulang secara otomatis.
Dalam kasus ini, fungsi akan berhenti dijalankan dan menampilkan error. Pemicu peristiwa yang menghasilkan pesan memiliki kebijakan percobaan ulang yang dapat Anda sesuaikan untuk memenuhi kebutuhan fungsi Anda.
Mengonfigurasi kebijakan percobaan ulang
Bergantung pada kebutuhan fungsi Cloud Run Anda, Anda mungkin ingin mengonfigurasi kebijakan percobaan ulang melalui kebijakan percobaan ulang langganan Pub/Sub yang terkait dengan pemicu Eventarc Anda. Dengan begitu, Anda akan dapat menyiapkan kombinasi berikut:
- Mempersingkat periode percobaan ulang dari 7 hari menjadi hanya 10 menit.
- Mengubah waktu backoff minimum dan maksimum untuk strategi percobaan ulang backoff eksponensial.
- Mengubah strategi percobaan ulang untuk mencoba ulang dengan seketika.
- Mengonfigurasi topik yang dihentikan pengirimannya.
- Menetapkan jumlah upaya pengiriman maksimum dan minimum.
Untuk mengonfigurasi kebijakan percobaan ulang:
- Tulis fungsi HTTP.
- Gunakan Pub/Sub API untuk membuat langganan Pub/Sub, dengan menentukan URL fungsi sebagai target.
Lihat dokumentasi Eventarc tentang percobaan ulang peristiwa untuk mengetahui praktik terbaik tambahan, seperti membuat fungsi berbasis peristiwa yang dapat dicoba ulang menjadi idempoten.
Lihat dokumentasi Pub/Sub mengenai penanganan kegagalan untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi Pub/Sub secara langsung.
Praktik terbaik
Bagian ini menjelaskan praktik terbaik untuk menggunakan percobaan ulang.
Menggunakan percobaan ulang untuk menangani error sementara
Karena fungsi terus dicoba ulang hingga berhasil dijalankan, error permanen, seperti bug, harus dihilangkan dari kode Anda melalui pengujian menyeluruh sebelum percobaan ulang diaktifkan. Percobaan ulang paling baik digunakan untuk menangani kegagalan yang terputus-putus atau sementara yang sangat mungkin akan teratasi melalui percobaan ulang, seperti endpoint layanan yang tidak stabil atau waktu tunggu habis.
Menetapkan kondisi akhir agar percobaan ulang tidak terjebak dalam loop tanpa henti
Salah satu praktik terbaik adalah melindungi fungsi Anda dari loop terus-menerus saat menggunakan percobaan ulang. Anda dapat melakukannya dengan menyertakan kondisi akhir yang ditetapkan dengan baik, sebelum fungsi mulai diproses. Ingat bahwa teknik ini hanya berfungsi jika fungsi Anda berhasil dimulai dan dapat mengevaluasi kondisi akhir.
Pendekatan yang efektif adalah dengan menghapus peristiwa yang memiliki stempel waktu lebih lama dari rentang waktu tertentu. Langkah ini dapat menghindari eksekusi berlebihan saat kegagalan terus-menerus terjadi atau berlangsung lebih lama daripada perkiraan.
Misalnya, cuplikan kode ini menghapus semua peristiwa yang lebih lama dari 10 detik:
Node.js
Python
Go
Java
C#
Ruby
PHP
Membedakan antara fungsi yang dapat dicoba ulang dan error fatal
Jika fungsi Anda mengaktifkan percobaan ulang, error yang tidak ditangani akan memicu percobaan ulang. Pastikan kode Anda menangkap error yang seharusnya tidak menyebabkan percobaan ulang.
Node.js
Python
Go
Java
C#
Ruby
PHP
Langkah berikutnya
- Men-deploy Cloud Run Function
- Membuat pemicu dari peristiwa Pub/Sub
- Membuat pemicu dari peristiwa Cloud Storage
- Memicu fungsi dari Pub/Sub menggunakan Eventarc
- Memicu fungsi dari Cloud Storage menggunakan Eventarc