Backoff eksponensial adalah strategi penanganan error standar
untuk aplikasi jaringan, yang mana klien secara berkala mencoba lagi permintaan yang gagal dengan meningkatkan penundaan antar-permintaan. 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 sangat penting jika Anda:
Membuat aplikasi klien yang menggunakan Memorystore for Redis REST API secara langsung.
Mengakses Memorystore for Redis melalui library klien. Perlu diperhatikan bahwa beberapa library klien, seperti Memorystore for Redis Client Library untuk Node.js, memiliki backoff eksponensial bawaan.
Jika Anda menggunakan Google Cloud Console, konsol akan mengirimkan permintaan ke Memorystore for Redis atas nama Anda dan menangani backoff apa pun yang diperlukan.
Contoh algoritma
Algoritma backoff eksponensial mencoba ulang permintaan secara eksponensial, meningkatkan waktu tunggu antara percobaan ulang hingga waktu backoff maksimum. Contohnya adalah:
Buat permintaan ke Memorystore for Redis.
Jika permintaan gagal, tunggu 1 +
random_number_milliseconds
detik dan coba lagi permintaan tersebut.Jika permintaan gagal, tunggu 2 +
random_number_milliseconds
detik dan coba lagi permintaan tersebut.Jika permintaan gagal, tunggu 4 +
random_number_milliseconds
detik dan coba lagi permintaan tersebut.Dan seterusnya, hingga
maximum_backoff
kali.Lanjutkan menunggu dan mencoba ulang hingga jumlah maksimum percobaan ulang, tetapi jangan meningkatkan waktu tunggu antar-percobaan ulang.
dengan:
Waktu tunggu adalah min(((2^
n
)+random_number_milliseconds
),maximum_backoff
), dengann
bertambah 1 untuk setiap iterasi (permintaan).random_number_milliseconds
adalah jumlah acak milidetik yang kurang dari atau sama dengan 1.000. Hal ini membantu menghindari kasus saat banyak klien disinkronkan oleh suatu situasi dan semua percobaan ulang sekaligus, sehingga mengirimkan permintaan dalam gelombang yang disinkronkan. Nilairandom_number_milliseconds
harus dihitung ulang setelah setiap permintaan percobaan ulang.maximum_backoff
biasanya 32 atau 64 detik. Nilai yang sesuai bergantung pada kasus penggunaan.
Anda dapat terus mencoba ulang setelah mencapai waktu maximum_backoff
.
Percobaan ulang setelah titik 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 titik tertentu,
klien harus dicegah mencoba tanpa batas.
Backoff maksimum dan jumlah percobaan ulang maksimum yang digunakan klien bergantung pada kasus penggunaan dan kondisi jaringan. Misalnya, klien seluler suatu aplikasi mungkin perlu mencoba ulang beberapa kali dan dalam interval yang lebih lama jika dibandingkan dengan klien desktop dari aplikasi yang sama.
Jika permintaan percobaan ulang gagal setelah melebihi jumlah maksimum percobaan ulang, laporkan atau catat error ke dalam log menggunakan salah satu metode yang tercantum di bagian Mendapatkan dukungan.