ゲームラグ白書 › 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ステップ)」で扱います。
出典
- RFC 5905: Network Time Protocol Version 4: Protocol and Algorithms Specification IETF
高速なLANのNTPクライアントは通常数百µs以内に合う - chrony – Frequently Asked Questions chrony
一般的なコンピューターの時計のドリフトは100ppm未満だが、仮想マシンではもっと大きくなりうる、一時停止から再開した仮想マシンは時刻がずれ、ステップ補正が必要になることがある - clock_gettime(2) — Linux manual page Linux man-pages
CLOCK_REALTIMEは手動変更・NTP補正で不連続に跳ぶことがあり、CLOCK_MONOTONICはそうしたジャンプの影響を受けない - chronyc(1) chrony
chronyc trackingのSystem time(NTP時計とシステム時計の差)、Last offset(最後の補正時に推定したオフセット)、Ref time(時刻ソースの最後の測定値を反映した時刻)
あわせて読みたい原因
同じ層:L13 サーバー構成と運用
同じ症状(不発・ロールバック)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る