1.31億月活的爆款遊戲,它的後端架構是怎樣的?

微軟技術棧發表於2022-01-08

1.31億人,這是什麼概念?

如果是個國家,那麼這個“國家”的人口數剛好在全球排名第十。

如果是個遊戲的玩家數量呢?那就是:Minecraft《我的世界》!

a94608d8c538a19326574417bf24fdd8.png

作為一款多年來風靡全球,月活使用者數達1.31億的爆款遊戲,《我的世界》除了可以單機遊玩,也包含了豐富的聯機要素。為如此龐多的玩家群體提供聯機服務,這遊戲的後端該有多強大?

其實這也是不斷探索追逐極限才能實現的壯舉。

Minecraft Realms的Azure遷移之旅

Minecraft《我的世界》這款遊戲相信大家都不陌生。作為一款以建造為主題的沙盒類遊戲,玩家可以用大量不同外觀和功能的“方塊”作為素材搭建奇妙有趣的世界,甚至在此基礎上通過生存、創造、冒險、極限、旁觀等模式體驗更多樂趣。

而Minecraft Realms是該遊戲提供的一種線上平臺,玩家可以在這個平臺上建立個人伺服器,並邀請好友一起遊玩。可以說,《我的世界》這款遊戲的大部分網路聯機體驗都是通過Minecraft Realms實現的。

作為一款全球總銷量超過2億份,月活使用者1.31億人的爆款遊戲 ,它的後臺系統可謂規模龐大。Realms整個系統包含數以萬計的雲託管多玩家遊戲伺服器,執行服務程式碼的計算裝置,訂閱資料庫和遊戲世界狀態資料儲存容器,所有這些東西原本都託管在AWS上。

為了獲得更高成本效益,與微軟生態實現更好的互操作性,並進一步降低遊戲延遲改善遊玩體驗,遊戲開發工作組Mojang打算將後臺整體遷移至Azure。整個遷移過程分為兩個階段。

階段一:遷移雲託管多玩家伺服器

Minecraft Realms在雲中託管了數以萬計的多玩家伺服器。這些伺服器會在使用者連線至自己的Realm時動態分配。特定時間內,每個Realm都執行在一臺虛擬伺服器中,這些伺服器會隨著需求的增加和減少而分配和回收。

在第1階段,需要將Realm從AWS遷移至Azure PlayFab多玩家託管服務中。Azure PlayFab提供了在大規模環境中構建和運維線上遊戲所需的支援 。尤其是,這是一種針對遊戲量身定製的服務,可提供全球低延遲多玩家託管服務和遠端內容管理功能(用於更新遊戲資源、管理線上支付,以及實現LiveOps),藉此可將遊戲作為一種服務來執行,並針對遊戲效能進行實時分析。當成功遷移至PlayFab Multiplayer Servers後,Realms團隊幾乎不需要 關注虛擬機器的管理工作,可以將更多時間用於改善自己產品為玩家提供的遊玩體驗。

此時整個後臺的多玩家伺服器部分已經執行在Azure中,而其餘儲存和資料庫等系統還在AWS,大致架構如下圖所示:

e4de2fc953e4e227b5fab25fcdd8bdea.png

階段二:遷移工作負載

隨後,Mojang按照規劃將資料庫、儲存以及計算裝置從AWS順利遷移到Azure。

資料庫

Minecraft Realms服務涉及大量關鍵業務資料,包括遊戲世界狀態資訊、訂閱後設資料以及遙測資料。這方面共涉及三個預生產環境和兩個生產環境,每個環境中包含最多3個資料庫,而此次遷移需要將分佈在13個資料庫中,總量1TB的資料(最大的資料庫包含450GB資料),以可靠的方式從AWS移至Azure Database for MySQL。由於遷移期間會產生每秒約6千個服務請求(RPS),因此這個涉及關鍵業務的操作變得更加複雜。

Azure提供的一系列實用工具(如Azure Database Migration Service(DMS),以及來自Azure FastTrack團隊的專家支援)對成功遷移至關重要。Mojang還使用了Azure Database Migration Service工具,它可以簡化將資料、Schema和物件從源位置遷移至Azure的過程。Azure FastTrack團隊則為Mojang量身定製了指南,進一步加速、簡化並優化了Azure部署。

