【ネットワーク】再試行の間隔を指数関数的に延ばす!「エスポネンシャルバックオフ」|情報処理問題1000本ノック
応用情報技術者試験やネットワークスペシャリスト試験、システムアーキテクト試験で頻出のシステム負荷分散・障害耐性アルゴリズム。「エスポネンシャルバックオフ(Exponential Backoff)」の定義と、システムダウンを防ぐ仕組みを攻略しましょう。
1. 【 問題 】:テクノロジ系(ネットワーク・システム設計・Web API)
【 問題 】 通信エラーやサーバ過負荷が発生した際の再試行(リトライ)制御アルゴリズムに関する記述です。一時的な通信障害やサーバ混雑によるエラーが発生した際、即座に再リクエストを送るのではなく、再試行の失敗回数に応じて待機時間(リトライ間隔)を「1秒、2秒、4秒、8秒…」のように指数関数的に増やしていく制御手法は、次のうちどれか。
(ア)サーキットブレーカー(Circuit Breaker)
(イ)エスポネンシャルバックオフ(Exponential Backoff)
(ウ)ロードバランシング(Load Balancing)
(エ)レートリミット(Rate Limiting)
2. 正解:
正解:(イ)エスポネンシャルバックオフ(Exponential Backoff)
3. 解説:「『混んでいるときは少しずつ様子見の時間を延ばす』優しさ!」
通信エラーが起きたとき、多数のクライアントが一斉に「即時再リトライ」を行うと、復旧しかけたサーバに攻撃(DoS攻撃)のような負荷が集中し、システムが完全にダウンしてしまいます。
エスポネンシャルバックオフは、待機時間を指数関数的(2の乗数など)に延ばすことで、サーバの負荷を逃がし復旧の隙間を作るアルゴリズムです。
| 用語名 | 制御のメカニズム・目的 |
|---|---|
| (イ)エスポネンシャルバックオフ | エラー発生時、再試行(リトライ)間隔を「1, 2, 4, 8, 16秒…」と指数関数的に延ばしてサーバ過負荷を防ぐ。 |
| (ア)サーキットブレーカー | 障害が発生している外部サービスへの呼び出しを「遮断(遮断機を下ろす)」し、無駄な呼び出しによるシステム共倒れを防ぐ。 |
| (エ)レートリミット | 一定時間内のリクエスト数を制限(例:1分間に100回まで)し、APIの乱用を防ぐ。 |
| (ウ)ロードバランシング | 複数のサーバにアクセスを均等に分散(負荷分散)させる。 |
1. 理解のコツ:
・「Exponential(指数関数的)」「Back off(後退する・控える)」という名前の通りです。
・実務では、完全に規則正しくリトライすると同じタイミングでリクエストが重なるため、乱数(ランダムな揺らぎ)を加える「Jitter(ジッター)」と組み合わせて運用されるのが一般的です。
2. 試験対策の視点:
問題文に「エラー時の再試行(リトライ)」「待機時間を段階的に(指数関数的に)延ばす」「サーバの過負荷・輻輳(ふくそう)を防ぐ」と出たら、迷わずエスポネンシャルバックオフを選択しましょう!
4. まとめ
エラー発生時の再試行間隔を指数関数的に増加させ、サーバへの負荷集中を防ぐリトライ制御アルゴリズム。これがエスポネンシャルバックオフです。AWSやGoogle CloudなどのクラウドAPIやネットワーク通信の必須知識としてしっかりマスターしておきましょう!