使用 Azure 容器實(shí)例 (ACI) 實(shí)現(xiàn)同步多人游戲

來源: Microsoft Azure
作者:Microsoft Azure
時(shí)間:2021-01-05
17700
探索此使用Azure容器實(shí)例、事件網(wǎng)格和Azure Functions的替代解決方案,它可按需自動(dòng)縮放,且按每秒使用量計(jì)費(fèi),前提是您希望以支付較高價(jià)格為代價(jià),利用托管虛擬機(jī)實(shí)現(xiàn)更簡單的體系結(jié)構(gòu)和維護(hù)工作。

探索此使用Azure容器實(shí)例、事件網(wǎng)格和Azure Functions的替代解決方案,它可按需自動(dòng)縮放,且按每秒使用量計(jì)費(fèi),前提是您希望以支付較高價(jià)格為代價(jià),利用托管虛擬機(jī)實(shí)現(xiàn)更簡單的體系結(jié)構(gòu)和維護(hù)工作。

服務(wù)器需要在Azure容器實(shí)例之外保持持久狀態(tài)。

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

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

multiplayer-aci-hosting.png

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

Azure流量管理器-選擇此服務(wù)是因?yàn)樗梢愿鶕?jù)延遲情況將玩家連接到最合適的區(qū)域。

Azure容器實(shí)例-在Azure中運(yùn)行容器的最快且最簡單的方法,無需管理任何虛擬機(jī),也無需采用更高級(jí)別的服務(wù)。

Azure Functions-選擇此服務(wù)是因?yàn)樗沁\(yùn)行小部分邏輯的最簡單方法。

Azure表存儲(chǔ)-用于跟蹤容器組狀態(tài)的簡單的鍵/屬性存儲(chǔ)。

Azure事件網(wǎng)格-選擇此服務(wù)是因?yàn)樗鼉?nèi)置針對(duì)來自Azure服務(wù)的事件的支持。

Azure Blob存儲(chǔ)-我們需要一個(gè)用于存儲(chǔ)自動(dòng)縮放幫助程序配置的空間。

資源組-針對(duì)Azure流量管理器使用一個(gè)資源組,并針對(duì)每個(gè)區(qū)域游戲服務(wù)器池各使用一個(gè)資源組(例如,一個(gè)用于北美、一個(gè)用于歐洲、一個(gè)用于拉丁美洲、一個(gè)用于亞洲等)。

部署模板

單擊下面的按鈕,將項(xiàng)目部署到您的Azure訂閱:

azure-resource-manager-deploy-button.png

Deploy using an Azure Resource Manager template

此操作將觸發(fā)模板部署,即系統(tǒng)會(huì)將azuredeploy.json ARM模板文件部署到您的Azure訂閱,從而創(chuàng)建必要的Azure資源并從此存儲(chǔ)庫中提取源代碼。這可能會(huì)在您的Azure帳戶中產(chǎn)生相應(yīng)費(fèi)用。

請(qǐng)查看一般指南文檔,其中有一篇文章概述了Azure服務(wù)的命名規(guī)則和限制。

要部署項(xiàng)目,需要指定以下信息:

位置:選擇將部署資源的Azure區(qū)域。請(qǐng)確保選擇Azure容器實(shí)例可用的位置。

Function名稱:選擇Function App的唯一名稱。這將確定Function的DNS,請(qǐng)謹(jǐn)慎選擇。

存儲(chǔ)庫URL:系統(tǒng)將拉取相應(yīng)文件來創(chuàng)建Azure Functions,而此URL將確定包含這些文件的存儲(chǔ)庫。您可以保留默認(rèn)值,或者換成自己的Fork。

分支:此值與項(xiàng)目的GitHub分支相對(duì)應(yīng)。

Azure Functions部署在免費(fèi)的應(yīng)用程序服務(wù)計(jì)劃上,您可能需要對(duì)它進(jìn)行擴(kuò)展以提高性能。

項(xiàng)目使用托管服務(wù)標(biāo)識(shí)及其與Azure Functions的關(guān)系來對(duì)Azure ARM API管理服務(wù)進(jìn)行身份驗(yàn)證,從而創(chuàng)建/刪除/修改所需的Azure容器實(shí)例。部署腳本會(huì)自動(dòng)為Function App創(chuàng)建應(yīng)用程序標(biāo)識(shí),但您需要向?qū)⒁泄苋萜鲗?shí)例的資源組授予此標(biāo)識(shí)權(quán)限。為此,請(qǐng)執(zhí)行以下操作:

