1 バックオフの概要

1.1 定義と目的

バックオフとは、通信や制御の処理において衝突、競合、失敗などの事象が発生した際に、即座に同条件へ再試行するのではなく、待機時間を調整してから再試行する方式である。目的は、同時再試行による再衝突や再競合の連鎖を抑え、再送や再実行が全体の性能を悪化させる状況を緩和する点にある。結果として、通信成功率やシステムの安定性、負荷の平準化に寄与する。

1.2 仕組みの基本

1.2.1 再試行タイミングの制御

再試行タイミングは、失敗が観測された後に一定のルールで決定される。代表的には、失敗ごとに待機時間を伸ばす「段階的増加」を行い、試行間の時刻が分散するようにする。これにより、複数の送信主体が同時に失敗した場合でも、次の試行が同時になりにくくなる。待機の終了後は、再送や再実行の可否を改めて評価し、必要に応じて別の状態遷移(中止、別経路への切替など)へ進む。

1.2.2 待機時間の決め方

待機時間は、固定値・増加則・乱数要素の組合せとして設計される。固定方式では常に同じ待機時間を用い、指数方式では試行回数に応じて急速に伸ばす。ランダム化バックオフでは、待機時間に揺らぎを加えて再試行の同期待ちを回避する。加えて、実装ではタイムアウトや最大回数、システム都合による打ち切りを設け、待機が無限に伸びることによるリソース消費や応答性低下を防ぐ。

1.3 用語の関連

バックオフに関連して用いられる概念には、試行間隔、リトライ回数、タイムアウト、ジッタ輻輳、衝突などがある。待機の調整が「再送制御」や「アクセス制御」の文脈で語られることも多い。特にネットワークでは、失敗の種類(衝突、応答欠落、バッファ不足など)に応じてバックオフの適用範囲や決定要因が変わるため、用語の対応関係を整理することが設計の前提になる。

2 バックオフの代表的な方式

2.1 固定バックオフ

固定バックオフは、失敗後の待機時間を一定に保つ方式である。実装が単純で挙動が読みやすい一方、同時に失敗した複数主体がいると、同じ待機時間の終了に合わせて同時に再試行しやすい。そのため、固定方式は単一主体が支配的な環境や、失敗の再同時化が起きにくい条件では有効だが、混雑が強い状況では再衝突の改善効果が限定されることがある。

2.2 指数バックオフ

2.2.1 リトライ回数と待機時間の関係

指数バックオフでは、試行回数(または失敗回数)に比例して待機時間を指数的に増加させる。典型的には初期待機を定め、次の失敗のたびに待機時間を倍率で乗じることで、競合の再発が起きにくい時間幅へ移行する。初期段階では応答性を維持し、繰り返し失敗するほど待機が長くなるため、負荷が高止まりしている環境でも制御が効きやすい。

2.2.2 上限(最大待機時間)の扱い

指数増加は理論上どこまでも伸び得るため、実際の設計では最大待機時間を設定するのが一般的である。上限を設けることで、長期の待機が過度な遅延を招くのを防ぎ、システム全体の体感応答やスケジューリングの予測可能性を確保する。上限到達後は、上限値で頭打ちにするか、上限到達までの増加の後に別の規則へ切り替えるかを決める必要がある。

2.3 ランダム化バックオフ

2.3.1 ジッタの役割

ランダム化バックオフでは、待機時間にランダムな揺らぎを加え、再試行時刻をばらす。ここで用いられる揺らぎはジッタと呼ばれることが多い。ジッタの役割は、同じ失敗履歴を共有しやすい複数の主体が同時に再試行する「同期」を崩すことにある。結果として、衝突や競合の連鎖が短期的に緩和され、平均的な成功までの回数が下がる可能性がある。

2.3.2 乱数範囲の設計

乱数範囲は、待機時間の基準値に対してどの程度広げるかで決まる。範囲が狭いと同期崩しの効果が弱く、広すぎると不要な遅延が増える。さらに、分布(一様、近似的な対数正規など)や乱数生成の品質も影響する。設計では、平均待機と分散のバランス、公平性への配慮、そして実装負荷(乱数生成コスト)を考慮して上限・下限を定める。

2.4 ハイブリッド方式

2.4.1 状況に応じた切替

ハイブリッド方式は、ネットワークや装置の状態に応じてバックオフの規則を切り替える考え方である。たとえば、軽い失敗が続く局面では指数の立ち上がりを控えめにし、輻輳の兆候が強まった場合にはランダム化の比重を増やす、といった適応が行われる。切替のトリガは、失敗回数、観測された遅延、キュー長、応答の欠落率などに基づくことが多い。

2.4.2 調整パラメータ

切替には複数のパラメータが関与する。たとえば初期待機、増加倍率、上限、乱数範囲、切替の境界値、観測窓の長さなどである。パラメータは環境依存性が高く、端末性能、送信レート、チャネル特性によって適合が変わる。したがって設計では、既定値だけでなく、観測量に基づく調整の安定性(過剰反応や振動の抑制)を確保することが重要になる。

