RetryPolicies の指数バックオフ
Google Pub/Sub の RetryPolicy で導入された指数バックオフ機能は、github で定義されている ExponentialBackOff で説明されている概念を反映しています。あなたが言及した com/cenkalti/backoff。
最小および最大バックオフ
はい、その通りです。 pubsub.RetryPolicy の MinimumBackoff パラメーターと MaximumBackoff パラメーターは、github.com/cenkalti/backoff の InitialInterval と MaxInterval にそれぞれ対応します。
ランダム化
Cloud Pub/Sub は、github.com と同じ計算式を使用して間隔をランダム化します。 /cenkalti/backoff:
randomized interval = RetryInterval * (random value in range [1 - RandomizationFactor, 1 + RandomizationFactor])
pubsub.RetryPolicy では RandomizationFactor はデフォルトで 0.15 に設定されます。
乗数と MaxElapsedTime
github とは異なります.com/cenkalti/backoff、pubsub.RetryPolicy には、失敗するたびに RetryInterval を 2 倍にする Multiplier に相当するものがありません。代わりに、Pub/Sub の再試行遅延は、RandomizationFactor によって決定される固定率で指数関数的に増加します。
さらに、pubsub.RetryPolicy には明示的な MaxElapsedTime がありません。ただし、Pub/Sub はゴー ルーチン ベースの再試行メカニズムを実装しており、再試行はサブスクリプションを処理するゴー ルーチンの有効期間によって事実上制限されます。
例
あなたの実験は、指数関数的バックオフの動作を正確に示しています。バックオフ間隔が長い (5 秒から 60 秒) と再試行の頻度が低くなり、バックオフ間隔が短い (1 秒から 2 秒) と再試行の頻度が高くなります。間隔の差異は、ランダム化係数によるものです。
以上がgithub.com/cenkalti/backoff と比較して、Google Pub/Sub は RetryPolicies で指数バックオフをどのように実装していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。