資料庫的遷移複製持續了約一週。初始資料載入過程中,最大的一個資料庫表(超過10億行!)也只用了2天時間。儘管服務需要處理6k的RPS,但所有複製延遲均未超過幾秒鐘。在這一過程中,每週Mojang會從AWS將一個新環境遷移至Azure MySQL,為此會安排一個較小的停機時段(大部分環境約20分鐘),在這期間順利完成Azure DMS遷移。部署完畢後環境重新上線後,資料庫就成功託管在Azure了!

所有資料庫成功遷移後,後端系統的大致架構如下圖所示:

33d7fa1bea472f5b55a52c46b61755e1.png

儲存

Minecraft Realms豐富的遊戲玩法,其精髓在於構建精美的虛擬世界,玩家可以聚集在私密的空間中一起遊戲。Realms已經儲存了約20PB以上的虛擬世界遊戲資料。

Mojang計劃在儘可能避免對遊玩過程產生影響的前提下將所有世界資料遷移至Azure Blob儲存。這一過程會導致遊玩遭遇停機,因為在移動資料的過程中,玩家將無法訪問自己的Realm。為避免停機,Mojang採用了這樣的策略:當現有的活躍Realm世界被首次訪問時,從AWS讀取現有的世界資料,隨後將所有更新寫入至Azure Blob儲存。以後再訪問這些資料時,將只通過Azure Blob來訪問。

因此所有活躍的Realms都會在執行的過程中完成遷移。玩家只有在通過Azure首次啟動自己的Realm時會體驗到難以察覺的(毫秒級)延遲。最終,只需要將剩下的不活躍世界資料(指最近一年內均未被啟用過的資料,約300TB)進行批量複製即可。

儲存遷移的大致過程如下圖所示:

b2c714d06e467e1142b21c3febac3887.png

計算

Realms服務程式碼通過執行關鍵任務(如記錄後設資料更新、處理Realms內的購買行為、預配/撤銷遊戲伺服器)處理了來自Minecraft客戶端的所有Realms請求。整個Realms服務程式碼最初託管在AWS,通過60多個虛擬機器承載遊戲的大部分核心服務。

為確保玩家可以無縫更新,Mojang採用了一種藍綠部署策略(如下圖所示)。其中會將一個版本同時部署到Azure和AWS,並通過DNS更新的方式在這兩個位置間切換使用者流量。藉此可以在將測試和客戶流量完全指向Azure之前完整建立並測試每個環境。由於AWS和Azure上的部署在同時執行,使用者流量遇到的任何問題都能快速撤銷並修復。藉此可以快速安全地回滾,最大限度避免停機,並能實現穩健的驗證。

08c791a15b95a2e8e3d60793c51b6697.png

總結

至此,Mojang就成功將整個Realms服務(包括前端伺服器(計算)、虛擬世界資料(儲存)、以及所有資料庫和遊戲伺服器本身的管理工作)遷移至Azure。這不僅幫助他們提高了Realms核心業務的效率,同時也改善了Realms玩家的遊玩體驗。

藉助強大的Azure工具集,Mojang還降低了服務維護成本 —— 程式碼規模更小,部署更簡單,抽象程度更高。與此同時,還利用覆蓋全球的Azure服務進一步改善了遊玩體驗。

雖然大規模關鍵業務系統的遷移看起來似乎很難 ,但明確最終目標,建立可靠的遷移規劃,並對相關元件進行拆解,這樣做可以大幅簡化整個過程。同時Azure也會為相關遷移專案提供必要的技術支援和一系列工具與服務支援

c7f458fc1aa720b5fb3cde85533dc038.png

是否想要體驗基於Azure搭建遊戲後端系統,或者將其他平臺上現有的系統遷移至Azure?歡迎掃描下方二維碼,立即註冊Azure試用賬戶,感受不一般的遊戲運維體驗。

3566554e3a6d59d039c1cae7f32fdbf2.png

相關文章