Backoff eksponensial adalah strategi penanganan error standar untuk aplikasi jaringan, yang mana klien secara berkala mencoba lagi permintaan yang gagal, dengan menambah lamanya penundaan antara setiap permintaan yang gagal. Klien harus menggunakan backoff eksponensial untuk semua permintaan ke Memorystore for Redis yang menampilkan error kode respons HTTP 5xx dan 429.
Memahami cara kerja backoff eksponensial penting jika Anda:
Membangun aplikasi klien yang menggunakan REST API Memorystore for Redis secara langsung.
Mengakses Memorystore for Redis melalui library klien. Perhatikan bahwa beberapa library klien, seperti Library Klien Memorystore for Redis untuk Node.js, memiliki backoff eksponensial bawaan.
Jika Anda menggunakan konsolGoogle Cloud , konsol akan mengirim permintaan ke Memorystore for Redis atas nama Anda dan menangani semua penundaan yang diperlukan.
Contoh algoritma
Algoritma backoff eksponensial mencoba ulang permintaan secara eksponensial, dengan meningkatkan waktu tunggu antar-percobaan ulang hingga waktu backoff maksimum. Contohnya adalah:
Buat permintaan ke Memorystore for Redis.
Jika permintaan gagal, tunggu 1 +
random_number_millisecondsdetik dan coba lagi permintaan tersebut.Jika permintaan gagal, tunggu 2 +
random_number_millisecondsdetik dan coba lagi permintaan tersebut.Jika permintaan gagal, tunggu 4 +
random_number_millisecondsdetik dan coba lagi permintaan tersebut.Dan seterusnya, hingga
maximum_backoffkali.Lanjutkan menunggu dan mencoba ulang hingga jumlah maksimum percobaan ulang, tetapi jangan tambah waktu tunggu antar-percobaan ulang.
dengan:
Waktu tunggu adalah min(((2^
n)+random_number_milliseconds),maximum_backoff), dengannbertambah 1 untuk setiap iterasi (permintaan).random_number_millisecondsadalah jumlah acak milidetik yang kurang dari atau sama dengan 1.000. Hal ini membantu menghindari kasus saat banyak klien disinkronkan oleh beberapa situasi dan semua mencoba lagi secara bersamaan, sehingga mengirimkan permintaan dalam gelombang yang disinkronkan. Nilairandom_number_millisecondsharus dihitung ulang setelah setiap permintaan coba lagi.maximum_backoffbiasanya 32 atau 64 detik. Nilai yang sesuai bergantung pada kasus penggunaan.
Anda dapat terus mencoba lagi setelah mencapai waktu maximum_backoff.
Percobaan ulang setelah tahap ini tidak perlu terus meningkatkan waktu backoff. Misalnya, jika klien menggunakan waktu maximum_backoff 64 detik, setelah
mencapai nilai ini, klien dapat mencoba lagi setiap 64 detik. Pada saat tertentu,
klien seharusnya dicegah untuk mencoba ulang tanpa batas waktu.
Penundaan maksimum dan jumlah maksimum percobaan ulang yang digunakan klien bergantung pada kasus penggunaan dan kondisi jaringan. Misalnya, klien seluler aplikasi mungkin perlu mencoba ulang lebih banyak kali dan dengan interval yang lebih lama jika dibandingkan dengan klien desktop aplikasi yang sama.
Jika permintaan percobaan ulang gagal setelah Anda melebihi jumlah percobaan ulang maksimum, laporkan atau catat error menggunakan salah satu metode yang tercantum di Mendapatkan dukungan.