使用 Azure Kubernetes 服務(wù) (AKS) 實現(xiàn)同步多人游戲

來源: Microsoft Azure
作者:Microsoft Azure
時間:2021-01-05
17144
本文將描述GitHub上的此示例中使用的體系結(jié)構(gòu)。請注意,此參考體系結(jié)構(gòu)中的代碼只是一個指南示例,在用于生產(chǎn)環(huán)境之前,可能還有需要優(yōu)化的地方。

您可以選擇使用托管Azure Kubernetes服務(wù)(AKS),在Azure上使用Kubernetes協(xié)調(diào)程序管理容器化專用游戲服務(wù)器。

本文將描述GitHub上的此示例中使用的體系結(jié)構(gòu)。請注意,此參考體系結(jié)構(gòu)中的代碼只是一個指南示例,在用于生產(chǎn)環(huán)境之前,可能還有需要優(yōu)化的地方。

體系結(jié)構(gòu)關(guān)系圖

multiplayer-aks-hosting.png

相關(guān)服務(wù)

Azure流量管理器-可根據(jù)延遲情況將玩家連接到最合適的區(qū)域。

Azure Kubernetes服務(wù)-可簡化Kubernetes的部署和操作。

Azure容器注冊表-允許為所有類型的容器部署存儲映像。

體系結(jié)構(gòu)注意事項

自定義資源定義(CRD)

在此參考體系結(jié)構(gòu)中,通過使用自定義資源定義(CRD)對象擴展了Kubernetes。這些對象將用于表示專用游戲服務(wù)器實體。

具體來說,有2個核心實體,分別由2個不同的CRD表示:

DedicatedGameServer:表示多人游戲服務(wù)器本身。每個DedicatedGameServer都有一個單獨對應(yīng)的子Pod,它將使用游戲服務(wù)器可執(zhí)行文件運行容器映像。

DedicatedGameServerCollection:表示將運行相同Pod模板的相關(guān)DedicatedGameServers集合,并且可以在集合內(nèi)進行縮放(即添加或刪除更多服務(wù)器實例)。

屬于同一DedicatedGameServerCollection成員的DedicatedGameServer在執(zhí)行環(huán)境方面有很多相似之處,例如,都可以啟動相同的多人游戲地圖或相同類型的游戲。因此,您可以在游戲中針對“奪旗”模式創(chuàng)建一個集合,針對“征服”模式創(chuàng)建另一個集合?;蛘撸槍Φ貓D“X”上的玩家創(chuàng)建一個集合,針對地圖“Y”上的玩家創(chuàng)建另一個集合。

組件

此參考體系結(jié)構(gòu)包含兩個主要組件,它們都是作為單實例Kubernetes部署創(chuàng)建的:

API服務(wù)器組件

這是我們項目的API服務(wù)器(與Kubernetes API服務(wù)器無關(guān))。它包含兩個子組件:

API服務(wù)器子組件

它提供可由游戲服務(wù)器或外部安排系統(tǒng)(如大廳服務(wù)或Matchmaker)調(diào)用的REST API。

Webhook子組件

一個Kubernetes準入Webhook,可驗證和修改關(guān)于我們對Kubernetes API服務(wù)器的CRD的請求。

控制器

Kubernetes控制器是表現(xiàn)為主動協(xié)調(diào)進程的對象。簡而言之,這意味著控制器會監(jiān)控某個(或某組)對象,查看對象是否達到理想狀態(tài)以及其實際狀態(tài)。它會主動比較這兩種狀態(tài),并盡全力使實際狀態(tài)接近理想狀態(tài)。

此項目包含一組控制器,每個控制器都會執(zhí)行協(xié)調(diào)特定對象集的任務(wù)。所有控制器都基于官方Kubernetes示例控制器和此處的相應(yīng)文檔構(gòu)建而成。此項目中的控制器是為了協(xié)調(diào)我們的自定義資源定義(CRD)對象,即DedicatedGameServerCollections和DedicatedGameServers。

DedicatedGameServerCollectionController

它負責處理DedicatedGameServerCollection的DedicatedGameServer對象。

DedicatedGameServerController

它負責處理DedicatedGameServer對象的Pod。

DGSActivePlayersAutoScalerController

您可以選擇是否啟動它(通過控制器上的命令行參數(shù)),它負責每個選擇加入Pod自動縮放機制的DedicatedGameServerCollection上的Pod自動縮放。

這些組件是它們自己的命名空間的一部分(示例中名為dgs-system),與DedicatedGameServers的命名空間分離。在大型群集場景中,每個DedicatedGameServerCollections列表可以有一個命名空間。

公共IP

游戲客戶端應(yīng)該能夠直接連接到專用游戲服務(wù)器,因此所有節(jié)點都應(yīng)該有一個公共IP。Azure Kubernetes服務(wù)默認不提供公共IP,但您可以使用此GitHub項目來啟用它。

部署模板

按照這些說明創(chuàng)建Azure Kubernetes群集。

安全注意事項

所有API方法都通過訪問代碼進行保護,顯示為字符串形式,并保存在名為apiaccesscode的Kubernetes密鑰中。這是在項目安裝過程中創(chuàng)建的,應(yīng)傳遞到所有方法調(diào)用代碼GET參數(shù)中。默認情況下,唯一不要求身份驗證的方法是/running方法。但是,可以在API服務(wù)器進程命令行參數(shù)中更改方法。

優(yōu)化注意事項

對于較小的群集,您可以使用適用于所有節(jié)點的單個Pod(包含API服務(wù)器子組件、Webhook子組件和控制器的Pod)來實現(xiàn)簡化。按照設(shè)計,在Kubernetes群集中,每個Pod可以與所有其他節(jié)點中的其他Pod對話。

multiplayer-aks-hosting-single.png

其他資源和示例

官方Kubernetes文檔

定價

如果您沒有Azure訂閱,可以創(chuàng)建免費帳戶,開始使用12個月的免費服務(wù)。除非您超出這些服務(wù)的使用限制,否則無需為Azure免費帳戶中包含的這些免費服務(wù)付費。了解如何通過Azure門戶或使用情況文件查看服務(wù)使用情況。

您需要承擔運行這些參考體系結(jié)構(gòu)時所使用的Azure服務(wù)的費用??偨痤~將因使用情況而異。請參閱參考體系結(jié)構(gòu)中使用的每項服務(wù)的定價網(wǎng)頁:

Azure流量管理器

Azure Kubernetes服務(wù)

Azure容器注冊表

您還可以使用Azure定價計算器,以配置和估算您計劃使用的Azure服務(wù)的成本。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于Microsoft Azure,本站不擁有所有權(quán),不承擔相關(guān)法律責任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多