私が見たサンプルコードです。バックオフ戦略にランダムジッタが適用されるのはなぜですか?
int expBackoff = (int) Math.pow(2, retryCount);
int maxJitter = (int) Math.ceil(expBackoff*0.2);
int finalBackoff = expBackoff + random.nextInt(maxJitter);
ランダムジッタを使用する利点は何ですか?
私が見たサンプルコードです。バックオフ戦略にランダムジッタが適用されるのはなぜですか?
int expBackoff = (int) Math.pow(2, retryCount);
int maxJitter = (int) Math.ceil(expBackoff*0.2);
int finalBackoff = expBackoff + random.nextInt(maxJitter);
ランダムジッタを使用する利点は何ですか?
メッセージを送信する複数のクライアントがあるとします。彼らはすべて後退することに決めました。同じ決定論的アルゴリズムを使用して待機時間を決定すると、それらはすべて同じ時間に再試行され、別の衝突が発生します。ランダムな要素を追加すると、再試行が分割されます。
要求されているリソース上のトラフィックをスムーズにします。
リクエストが特定の時間に失敗した場合、他のリクエストがほぼ同じ時刻に失敗する可能性があります。これらの要求のすべてが同じ決定論的なバックオフ戦略(たとえば、1,2,4,8,16秒後に再試行)に従うと、初めて失敗した人はほぼ同じ時刻に再試行し、サービスが処理できるよりも多くの同時リクエストが発生し、より多くの失敗が発生する可能性があります。同じ要求のこの同じクラスタは繰り返し再発する可能性があり、再試行スパイク以外のサービスの全体的な負荷レベルが小さい場合でも、繰り返し失敗する可能性があります。
ジッタを導入することで、失敗したリクエストの最初のグループを非常に小さなウィンドウ、たとえば100msでクラスタ化できますが、再試行サイクルごとに、要求のクラスタが大きくて大きな時間ウィンドウに広がり、与えられた時間にスパイク。このサービスは、十分に大きなウィンドウに広がったときに要求を処理できる可能性があります。