Maintenance
MMORPG伺服器維護
似乎大多數mmorpg遊戲都有一些定期的伺服器維護,有的每天一次,有的一周一次。他們實際上必須做什麼,為什麼有必要?
如果你從這樣一個項目開始,你能做些什麼來避免這種情況?
我懷疑他們正在部署最新版本的程式碼,這要求他們重新啟動應用程序(並希望在重新啟用訪問之前執行一些測試)。從這個角度來看,它更多的是 StackOverflow 問題,而不是 ServerFault 問題。
我認為創建一個熱更新檔系統是可能的,但它必然會非常複雜。據我了解,MMO 伺服器“應用程序”由幾個不同的組件組成——
登錄伺服器——處理身份驗證並充當遊戲伺服器之間的“中心”。一旦客戶端進入遊戲,他們就不再與登錄伺服器互動。在這樣的系統中,您可以應用更新檔並重新啟動登錄伺服器,而不會干擾遊戲玩法(儘管您將有一段時間人們無法登錄)。
遊戲伺服器——分組為邏輯獨立單元(“世界”等)的機器集群。假設每個遊戲集群使用某種內部通信協議來相互對應狀態;您可能必須同時修補每個集群。一種可能的方法是修補熱故障轉移。然後你需要能夠同時
- 向客戶端發出信號以連接到熱故障轉移並斷開與舊集群的連接。
- 在所有客戶端轉移時,保持故障轉移和過期應用伺服器之間的狀態同步。
數據庫伺服器——某種持久性數據儲存,如 RDBMS。希望您不會經常更改數據儲存。大概每個遊戲伺服器/集群都有一個獨立的數據儲存。您也許可以在熱故障轉移中使用相同的技巧(並告訴遊戲伺服器斷開連接,等待舊數據庫和故障轉移數據庫同步,然後重新連接到故障轉移),但這對我來說似乎很冒險。
所有上述情況都給已經很複雜的系統增加了難以置信的複雜性,並引入了許多程式碼故障可能導致數據失去或損壞的地方。
另一種解決方案是使用一種為 100% 正常執行時間而設計的語言,並具有用於熱更新檔執行程式碼的內置功能。Erlang是一個不錯的選擇(熱更新檔範例),Java 也有類似的功能。