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

遊戲 Lag 白皮書 › L13 伺服器架構與維運

伺服器之間的時鐘差異 Clock skew between servers

原因 ID in-clock-skew · 主要負責 基礎設施團隊(伺服器基礎設施) · 協同 遊戲開發團隊(伺服器開發)

在含圖解與實驗的完整版中開啟卡片 →

各伺服器的時鐘各差一點時,冷卻時間、buff、活動開始的判定就會在伺服器之間對不上。

為什麼 時間同步停止的伺服器,時鐘與其他伺服器相差數百 ms~數秒 → 於是 在伺服器之間傳遞 buff 結束時間這類絕對時間,判定就會對不上 → 畫面上 一移動 buff 就消失,或冷卻重新開始計算

症狀
吃指令/回檔
因素
延遲
誰會遇到
只有我
何時
移動中/切換地圖時
負責單位
主要負責 基礎設施團隊(伺服器基礎設施) · 協同 遊戲開發團隊(伺服器開發)
遊戲開發團隊要做的事
伺服器之間以剩餘時間取代絕對時間來傳遞。
基礎設施團隊要做的事
監控時間同步(NTP、chrony),伺服器之間時鐘差異過大時發出警示。
數值參考
時間同步(NTP、chrony)正常時,同一資料中心的伺服器之間通常在數 ms 以內。同步停止,或虛擬機長時間暫停後恢復時,會拉大到數百 ms~數秒。
圖表上
緩慢爬升 · 各伺服器的時鐘偏移(offset)
查看位置
收集各伺服器 chronyc tracking 的 System time(系統時鐘與 NTP 時鐘的差)、Last offset 與 Ref time(最後一次套用時間來源測量值的時間)來比較
符合的跡象
問題伺服器的偏移比其他伺服器大了數百 ms 以上,或 Ref time 停在很久以前,且判定錯亂只發生在進出那台伺服器的移動
不符合的跡象
所有伺服器的偏移都在數 ms 內時,是遊戲端的時間計算或用戶端時鐘同步誤差的問題
確認方式
用基礎設施工具確認(不需要遊戲程式碼)
深入了解
單一伺服器的時鐘一下子往前或往後跳的情況,在伺服器 OS 層的「系統時鐘跳動(NTP step)」說明。

出處

  1. RFC 5905: Network Time Protocol Version 4: Protocol and Algorithms Specification IETF
    快速 LAN 上的 NTP 用戶端通常可對準到數百 µs 以內
  2. chrony – Frequently Asked Questions chrony
    一般電腦時鐘的漂移(drift)未滿 100ppm,但虛擬機可能更大;暫停後恢復的虛擬機時間會偏掉,可能需要 step 校正
  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 伺服器架構與維運

同一症狀(吃指令/回檔)在其他層的原因

查看含圖解與實驗的完整版卡片