한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

ゲームラグ白書 › L13 サーバー構成と運用

ゲートウェイ・プロキシ経由 Gateway / proxy hop

原因ID in-gateway · 主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ, ゲーム開発チーム・クライアント開発

図と実験のあるメインページでこのカードを開く →

クライアントとゲームサーバーの間に中継サーバーを置くと、経由するたびに処理時間が加わり、そのサーバーが単一障害点になります。

なぜ クライアント ↔ ゲートウェイ ↔ ゲームサーバーの構成 → すると 中継サーバーでの処理・待ちが加わり、過負荷になると全員に影響 → 画面では 全体のPingが上昇、ゲートウェイ障害時はそこを経由するユーザー全員が切断

症状
入力遅延, 切断
要因
遅延, ストール
誰に起きるか
サーバー全体
いつ
人が集中したとき, 常に
担当
主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ, ゲーム開発チーム・クライアント開発
ゲーム開発チームの対応
サーバー:ゲートウェイを複数台に増やせる構成、ゲートウェイが落ちても別のゲートウェイにつなぎ直せばキャラクターがそのまま引き継がれる仕組み(セッション再接続)。クライアント:ゲートウェイとの接続が切れたら自動で再接続。
インフラチームの対応
ゲートウェイの水平スケーリング(台数追加)、ゲートウェイごとのCPU・接続数・処理遅延の監視。
数値の目安
同じデータセンター内なので、普段は1回の経由で1ms未満です。ゲートウェイが過負荷になると数十〜数百msに延びます。
グラフでは
人数・負荷に連動して上昇 · ゲートウェイの処理遅延、ゲートウェイのCPU・接続数
確認箇所
ゲートウェイのCPU・接続数とゲートウェイのソケットのRecv-Q(ss・netstat)、ゲートウェイを通る前と後の遅延の差。サービスメッシュを経由するHTTP・gRPC呼び出しなら、Istioの標準メトリクスistio_request_duration_millisecondsを送信側(reporter=source)と受信側(reporter=destination)に分けて比較
該当する場合
ゲームサーバーの処理時間は変わらないのにゲートウェイ区間の遅延だけが増え、その時刻にゲートウェイのCPUが飽和しているかRecv-Qがたまっている
該当しない場合
ゲートウェイを経由しない経路(直接接続、別のゲートウェイ)も同じように遅ければ、回線かゲームサーバー側
確認手段
インフラのツールで確認(ゲームコード不要)
もっと詳しく
サービスメッシュ(Istioなど)を使うと、サーバーごとに横に付くサイドカープロキシ(Envoy)も1段加わります。サービス間のリクエストは送信側のサイドカーと受信側のサイドカーを順に経由し、プロキシにログ・メトリクス収集などの機能を足すほど、処理時間と待ち時間が増えます。
実際の事例
Riot Games 2020: League of Legendsの欧州・ブラジルサーバーでのエッジホスト過負荷

出典

  1. The Unique Architecture behind Amazon Games’ Seamless MMO New World AWS
    New Worldでは、クライアントがパブリックアドレスを持つ入口サーバー(REP)4台のうち1台に接続し、その後ろのシミュレーションサーバー(ハブ)と通信
  2. Designs, Lessons and Advice from Building Large Distributed Systems Google
    LADIS 2009の基調講演(Jeff Dean)。同じデータセンター内の往復は約0.5ms
  3. Site Reliability Engineering, Chapter 22: Addressing Cascading Failures Google
    過負荷でキューが長くなると、待ち時間が処理時間の数倍に延びる(処理100ms、キューがスレッド数の10倍なら1.1秒)
  4. Performance and Scalability Istio
    サイドカーモードでは、リクエストは送信側と受信側のサイドカープロキシを順に経由、機能を足すほどプロキシ内の処理経路が長くなり、テレメトリ収集が次のリクエストの待ち時間を延ばす
  5. What is Envoy Envoy
    Envoyはすべてのアプリケーションサーバーの横で別に動くプロセスで、アプリはlocalhostのEnvoyを経由して通信
  6. Istio Standard Metrics Istio
    istio_request_duration_milliseconds(HTTP・gRPCリクエストの処理時間の分布)、reporterラベルで送信側(source)・受信側(destination)のプロキシを区別
  7. netstat(8) — Linux manual page net-tools
    Recv-Q:接続済みソケットで、ユーザープログラムがまだ読み取っていないバイト数

あわせて読みたい原因

同じ層:L13 サーバー構成と運用

同じ症状(入力遅延)を起こすほかの層の原因

図と実験のあるメインページでこのカードを見る