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

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

サーバー間の時刻のずれ Clock skew between servers

原因ID in-clock-skew · 主担当 インフラチーム・サーバーインフラ · 副担当 ゲーム開発チーム・サーバー開発

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

サーバーごとに時計が少しずつずれていると、クールタイム・バフ・イベント開始の判定がサーバーごとに食い違います。

なぜ 時刻同期が止まったサーバーの時計が、ほかのサーバーと数百ms〜数秒ずれる → すると バフの終了時刻のような絶対時刻をサーバー間で受け渡すと判定が食い違う → 画面では 移動したらバフが消える、クールタイムがまた最初から始まる

症状
不発・ロールバック
要因
遅延
誰に起きるか
自分だけ
いつ
移動中・マップ切り替え時
担当
主担当 インフラチーム・サーバーインフラ · 副担当 ゲーム開発チーム・サーバー開発
ゲーム開発チームの対応
サーバー間では絶対時刻の代わりに残り時間で受け渡す。
インフラチームの対応
時刻同期(NTP・chrony)の監視、サーバー間の時刻のずれのアラート。
数値の目安
時刻同期(NTP・chrony)が正常なら、同じデータセンターのサーバー同士では通常数ms以内です。同期が止まったり、仮想サーバーが長く停止してから再開したりすると、数百ms〜数秒に広がります。
グラフでは
徐々に上昇 · サーバーごとの時刻オフセット
確認箇所
サーバーごとにchronyc trackingのSystem time(システム時計とNTP時計の差)・Last offsetとRef time(時刻ソースの測定値を最後に反映した時刻)を集めて比較
該当する場合
問題のサーバーのオフセットがほかのサーバーより数百ms以上ずれているか、Ref timeがずっと前で止まっていて、判定の食い違いがそのサーバーを行き来する移動でだけ起きる
該当しない場合
すべてのサーバーのオフセットが数ms以内なら、ゲーム側の時間計算か、クライアントの時刻同期の誤差側
確認手段
インフラのツールで確認(ゲームコード不要)
もっと詳しく
1台のサーバーの時計が一気に前後へ跳ぶ現象は、サーバーOS層の「システム時刻のジャンプ(NTPステップ)」で扱います。

出典

  1. RFC 5905: Network Time Protocol Version 4: Protocol and Algorithms Specification IETF
    高速なLANのNTPクライアントは通常数百µs以内に合う
  2. chrony – Frequently Asked Questions chrony
    一般的なコンピューターの時計のドリフトは100ppm未満だが、仮想マシンではもっと大きくなりうる、一時停止から再開した仮想マシンは時刻がずれ、ステップ補正が必要になることがある
  3. clock_gettime(2) — Linux manual page Linux man-pages
    CLOCK_REALTIMEは手動変更・NTP補正で不連続に跳ぶことがあり、CLOCK_MONOTONICはそうしたジャンプの影響を受けない
  4. chronyc(1) chrony
    chronyc trackingのSystem time(NTP時計とシステム時計の差)、Last offset(最後の補正時に推定したオフセット)、Ref time(時刻ソースの最後の測定値を反映した時刻)

あわせて読みたい原因

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

同じ症状(不発・ロールバック)を起こすほかの層の原因

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