訪問Azure門戶。

找到要在其中創(chuàng)建Azure容器實(shí)例的資源組(這可能是托管Function App的同一資源組)。

選擇訪問控制(IAM)。

單擊添加,選擇貢獻(xiàn)者作為角色,向Function App分配訪問權(quán)限,然后通過修改訂閱/資源組下拉框來選擇Azure Functions。

單擊保存,就完成操作了!

此外,部署完成后,您需要按照此處的說明手動(dòng)添加ACIMonitor Function的事件訂閱Webhook。只需確保選擇正確的資源組來監(jiān)控事件(即將在其中創(chuàng)建容器的Azure資源組)。這樣一來,只要指定資源組中發(fā)生資源修改,事件網(wǎng)格便會(huì)立即向ACIMonitor Function發(fā)送消息。完成此操作后,部署就準(zhǔn)備就緒了。獲取ACIMonitor Function的URL后,您可以使用此ARM模板來部署事件網(wǎng)格訂閱,這是一項(xiàng)可選操作。

使用門戶部署事件網(wǎng)格訂閱時(shí),需要填寫以下值:

名稱-為事件網(wǎng)格訂閱選擇一個(gè)獨(dú)特的名稱。

主題類型-選擇“資源組”(如果Azure容器實(shí)例將部署在不同的資源組中,請(qǐng)選擇“Azure訂閱”)。

訂閱-要用來監(jiān)控Azure容器實(shí)例創(chuàng)建事件的訂閱。

資源組-選擇將包含您創(chuàng)建的Azure容器實(shí)例的資源組。請(qǐng)確保選中訂閱所有事件類型復(fù)選框。

訂閱服務(wù)器類型-Webhook。

訂閱終結(jié)點(diǎn)-這將包含ACIMonitor Azure Functions的觸發(fā)器URL。

前綴篩選器-將其保留為空。

后綴篩選器-將其保留為空。

最后但同樣重要的是,使用新的Azure Functions v2運(yùn)行時(shí)版本時(shí),EventGrid綁定擴(kuò)展可能需要手動(dòng)注冊(cè)。在正常情況下,擴(kuò)展將自動(dòng)安裝(因?yàn)樗?cè)在extensions.csproj文件中),但如果沒有自動(dòng)安裝,您可以查看以下文章了解如何手動(dòng)執(zhí)行此操作:

Azure Functions注冊(cè)綁定擴(kuò)展。

從門戶手動(dòng)安裝或更新Azure Functions綁定擴(kuò)展。

分步操作

玩家的設(shè)備客戶端連接到流量管理器,以傳送要查找游戲服務(wù)器的玩家請(qǐng)求。

流量管理器連接到具有最低延遲的區(qū)域,并指向可獲取可用游戲服務(wù)器的Matchmaker。

Matchmaker調(diào)用ACIList Azure Functions以獲取來自所有容器組的公共IP和活動(dòng)會(huì)話列表。

該Azure Functions從Azure表存儲(chǔ)中獲取表,而該表存儲(chǔ)將存儲(chǔ)所有容器組中的公共IP、活動(dòng)會(huì)話數(shù)量和狀態(tài)。

假設(shè)沒有可用的表,系統(tǒng)將調(diào)用ACICreate Azure Functions。容器狀態(tài)為Creating。

ACICreate Azure Functions創(chuàng)建容器。

創(chuàng)建或刪除容器時(shí),系統(tǒng)接入事件網(wǎng)格進(jìn)行偵聽。片刻之后(幾分鐘),事件網(wǎng)格收到來自正在創(chuàng)建的容器的相關(guān)事件。

事件網(wǎng)格還進(jìn)行了設(shè)置,可在收到事件后調(diào)用ACIMonitor Azure Functions,以便傳遞公共IP。

ACIMonitor Azure Functions插入來自新創(chuàng)建容器的公共IP,并將該容器的狀態(tài)設(shè)置為Running。

Matchmaker現(xiàn)在為玩家獲得了一臺(tái)可用服務(wù)器,它將詳細(xì)信息發(fā)回設(shè)備客戶端,以便設(shè)備客戶端直接連接到服務(wù)器。

