ゲームラグ白書 › L13 サーバー構成と運用
カスケード障害 Cascading failure
原因ID in-cascade · 主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・ネットワークインフラ
図と実験のあるメインページでこのカードを開く →
1つのサービスが遅くなると、それを呼び出すサーバーが応答待ちで塞がり、関係のない機能まで止まります。
なぜ DB・認証など1つのサービスが遅くなる → すると 呼び出し側サーバーのスレッドと接続が応答待ちで塞がり、失敗したリクエストの再試行が負荷を上乗せ → 画面では 関係なさそうな機能まで、すべて遅くなるか止まる
- 症状
- フリーズ, 入力遅延, 接続不可・無限ロード
- 要因
- ストール
- 誰に起きるか
- サーバー全体
- いつ
- 人が集中したとき, ときどきランダムに
- 担当
- 主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・ネットワークインフラ
- ゲーム開発チームの対応
- すべての呼び出しにタイムアウト、サーキットブレーカー、機能ごとの隔離(バルクヘッド)、再試行は間隔を広げながら回数を制限、ヘルスチェックの応答は重い処理と分離。
- インフラチームの対応
- ロードバランサーのヘルスチェックが一時的に遅いだけのサーバーをすぐ外さないよう、失敗回数・間隔に余裕を持たせる、一度に外れるサーバー数の制限。
- グラフでは
- 上限で頭打ち · サービスごとの応答時間・エラー率、スレッド・コネクションの使用数
- 確認箇所
- サービスごとの応答時間・エラー率・再試行回数を時間軸をそろえて1画面に並べ、最初に遅くなった箇所を探す。ロードバランサーの後ろなら、ターゲットの応答時間(AWS ALBではTargetResponseTime)、ターゲットの5xx数(HTTPCode_Target_5XX_Count)、異常として外れたターゲット数(UnHealthyHostCount)
- 該当する場合
- 1つのサービスの遅延が先に上がり、続いてそのサービスを呼び出す側のスレッド・コネクション使用数が上限に張り付き、エラーがほかのサービスへ広がり、再試行回数と外れたターゲット数も一緒に増える
- 該当しない場合
- 複数のサービスが同じ瞬間に一斉に遅くなったなら、共用リソース(DB、ネットワーク、ホスト)の障害から確認
- 確認手段
- インフラのツールで確認(ゲームコード不要)
- もっと詳しく
- ヘルスチェック(生きているかを確認する検査)も連鎖を広げます。忙しいサーバーがチェックへの応答に遅れると、ロードバランサーが正常なサーバーを外してしまい、そのトラフィックが残りのサーバーに集中して次のサーバーも遅くなります。
- 実際の事例
- Riot Games 2020: League of Legendsの欧州・ブラジルサーバーでのエッジホスト過負荷
Riot Games 2021: League of Legends EUWの5時間障害:補助的なDB一つでサーバー全体が停止
Roblox 2021: Robloxの73時間障害:サービスディスカバリ(Consul)クラスターでの競合
AWS 2021: AWS us-east-1の内部ネットワーク輻輳
AWS 2025: AWS us-east-1のDynamoDB DNS障害と長引いた復旧
出典
- Site Reliability Engineering, Chapter 22: Addressing Cascading Failures Google
過負荷のサーバーがヘルスチェックに失敗して外れると残りのサーバーに負荷が集中し、再試行が負荷を増やす、再試行回数の制限・ランダム化した指数バックオフ・デッドラインを推奨 - Circuit Breaker Pattern Microsoft Azure
タイムアウトまで詰まったリクエストがスレッド・DB接続を占有し、関係のない機能まで失敗させる、一定時間内に失敗がたまると呼び出しを即座に拒否 - Timeouts, retries, and backoff with jitter AWS
Amazon Builders' Library。5段の呼び出しで各層が3回ずつ再試行するとDB負荷は243倍、再試行は1か所だけで行い、トークンバケットで制限 - CloudWatch metrics for your Application Load Balancer AWS
TargetResponseTime(リクエストがロードバランサーを出てからターゲットが応答を開始するまでの時間)、HTTPCode_Target_5XX_Count(ターゲットが返した5xxの数)、UnHealthyHostCount(異常なターゲットの数)
あわせて読みたい原因
同じ層:L13 サーバー構成と運用
同じ症状(フリーズ)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る