讓遊戲雲原生化別再「左右爲難」

作者:雲原生遊戲社區

當下,遊戲行業正在經歷雲原生架構轉型期,不少遊戲廠商紛紛投入遊戲服容器化改造。在此現象的背後,是雲原生技術帶來的先進生產力推動着行業向前發展:容器化提升了遊戲交付的效率;聲明一致性帶來遊戲開服效率、更新效率、以及可用性的提升;彈性伸縮使得資源可自動化地應對遊戲高峯期與波谷期,在保證遊戲服務質量的同時提高資源利用率。

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 倉庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章