Matchmaker調(diào)用ACISetSession Azure Functions,以更新玩家被指派連接的容器上運(yùn)行的活動(dòng)會(huì)話數(shù)量。

ACISetSession Function更新Azure表存儲(chǔ)。

到某個(gè)時(shí)刻后,將不再需要服務(wù)器。由于玩家可能仍在使用容器實(shí)例,因此本例不會(huì)手動(dòng)刪除容器,而是調(diào)用ACISetState Azure Functions來將容器的狀態(tài)設(shè)置為MarkedForDeletion,這樣一來,新玩家就不會(huì)被安排到該容器實(shí)例。

ACISetState Azure Functions更新Azure表存儲(chǔ)。

時(shí)間觸發(fā)的ACIGC Azure Functions會(huì)時(shí)不時(shí)地運(yùn)行,并刪除所有具有MarkedForDeletion狀態(tài)的容器實(shí)例。

ACIGC Azure Functions調(diào)用可實(shí)際刪除容器實(shí)例的ACIDelete Azure Functions。

ACIDelete Azure Functions刪除容器。

使用更具體的示例:

aci-workflow-diagram-2.png

一開始沒有服務(wù)器實(shí)例。

突然,玩家需要服務(wù)器進(jìn)行連接,系統(tǒng)調(diào)用了ACICreate。

執(zhí)行創(chuàng)建命令時(shí),服務(wù)器尚未啟動(dòng)和運(yùn)行,狀態(tài)為Creating。

完成部署后(幾分鐘),事件網(wǎng)格將通過ACIMonitor通知您服務(wù)器實(shí)例(容器組1)正在特定的IP地址(即1.2.3.4)中運(yùn)行。系統(tǒng)將該實(shí)例的狀態(tài)更新為Running。

玩家現(xiàn)在可以連接到服務(wù)器實(shí)例。

假設(shè)現(xiàn)在需要另一個(gè)服務(wù)器實(shí)例。您可以再次使用ACICreate,或者如果已超出橫向擴(kuò)展閾值,則讓ACIAutoScaler代表您使用ACICreate創(chuàng)建實(shí)例。

還是同樣的模式,新服務(wù)器尚未準(zhǔn)備就緒,當(dāng)部署完成后,事件網(wǎng)格將通過ACIMonitor通知您服務(wù)器在另一個(gè)特定IP地址(即2.3.4.5)中運(yùn)行。系統(tǒng)將這第二個(gè)實(shí)例(容器組2)的狀態(tài)更新為Running。

玩家現(xiàn)在可以連接到第二個(gè)實(shí)例。

最后,不需要第二個(gè)實(shí)例,我們決定不使用它或者超出了擴(kuò)展閾值。由于可能有玩家仍在使用第二個(gè)實(shí)例,因此系統(tǒng)不會(huì)刪除該實(shí)例,而是調(diào)用ACISetScale將服務(wù)器標(biāo)記為刪除,這樣一來,新玩家就不會(huì)被安排到第二個(gè)實(shí)例?,F(xiàn)在,第二個(gè)實(shí)例的狀態(tài)是MarkedForDeletion。

當(dāng)玩家在第二個(gè)實(shí)例中結(jié)束游戲后,系統(tǒng)將運(yùn)行垃圾回收器ACIGB,并觸發(fā)ACIDelete以完全刪除第二個(gè)實(shí)例。

縮放

可通過以下環(huán)境變量配置ACIAutoScaler Azure Functions設(shè)置:擴(kuò)展/收縮閾值、最小/最大實(shí)例數(shù)以及冷卻。下面是自動(dòng)縮放器的邏輯:

計(jì)時(shí)觸發(fā),每隔1分鐘運(yùn)行一次,默認(rèn)禁用。

負(fù)載為已連接的玩家數(shù)量/總玩家容量。

如果(“負(fù)載”>80%且實(shí)例<最大實(shí)例數(shù)),則調(diào)用ACICreate Azure Functions以加快啟動(dòng)新實(shí)例。這可以處理好擴(kuò)展情形。

如果(“負(fù)載”<60%且實(shí)例>最小實(shí)例數(shù)),則調(diào)用ACISetState Azure Functions,將負(fù)載最小的實(shí)例的狀態(tài)設(shè)置為MarkedForDeletion。這可以處理好收縮情形。

