遊戲 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)」說明。
出處
- RFC 5905: Network Time Protocol Version 4: Protocol and Algorithms Specification IETF
快速 LAN 上的 NTP 用戶端通常可對準到數百 µs 以內 - chrony – Frequently Asked Questions chrony
一般電腦時鐘的漂移(drift)未滿 100ppm,但虛擬機可能更大;暫停後恢復的虛擬機時間會偏掉,可能需要 step 校正 - 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 伺服器架構與維運
同一症狀(吃指令/回檔)在其他層的原因
查看含圖解與實驗的完整版卡片