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

遊戲 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 的裸機執行個體等)在維護時會被停止或重新啟動。

出處

  1. Live migration process during maintenance events Google Cloud
    即時遷移的停頓通常遠短於 1 秒,停頓期間系統時鐘最多往前跳 5 秒,搬移期間磁碟、CPU、記憶體、網路效能會暫時下降,不做即時遷移的 VM 在維護時會被關閉(裸機執行個體不支援)
  2. Query metadata server for maintenance event notices Google Cloud
    maintenance-event 中繼資料值在即時遷移前 60 秒改變(限設定為即時遷移,且上次維護之後至少查詢過一次這個值的情況)
  3. Monitor and plan for a host maintenance event Google Cloud
    維護時稽核 log 會留下 compute.instances.migrateOnHostMaintenance 系統事件
  4. Scheduled events for Amazon EC2 instances AWS
    排程事件類型(system-reboot 為重新開機並搬到新主機,system-maintenance 為因網路、電源維護而短暫受影響),以電子郵件與 AWS Health 通知,用 describe-instance-status 確認,依類型可調整時間
  5. Maintenance and updates Microsoft Azure
    不需重新開機的維護幾乎都在 10 秒以內停頓,少數情況(一般 VM 大小每 18 個月不超過一次)約 30 秒,即時遷移通常 5 秒以下,停頓後時鐘自動同步,長時間的 TCP 連線可能中斷,或對方以指數退避重傳送往停住 VM 的資料而使復原更慢,負載平衡器健康檢查約在 10 秒內判定為不健康,用活動 log 的 Microsoft.Compute/virtualMachines/liveMigration/action 與停頓期間降為 0 的 VmAvailabilityMetric 確認,用 Maintenance Configuration 選擇套用時間
  6. Scheduled Events for Linux VMs in Azure Microsoft Azure
    Freeze(停頓幾秒,CPU 與網路可能停住)至少在 15 分鐘前通知,主機硬體故障時沒有通知期間,直接開始復原

相關原因

同一層:L6 伺服器網路卡

同一症狀(定格)在其他層的原因

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