擴(kuò)展/收縮有10分鐘的冷卻期。

Azure容器實(shí)例可以快速實(shí)現(xiàn)擴(kuò)展,只需幾分鐘,您便可以隨時(shí)開始使用新容器。例如,對(duì)于擴(kuò)展30個(gè)運(yùn)行OpenArena的新Azure容器實(shí)例的請(qǐng)求,從請(qǐng)求發(fā)出到玩家能夠連接,用時(shí)不到3分鐘。

手動(dòng)創(chuàng)建一組容器進(jìn)行測(cè)試

如果您想創(chuàng)建一組容器實(shí)例進(jìn)行測(cè)試,可以使用此處提供的示例。將openarenaserver1替換為您要?jiǎng)?chuàng)建的各個(gè)實(shí)例的唯一名稱(如openarenaserver1、openarenaserver2、openarenaserver3等)。您還可以替換資源組、位置和存儲(chǔ)名稱/鍵。

其他資源和示例

請(qǐng)觀看Build上錄制的使用Azure容器實(shí)例實(shí)現(xiàn)多人游戲服務(wù)器縮放視頻,了解詳細(xì)信息。

定價(jià)

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

您需要承擔(dān)運(yùn)行這些參考體系結(jié)構(gòu)時(shí)使用的Azure服務(wù)的費(fèi)用,總金額取決于將通過分析管道運(yùn)行的事件數(shù)。請(qǐng)參閱參考體系結(jié)構(gòu)中使用的每項(xiàng)服務(wù)的定價(jià)網(wǎng)頁:

Azure流量管理器

Azure容器實(shí)例

Azure Functions

Azure事件網(wǎng)格

Azure表存儲(chǔ)和Azure Blob存儲(chǔ)

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

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于Microsoft Azure,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
相關(guān)文章
Azure Arc為企業(yè)構(gòu)建安全的云基礎(chǔ)
Azure Arc為企業(yè)構(gòu)建安全的云基礎(chǔ)
隨著人工智能技術(shù)持續(xù)重塑企業(yè)運(yùn)營方式,企業(yè)需要能夠處理海量數(shù)據(jù)的系統(tǒng),以支持實(shí)時(shí)洞察,同時(shí)幫助他們應(yīng)對(duì)跨IT和OT環(huán)境(包括云端、邊緣和本地)中運(yùn)營、應(yīng)用、數(shù)據(jù)和基礎(chǔ)設(shè)施的協(xié)作難題。
Azure
微軟云
云服務(wù)
2024-12-172024-12-17
釋放.NET 9和Azure的AI技術(shù)與云計(jì)算潛力:更快、更智能、面向未來
釋放.NET 9和Azure的AI技術(shù)與云計(jì)算潛力:更快、更智能、面向未來
.NET 9現(xiàn)已正式發(fā)布,它為.NET平臺(tái)的發(fā)展掀開了嶄新的一頁,突破了性能、云原生開發(fā)和AI技術(shù)集成的邊界。
Azure
微軟云
云服務(wù)
2024-12-162024-12-16
Azure網(wǎng)絡(luò)管理現(xiàn)已具備智能Microsoft Copilot副駕駛能力
Azure網(wǎng)絡(luò)管理現(xiàn)已具備智能Microsoft Copilot副駕駛能力
智能Microsoft Copilot副駕駛for Azure網(wǎng)絡(luò)服務(wù)現(xiàn)已推出公共預(yù)覽版。
Azure
微軟云
云服務(wù)
2024-12-102024-12-10
Microsoft Fabric功能更新,借助AI驅(qū)動(dòng)的數(shù)據(jù)平臺(tái)加速應(yīng)用創(chuàng)新
Microsoft Fabric功能更新,借助AI驅(qū)動(dòng)的數(shù)據(jù)平臺(tái)加速應(yīng)用創(chuàng)新
一年前,我們正式推出了一款端到端數(shù)據(jù)平臺(tái),旨在幫助組織推動(dòng)人工智能轉(zhuǎn)型,并重新定義數(shù)據(jù)的連接、管理和分析方式。
Azure
微軟云
云服務(wù)
2024-12-092024-12-09
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊(cè)
加載中
二維碼已失效 請(qǐng)重試
刷新
賬號(hào)登錄/注冊(cè)
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家