バックオフ & レート制限
リトライ・バックオフ戦略とレート制限アルゴリズムを、パラメータ可変のリアルタイム可視化で比較します。
試行ごとの遅延
このツールについて
バックオフモードは6つの戦略の試行ごとの遅延を並べて描画します — 固定、線形、指数、そしてAWSのジッター変種(full、equal、decorrelated) — 各戦略がリトライをどれだけ分散させ、総待機時間がどうなるかが一目で分かります。基本遅延・倍率・上限・試行回数を調整し、ジッターを引き直して分布を確認できます。
レート制限モードはトークンバケット、リーキーバケット、固定ウィンドウ、スライディングウィンドウを同じトラフィックでシミュレートし、各リクエストを許可/制限としてタイムラインに表示します。上限・ウィンドウ・リクエスト率・初期バーストを調整すると、アルゴリズム間の違いがどこで分かれるか正確に見えます。
よくある質問
なぜ指数バックオフにジッターを加えるのですか?+
ジッターがないと、同じ瞬間に失敗したクライアントが同じ瞬間にリトライし、サーバーを再び過負荷にします(thundering herd)。ジッターは遅延をランダム化してリトライを分散させます。AWSがfullまたはdecorrelatedジッターを推奨する理由です。
fullジッターとequalジッターの違いは?+
fullジッターは[0, exp]の一様分布から遅延を選び分散が最大ですが、ごく早くリトライすることがあります。equalジッターは指数遅延の半分を固定し残り半分だけランダム化し、分散を少し犠牲に最小待機を保証します。
トークンバケット vs リーキーバケット、どちらを使う?+
トークンバケットは容量までバーストを許可し、その後はリフィル速度に落ち着きます — スパイクを許容するAPIに適します。リーキーバケットはバーストに関係なく滑らかな一定出力率を強制します — 下流にスパイクを送ってはいけない場合に適します。
固定ウィンドウはなぜ2倍のバーストを許すのですか?+
固定ウィンドウは境界でカウンターをリセットするため、クライアントはリセット直前に上限分、直後にまた上限分を送れ、境界をまたいで最大2倍通せます。スライディングウィンドウは移動区間で数えてこれを防ぎます。
ジッターは本当にランダムですか?+
他のパラメータを調整する間チャートが揺れないよう、シード付きPRNGを使います。「ジッターを引き直す」はシードを変えて別のサンプルを表示します。実際のクライアントは真の乱数源を使うべきです。