在分散式系統的世界中,如何維運一款多人的線上遊戲伺服器是相當艱難的。多家遊戲廠商已經開發了多種私人解決方案,而竄起的開源軟體 Kubernetes 是用來處理橫跨雲端、地端系統的最佳方法,所以 Google 釋出了一款運用 Kubernetes 打造的開源專案 Agones,專門用來架設遊戲伺服器代管平台。
透過 Agones,使用者可以搭建一個管理眾多遊戲伺服器的平台,目前此專案與遊戲公司 Ubisoft 合作開發。
遊戲伺服器的性質
第一人稱射擊遊戲、大型多人線上遊戲、多人線上戰鬥競技場遊戲 都需要一個可靠的伺服器 (一個完整的遊戲模擬環境) 來支撐所有的玩家體驗。這些伺服器通常位於網路的某個地方,並讓玩家與玩家之間能順利地同步遊戲模擬狀態,並充當中間人以防止玩家有作弊的情形發生。
遊戲伺服器屬於 stateful 的應用程式,儲存整個模擬遊戲在伺服器的記憶體中。除了遊戲伺服器之外,一般的 stateful 應用程式 (例如資料庫) 的 state 一儲存就是數月甚至數年,相對來說遊戲伺服器的數分鐘、數小時並沒有儲存那麼久。
因為負載平衡器會增加延遲,而快節奏的遊戲對於連線品質要求非常高,所以管理遊戲系統時,必須讓玩家直接連接至遊戲伺服器,而不能仰賴負載平衡器。把所有的玩家都連接至同一台機器會比較容易,因為同一時間都連接著同一個伺服器的遊戲模擬狀態。
以下是典型的遊戲伺服器架構圖:
1. 配對系統通常根據玩家的技巧和等級進行配對,並進入遊戲
2. 配對完成後,配對系統會向管理系統請求一個可以運作遊戲程序的空間
3. 管理系統會開一個新的遊戲空間並讓玩家連進去,而這個遊戲空間將會運轉在叢集裡面的其中一台機器。
4. 管理系統會決定該 process 位於的 IP 以及 port 並將此資料回傳給配對系統。
5. 接著,配對系統會把所接收到的 IP 和 port 回傳給玩家
6. 玩家透過 IP 和 port 可以直接連接至遊戲運轉的 process,並與其他玩家連線。
運用 Kubernetes 以及開源軟體打造 Agones
Agones 運用 Kubernetes 叢集可以建構客製 Kubernetes Controller、以及對應於此客製化 Controller 的客製化資源:GameServer,用來取代上面提及的叢集管理和伺服器擴展。
有了 Agnoes,就可以使用 Kubernetes 工具及 API,在 Kubernetes 叢集上建置、執行、管理並擴展遊戲伺服器。此架構能夠讓配對系統透過 Kubernetes API,取得配對到的遊戲伺服器。
使用 Kubernetes 來開發 Agones 有許多優勢,Agones 可以讓使用者在任何情境輕鬆地部署遊戲。例如:利用 minikube 直接在開發者的機器上搭起叢集、多人開發、自建機房、混合雲以及純雲端 (Google Kubernetes Engine.)
另外,Kubernetes 可以簡化維運流程。畢竟多人遊戲不可能只有遊戲伺服器,還包括客服、帳戶管理、 商城等。以 Kubernetes 作為平台,讓開發團隊不需要同時理解遊戲以及客服系統,因為可以同時運行多套系統。
Agones 並不是只透過一群人獨立開發,Agones 的團隊是藉由 Kubernetes 社群的數百位開發者打造出來的 Kubernetes 生態系來進行開發。
相關文章
https://blog.gcp.expert/introduce-agones-host-game-server-on-kubernetes-2/
延伸閱讀:
Google 開源專案 Open Saves 簡介:遊戲專用的雲原生儲存