Backoff eksponensial

Backoff eksponensial adalah penanganan error standar untuk aplikasi jaringan, di mana klien secara berkala mencoba kembali permintaan yang gagal dengan meningkatnya penundaan di antara permintaan. Sebaiknya klien menggunakan backoff eksponensial untuk semua permintaan ke Memorystore untuk Valkey yang Error kode respons 5xx dan 429 HTTP.

Memahami cara kerja backoff eksponensial adalah penting jika Anda membangun aplikasi klien yang menggunakan REST API Memorystore for Valkey secara langsung.

Jika Anda menggunakan Konsol Google Cloud, konsol akan mengirimkan permintaan ke Memorystore for Valkey atas nama Anda dan menangani setiap permintaan {i>backoff<i}.

Contoh algoritma

Algoritma backoff eksponensial mencoba kembali permintaan dengan meningkatkan secara eksponensial waktu tunggu di antara percobaan ulang hingga waktu backoff maksimum. Contohnya adalah:

  1. Buat permintaan ke Memorystore for Valkey.

  2. Jika permintaan gagal, tunggu 1 + random_number_milliseconds detik dan coba lagi terhadap permintaan.

  3. Jika permintaan gagal, tunggu 2 + random_number_milliseconds detik dan coba lagi terhadap permintaan.

  4. Jika permintaan gagal, tunggu 4 + random_number_milliseconds detik dan coba lagi terhadap permintaan.

  5. Dan seterusnya, hingga maximum_backoff kali.

  6. Tetap menunggu dan mencoba ulang hingga jumlah maksimum percobaan ulang, tetapi jangan menambah periode tunggu antarpercobaan ulang.

dengan:

  • Waktu tunggunya adalah min(((2^n)+random_number_milliseconds), maximum_backoff), dengan n 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 di mana banyak klien yang disinkronkan dengan beberapa situasi dan semua percobaan ulang sekaligus, mengirimkan permintaan secara ombak. Nilai random_number_milliseconds harus dihitung ulang setelah setiap permintaan percobaan ulang.

  • maximum_backoff biasanya 32 atau 64 detik. Nilai yang sesuai bergantung pada kasus penggunaannya.

Anda dapat terus mencoba lagi setelah mencapai waktu maximum_backoff. Percobaan ulang setelah titik ini tidak perlu terus meningkatkan waktu backoff. Sebagai misalnya, jika klien menggunakan waktu maximum_backoff 64 detik, maka setelah mencapai nilai ini, klien dapat mencoba lagi setiap 64 detik. Pada titik tertentu, klien harus dicegah agar tidak melakukan percobaan tanpa henti.

Backoff maksimum dan jumlah percobaan ulang maksimum yang digunakan klien tergantung pada kasus penggunaan dan kondisi jaringan. Misalnya, ponsel aplikasi tertentu mungkin perlu mencoba lagi lebih banyak kali dan untuk 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 mencatat error menggunakan salah satu metode yang tercantum di bagian Mendapatkan dukungan.