3 バックオフが活躍する場面

3.1 メディアアクセス制御

メディアアクセス制御では、複数主体が同一媒体を共有するため、同時送信による衝突が起こり得る。ここでバックオフは、衝突が検出された後の再送を抑制し、次の送信機会の分散を作る役割を担う。特に共有媒体での競合が集中しやすい場面では、待機の規則が性能に直結し、単純な再試行より安定的なスループットにつながる。

3.2 無線通信における衝突回避

無線通信では、電波状態や端末の同時性により衝突や取りこぼしが生じやすい。バックオフは、送信失敗後の再試行を時間的にずらすことで、再衝突の確率を低下させる。加えて、無線では干渉の状態が時間とともに変化するため、待機時間の伸長とランダム化が組み合わさると、環境変化への適応が得られる場合がある。

3.3 再送制御と輻輳回避

再送制御では、応答が得られない、確認応答(ACK)が届かないなどの事象により、パケットの再送が必要になることがある。このときバックオフを使うと、再送が輻輳をさらに悪化させる連鎖を抑えやすい。指数増加は、繰り返し失敗する状況で送信圧力を下げる方向に働き、全体の混雑が緩むまで試行密度を落とす効果が期待される。

3.4 アプリケーション層でのリトライ戦略

アプリケーション層でも、API呼び出しの失敗や一時的なサービス混雑に対してリトライが行われる。ここでバックオフを採用すると、障害やメンテナンス時のアクセス集中によってシステムが崩れる「雪崩」を緩和できる。特に多数クライアントが同時に同じ失敗を観測するケースでは、乱数を混ぜた待機が同時再試行の抑制に有効である。

4 性能・評価と設計の指針

4.1 効果指標(成功率・遅延・公平性)

バックオフの評価では、成功率(一定時間内に成功する割合)、遅延(成功までの待ち時間や応答時間)、公平性(参加者間での機会の偏り)などが指標になる。衝突や競合を減らせても待機が増えすぎると遅延が悪化し得るため、単一指標では判断しにくい。加えて、再試行が連続する主体ほど不利になりやすいなど、公平性の観点も設計要素に含まれる。

4.2 トレードオフ

4.2.1 待ち時間増加と負荷軽減

待機を伸ばすほど再競合の発生は抑えられる傾向があるが、その分サービス開始が遅れ、応答性は下がる。負荷軽減によって全体の成功率が上がる一方、個々のリクエストの体感遅延が増える可能性がある。したがって、混雑度に応じた待機の増加速度や上限設定が重要になる。

4.2.2 反応の鈍さと安定性

指数方式は繰り返し失敗に対して送信圧力を落とすため、安定性を高める方向に働きやすい。ただし、回復の兆しが早期に現れても、待機が長いと再試行が遅れ、機会損失が生じる。ランダム化は同期崩しに効くが、設計次第では平均遅延を押し上げる。安定性と俊敏性は同時に最大化しにくく、目標特性に合わせて調整が必要である。

4.3 パラメータ設計

4.3.1 初期値と増加率

初期待機時間は、短期の再試行可否と応答性に直結する。初期が短すぎると再衝突が増え、長すぎると回復時の取りこぼしが増える。増加率(指数の倍率や段階の幅)も同様に、失敗が続いたときの圧力低下の速さを決める。通常は、失敗頻度の観測や既知の負荷特性に基づき、段階的に調整するアプローチが取られる。

4.3.2 上限と打ち切り条件

上限は遅延の暴走を防ぐための安全策である。加えて、最大試行回数や総経過時間の上限など、打ち切り条件を組み合わせることで、リソース消費やタイムアウト競合を抑える。打ち切り後の挙動(エラー返却、別経路へのフォールバック、ユーザ通知など)も設計対象であり、利用者体験と運用のしやすさに影響する。

4.4 実装上の注意

4.4.1 時刻管理とタイマー精度

待機時間の実現にはタイマーが必要であり、分解能やドリフト、スケジューリング遅延が結果に影響する。特に高負荷時にはタイマー割込みの遅延が積み重なり、予定より長い待機が発生することがある。精度が不十分な場合、バックオフの設計意図(再試行の分散)が崩れるため、実装では時刻計測の基準や補正の方針を明確にすることが望ましい。

4.4.2 冗長な再試行の防止

再試行の回数制限や状態の確認は、冗長なリトライを抑える要点である。たとえば、失敗が恒常的な要因による場合に無制限に再試行すると、ネットワークやサーバへの負荷がさらに増える。実装では、原因推定(認証失敗、入力不備、リソース不足など)に応じて即時中止や別の対処へ分岐することが有効である。さらに、重複要求の抑制やキャンセル処理も、競合の再発を抑える手段になる。