Kegagalan sementara—seperti gangguan jaringan sesaat, overload layanan sementara, atau reset koneksi—dapat menyebabkan permintaan individual gagal meskipun layanan backend dalam kondisi sehat. Kebijakan retry pada gateway cloud-native Anda secara otomatis mengirim ulang permintaan yang gagal sehingga aplikasi dapat pulih tanpa perubahan di sisi klien. Konfigurasikan kebijakan retry pada tingkat entri rute di Microservices Engine (MSE).
Retry meningkatkan jumlah total permintaan ke layanan backend. Tetapkan batas retry secara konservatif (0, 1, atau 2) untuk menghindari membebani layanan yang sudah terdegradasi.
Cara kerja
Saat sebuah permintaan memenuhi kondisi retry, gateway mengirim ulang permintaan tersebut hingga mencapai jumlah maksimum yang dikonfigurasi.
Perilaku default (tanpa kebijakan kustom): Gateway melakukan retry terhadap permintaan yang gagal hingga 2 kali menggunakan kondisi berikut: connect-failure, refused-stream, unavailable, cancelled, dan retriable-status-codes. Perilaku default ini tetap berlaku bahkan ketika kebijakan retry kustom dinonaktifkan.
Menonaktifkan kebijakan retry kustom tidak menghentikan semua retry. Gateway akan kembali ke perilaku default yang dijelaskan di atas. Untuk menghentikan retry sepenuhnya, aktifkan kebijakan kustom dan atur Retry Times menjadi 0.
Kondisi retry
Gateway mendukung kondisi retry terpisah untuk traffic HTTP dan gRPC.
Kondisi retry HTTP
| Condition | Triggers a retry when... |
|---|---|
5xx | Backend mengembalikan kode status 5xx apa pun, atau terjadi disconnect, reset, atau read timeout. Ini merupakan superset yang mencakup connect-failure dan refused-stream. |
reset | Terjadi disconnect, reset, atau read timeout (tidak ada respons dari backend). |
connect-failure | Permintaan gagal karena disconnection. |
refused-stream | Backend mengembalikan kode kesalahan REFUSED_STREAM. |
retriable-status-codes | Backend mengembalikan salah satu kode status yang ditentukan di Retry Status Code. |
Tentukan kode status di Retry Status Code hanya ketika retriable-status-codes dipilih sebagai kondisi retry.
Kondisi retry gRPC
| Condition | gRPC status code | Typical cause |
|---|---|---|
cancelled | CANCELLED (1) | Pemanggil membatalkan operasi. |
deadline-exceeded | DEADLINE_EXCEEDED (4) | Operasi mengalami timeout. |
internal | INTERNAL (13) | Terjadi kesalahan internal server. |
resource-exhausted | RESOURCE_EXHAUSTED (8) | Batas resource tercapai (misalnya, rate limiting). |
unavailable | UNAVAILABLE (14) | Layanan sementara tidak tersedia. |
Kondisi yang direkomendasikan berdasarkan jenis traffic
| Traffic type | Recommended conditions | Use case |
|---|---|---|
| HTTP | 5xx | Retry tujuan umum untuk kesalahan server dan masalah koneksi. Mencakup connect-failure dan refused-stream. |
| HTTP | connect-failure, refused-stream | Retry hanya pada kegagalan tingkat koneksi, bukan pada respons 5xx. |
| HTTP | retriable-status-codes | Retry pada kode status tertentu seperti 429 (rate limited) atau 503 (service unavailable). |
| gRPC | cancelled, unavailable | Pasangan retry standar untuk layanan gRPC. |
Prasyarat
Sebelum memulai, pastikan Anda telah:
Gateway cloud-native yang dibangun di MSE
Mengonfigurasi setidaknya satu entri rute pada gateway
Konfigurasikan kebijakan retry
Masuk ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
Di panel navigasi kiri, pilih Cloud-native Gateway > Gateways. Klik nama gateway tersebut.
Di panel navigasi kiri, klik Routes, lalu klik tab Routes.
Temukan entri rute yang ingin diubah, lalu klik Policies di kolom Actions.
Klik tab Retry.
Konfigurasikan parameter berikut, lalu klik OK.
Parameter Description Retry Times Jumlah maksimum upaya retry. Nilai valid: 0 hingga 10. Direkomendasikan: 0, 1, atau 2. Nilai 0menonaktifkan retry sepenuhnya.Retry Condition Satu atau beberapa kondisi yang memicu retry. Lihat Kondisi retry. Retry Status Code Satu atau beberapa kode status HTTP yang memicu retry. Hanya berlaku ketika retriable-status-codesdipilih untuk Retry Condition.Enable Aktifkan sakelar untuk menerapkan kebijakan retry. Nonaktifkan sakelar untuk menonaktifkannya.
Verifikasi kebijakan retry
Setelah Anda mengaktifkan kebijakan retry, verifikasi bahwa kebijakan tersebut berfungsi sesuai harapan:
Simulasikan kegagalan backend yang sesuai dengan kondisi retry yang dikonfigurasi (misalnya, kembalikan respons
503atau putuskan koneksi).Kirim permintaan melalui gateway ke entri rute yang terpengaruh.
Periksa log akses backend untuk memastikan gateway melakukan retry permintaan sejumlah kali yang diharapkan.
Idempotensi dan retry storms
Idempotensi: Aktifkan retry hanya untuk operasi idempoten—permintaan yang menghasilkan hasil yang sama meskipun diulang. Melakukan retry pada operasi non-idempoten seperti pengiriman pembayaran dapat menyebabkan efek samping duplikat.
Retry storms: Dalam skenario lalu lintas tinggi, pengaturan retry yang agresif dapat memperparah beban pada layanan backend yang terdegradasi. Gabungkan kebijakan retry dengan kebijakan Pemutus sirkuit atau Pembatasan laju untuk melindungi layanan backend.
Operasi terkait
Konfigurasikan kebijakan timeout — Mengontrol waktu maksimum yang ditunggu gateway untuk respons dari backend.
Konfigurasikan kebijakan Pemutus sirkuit — Secara otomatis menghentikan penerusan permintaan ke layanan backend yang tidak sehat.