作者:雲原生遊戲社區
當下,遊戲行業正在經歷雲原生架構轉型期,不少遊戲廠商紛紛投入遊戲服容器化改造。在此現象的背後,是雲原生技術帶來的先進生產力推動着行業向前發展:容器化提升了遊戲交付的效率;聲明一致性帶來遊戲開服效率、更新效率、以及可用性的提升;彈性伸縮使得資源可自動化地應對遊戲高峯期與波谷期,在保證遊戲服務質量的同時提高資源利用率。
2024 年 1 月 18 日,OpenKruiseGame (OKG) 社區與 KubeSphere 聯合舉辦了議題爲「用 OKG Dashboard 解鎖雲原生遊戲運維之道」的技術直播。本文將與大家一起回顧分享內容。
OpenKruiseGame:遊戲雲原生化的理想路徑
儘管雲原生帶來了衆多優勢,但作爲容器編排管理事實標準的 Kubernetes,其原生工作負載並不能很好地支持遊戲場景,因此 OpenKruiseGame 在此背景下誕生。
1)OpenKruiseGame 是 CNCF 頂級開源雲原生負載 OpenKruise 在遊戲領域下的最佳實踐抽象,項目由多家一線遊戲公司共同貢獻維護;
2)內置多雲/混合雲場景的適配,推出了 Cloud Provider 的模型,便於開發者在多種不同雲環境下實現遊戲的一致性交付;
3)可以通過無侵入式的聲明方式與雲上能力,例如:透明無損網絡、極致秒級彈性、低成本資源供給、全生命週期可觀測性等能力無感打通;
4)將遊戲場景下的版本熱更新、網絡 IP 端口固定、區服管理、自動伸縮等通用能力進行抽象,並通過語義化的配置進行透出,降低學習和二次開發的成本;
5)覆蓋 PVP/PVE/H5類/MMORPG 等多種常見的遊戲類型的差異化容器需求,白屏化支持複雜遊戲架構的遊戲服編排能力。
下面來介紹不同類型的遊戲如何通過 OpenKruiseGame 完成雲原生改造。
PvP 遊戲最佳實踐
會話類(session based)遊戲,是指在有限的時間內,將玩家匯聚到特定遊戲場景下的遊戲類型。在通常意義下,會話等同對局,一局結束後,玩家間的遊戲關係也在此結束,該會話也同時結束。因此,在業界也會將會話類遊戲通俗的理解爲“開房間遊戲”,一個房間承載了對應的遊戲會話。這類遊戲往往存在着以下特點:
1)遊戲時間非連續,存在明顯的起停時間節點。
2)會話中至少存在 2 個及以上的玩家,相互戰鬥、交互。
3)常見於 MOBA、FPS 類遊戲,對時延要求較高。
4)業務波峯與波谷時,對局數量差距明顯。因此,一個理想的 PvP 遊戲的雲原生架構應具有以下能力:
- 提供網絡直連功能,爲每個房間提供獨立的公網訪問地址,玩家客戶端可直接訪問。
- 提供遊戲匹配功能,爲玩家找到合適的隊友與對手組成會話對局,併爲其分配合適的遊戲房間。
- 提供狀態管理功能,自動化管理遊戲房間的業務狀態與生命週期。
- 提供彈性伸縮功能,根據業務波峯與波谷自動申請和釋放基礎設施資源,控制成本。
- 可高效地進行遊戲交付及運維管理,自動化水平高。
有關 PvP 遊戲最佳實踐閱讀 OpenKruiseGame 官方文檔:
https://openkruise.io/zh/kruisegame/best-practices/session-based-game
PvE 遊戲最佳實踐
與 PvP 會話類遊戲不同,PvE 遊戲的特點如下:
- 單個區服運行時間較長,應儘量避免停服操作,利於玩家遊戲體驗。
- 開服時(或)存在配置差異。
- 單區服容器中(或)存在多進程,區服服務質量需由用戶定義。
- 隨着時間推移,各區服狀態存在差異,需定向管理,如更改資源規格、鏡像版本、定向合服等。
該類遊戲在落地 Kubernetes 通常遇到左右爲難的困境:
若使用 Kubernetes 原生 workload,則無法進行遊戲服精細化管理,具體地:
-
- 若使用 Deployment 管理:
-
- 生成的 pod 沒有類似序號的狀態標識,導致:1)無法基於序號進行有狀態的服務發現了;2)無法區別遊戲服之間狀態差異性;3)異常重啓時狀態丟失,配置/存儲等無法自動重定向。
-
- 若使用 StatefulSet 管理:
-
- 生成的 pod 雖然有序號作爲狀態標識,但是:1)只能從序號大到小進行更新或刪除,無法定向管理遊戲服;2)無法感知遊戲服之間的狀態差異特性。
若不使用 Kubernetes 原生 workload,則無法利用上 K8s 的編排能力:
-
- 若使用腳本程序批量開服:
-
- 屬於面向過程的方式,參數無法落盤,出錯率高。
-
- 若使用 gitops 管理:
-
- 區服數量較多時需要維護大量有着相同字段的 yaml 文件,有時甚至超過文件長度限制;批量發佈時也十分複雜。
-
- 若通過自建 PaaS 平臺管理:
-
- 需要引入大量開發工作,且與業務屬性耦合較重,導致後續迭代複雜
有關 PvE 遊戲最佳實踐閱讀 OpenKruiseGame 官方文檔:
https://openkruise.io/zh/kruisegame/best-practices/pve-game
雲原生遊戲交付與運維管理最佳實踐
對於遊戲應用來說,一個雲原生的交付流程應該如此:
遊戲開發者提交業務代碼至代碼倉庫,自動觸發 CI 流程打包容器鏡像,通過 ArgoCD 自動化部署至測試環境中。遊戲開發者可以快速測試業務邏輯是否符合預期,無需運維同事介入,保證與生產環境一致性的同時也提高了研發效率。
而在正式/灰度的環境下,運維工程師維護遊戲應用部署倉庫,提交編排的遊戲服 Yaml,即可完成遊戲服開服、更新等動作。部署後,可通過 KubeSphere OKG Dashboard 來可視化觀察集羣中所有遊戲服的狀態,並針對性地進行運維管理。
遊戲應用交付與運維管理最佳實踐
KubeSphere OKG Dashboard 是 OpenKruiseGame 基於 KubeSphere 4.0 LuBan 架構提供了遊戲服白屏化管理控制檯,支持用戶基於 KubeSphere 可視化地管理 OpenKruiseGame 涉及的對象,如 GameServerSet 與 GameServer。
當前通過 OKG Dashboard 可以查看當前集羣中游戲服整體統計數據、所有遊戲服部署集與遊戲服的運行情況。此外,還可以定向對遊戲服進行更改運維狀態等操作。
查看當前集羣中游戲服整體統計數據
查看所有遊戲服部署集的運行情況
查看所有遊戲服的運行情況
參考資料:
[1] OpenKruiseGame 的官方文檔
https://openkruise.io/zh/kruisegame/introduction
[2] OpenKruiseGame GitHub 倉庫
https://github.com/openkruise/kruise-game
[3] OKG Dashboard
https://kubesphere.com.cn/marketplace/extensions/kruise-game-dashboard/
對於雲原生遊戲感興趣的同學可以加入雲原生遊戲交流羣。(釘釘羣號:44862615)
點擊此處,訪問 OpenKruiseGame 倉庫。