遊戲 Lag 白皮書 › L6 伺服器網路卡
雲端主機維護與即時遷移 Cloud host maintenance / live migration
原因 ID nic-host-maintenance · 主要負責 基礎設施團隊(伺服器基礎設施) · 協同 遊戲開發團隊(伺服器開發), 外部(外部)
在含圖解與實驗的完整版中開啟卡片 →
雲端供應商維護實體伺服器(主機)時,會把虛擬機器搬到其他主機(即時遷移),或暫時停住。這段期間整台伺服器都會停住,停住的時間一長,連線就會中斷。
為什麼 供應商因主機維護或故障預測,把虛擬機器搬到其他主機,或短暫暫停 → 於是 搬移期間 CPU、記憶體、網路變慢,最後虛擬機器會短暫完全停住(依供應商與方式,從不到 1 秒到 30 秒左右) → 畫面上 伺服器上所有人的畫面同時停住,接著快轉、瞬移;停住的時間比逾時長時,會大量斷線
- 症狀
- 定格, 快轉, 瞬移, 斷線
- 因素
- 停滯, 遺失
- 誰會遇到
- 整個伺服器
- 何時
- 偶爾隨機發生
- 負責單位
- 主要負責 基礎設施團隊(伺服器基礎設施) · 協同 遊戲開發團隊(伺服器開發), 外部(外部)
- 遊戲開發團隊要做的事
- 設定能撐過數秒停頓的逾時,停住後追趕的 tick 數要設上限,經過時間用 monotonic clock 計算,收到維護通知時要有儲存進度並把玩家移到其他伺服器的流程。
- 基礎設施團隊要做的事
- 訂閱維護通知並設定警示(Google Cloud maintenance-event、AWS 排程事件與 AWS Health、Azure Scheduled Events);收到通知後,趁玩家少的時段先替換伺服器;供應商允許時調整維護時間(Azure Maintenance Configuration,AWS 排程事件依類型而定);把維護紀錄與事故紀錄對照。
- 外部要做的事
- 向雲端供應商確認維護時程與影響範圍,同一執行個體反覆停頓時提出回報。
- 數值參考
- Google Compute Engine 表示即時遷移的停頓通常遠短於 1 秒,停頓期間系統時鐘最多可能往前跳 5 秒。中繼資料的 maintenance-event 值會在搬移前 60 秒改變(前提是之前至少查詢過一次這個值)。Azure 表示不需重新開機的維護幾乎都在 10 秒以內,少數情況(一般 VM 大小每 18 個月不超過一次)會停頓約 30 秒,即時遷移通常不超過 5 秒。Azure Scheduled Events 至少會在 15 分鐘前通知這類停頓(Freeze)。不過主機硬體突然故障時,會不經通知直接開始復原。
- 圖表上
- 中斷後一次湧入 · 伺服器收發封包數、tick 間隔
- 查看位置
- 把停住的時間點與供應商紀錄對照。Google Cloud 看稽核 log 中的 compute.instances.migrateOnHostMaintenance,AWS 看 describe-instance-status 與 AWS Health 的排程事件,Azure 看活動 log(Activity Log)中的 Microsoft.Compute/virtualMachines/liveMigration/action,以及 VM 可用性指標(VmAvailabilityMetric)降為 0 的時間點。在伺服器內部查看停住期間指標與 log 是否出現空白,以及之後時鐘是否跳動(時間同步 log)
- 符合的跡象
- 整台伺服器停住的時間點與供應商記錄的維護或遷移時間重疊,且那幾秒內伺服器內部的指標與 log 全部空白
- 不符合的跡象
- 供應商紀錄中沒有、短暫停頓頻繁反覆時是「CPU steal(虛擬機器)」。kernel log 中有 NIC 重設紀錄時是「NIC 驅動程式/韌體問題」
- 確認方式
- 用基礎設施工具確認(不需要遊戲程式碼)
- 深入了解
- AWS 以排程事件通知。system-reboot 表示會重新開機並搬到新主機,system-maintenance 表示可能因網路、電源維護而短暫受影響。即使只停住幾秒,這段期間對伺服器送出封包卻沒收到 ACK 的用戶端,會把重傳等待時間一次次加倍,所以恢復之後 TCP 連線可能停住更久(「TCP RTO 與指數退避」)。停住後醒來時時鐘會跳動,有時會引發「系統時鐘跳動(NTP step)」,負載平衡器的健康檢查也可能失敗,把這台伺服器暫時移出。無法搬移的執行個體(Google Cloud 的裸機執行個體等)在維護時會被停止或重新啟動。
出處
- Live migration process during maintenance events Google Cloud
即時遷移的停頓通常遠短於 1 秒,停頓期間系統時鐘最多往前跳 5 秒,搬移期間磁碟、CPU、記憶體、網路效能會暫時下降,不做即時遷移的 VM 在維護時會被關閉(裸機執行個體不支援) - Query metadata server for maintenance event notices Google Cloud
maintenance-event 中繼資料值在即時遷移前 60 秒改變(限設定為即時遷移,且上次維護之後至少查詢過一次這個值的情況) - Monitor and plan for a host maintenance event Google Cloud
維護時稽核 log 會留下 compute.instances.migrateOnHostMaintenance 系統事件 - Scheduled events for Amazon EC2 instances AWS
排程事件類型(system-reboot 為重新開機並搬到新主機,system-maintenance 為因網路、電源維護而短暫受影響),以電子郵件與 AWS Health 通知,用 describe-instance-status 確認,依類型可調整時間 - Maintenance and updates Microsoft Azure
不需重新開機的維護幾乎都在 10 秒以內停頓,少數情況(一般 VM 大小每 18 個月不超過一次)約 30 秒,即時遷移通常 5 秒以下,停頓後時鐘自動同步,長時間的 TCP 連線可能中斷,或對方以指數退避重傳送往停住 VM 的資料而使復原更慢,負載平衡器健康檢查約在 10 秒內判定為不健康,用活動 log 的 Microsoft.Compute/virtualMachines/liveMigration/action 與停頓期間降為 0 的 VmAvailabilityMetric 確認,用 Maintenance Configuration 選擇套用時間 - Scheduled Events for Linux VMs in Azure Microsoft Azure
Freeze(停頓幾秒,CPU 與網路可能停住)至少在 15 分鐘前通知,主機硬體故障時沒有通知期間,直接開始復原
相關原因
同一層:L6 伺服器網路卡
同一症狀(定格)在其他層的原因
查看含圖解與實驗的完整版卡片