指數輪詢

指數輪詢是網路應用程式的標準錯誤處理策略,用戶端會定期重試失敗的要求,同時逐漸增加每次要求之間的延遲時間。針對所有傳送給 Memorystore for Redis 用戶端且會回傳 HTTP 5xx429 回應碼錯誤的要求,用戶端皆應使用指數輪詢。

如果您正在進行下列作業,請務必要清楚瞭解指數輪詢的運作方式:

如果您目前使用 Google Cloud 控制台,控制台會代表您向 Memorystore for Redis 傳送要求,並處理所有必要的輪詢。

演算法範例

指數輪詢演算法會以指數方式重試要求,並將每次重試之間的等待時間逐漸增加至最大輪詢時間,範例如下:

  1. 向 Memorystore for Redis 提出要求。

  2. 如果要求失敗,請等待 1 + random_number_milliseconds 秒後再重試要求。

  3. 如果要求失敗,請等待 2 + random_number_milliseconds 秒後再重試要求。

  4. 如果要求失敗,請等待 4 + random_number_milliseconds 秒後再重試要求。

  5. 依此類推,時間上限為 maximum_backoff

  6. 繼續等待和重試,直到重試次數達特定上限,但不再增加每次重試之間的等待時間。

其中:

  • 等待時間為 (((2^n)+random_number_milliseconds), maximum_backoff),n 會在每次疊代 (要求) 時增加 1。

  • random_number_milliseconds 是小於或等於 1000 的隨機毫秒數。這種設定有助於避免多個用戶端在特定情況下全部同步進行處理並同時重試,導致同步傳送每一波要求。random_number_milliseconds 的值應在每次重試要求後重新計算。

  • maximum_backoff 通常是 32 或 64 秒,適合的值視用途而異。

重試達到 maximum_backoff 時間上限後,還是可以繼續重試,但接下來的重試工作就不需繼續增加輪詢時間。舉例來說,如果用戶端使用的 maximum_backoff 時間上限是 64 秒,達到這個值之後,用戶端就可以維持在每 64 秒重試一次的頻率。到了特定時間點後,用戶端應停止無限重試。

用戶端使用的最大延遲時間和重試次數上限,取決於用途和網路狀況。舉例來說,比起桌面用戶端,同一應用程式的行動用戶端可能需要更多重試次數,且重試等待時間也需拉長。

如果超過重試次數上限後,重試要求仍舊失敗,請使用取得支援部分列出的任一方法回報或記錄錯誤。