每天,游戲行業都在以驚人的速度發展,與全球客戶群的指數級擴張同步。網絡和服務器滯后可能會導致游戲玩家響應遲緩并與游戲斷開連接。因此,解決這些問題已成為游戲社區的當務之急,以改善玩家體驗。可靠的服務器、實時數據分析和低延遲對于高質量的內容和出色的玩家體驗至關重要。
這使得游戲自然適合在云上運行。此外,由于云計算提供了靈活且可擴展的基礎設施,游戲公司不再需要估計他們將需要的游戲服務器,甚至不需要提前進行額外購買。
手機游戲現在是游戲行業中最大的部分。隨著現代移動技術的發展足以處理中等到繁重的游戲,許多主機游戲公司已進入移動領域。手機游戲傾向于創新、VR/AR、移動性、連接性,甚至走向全球。移動游戲的底層架構應該能夠處理繁重的工作負載和全球連接,同時將成本保持在最低水平,從而使云計算成為移動游戲公司的最佳選擇。
全球游戲服務器(一):內容加速與架構對比
全球服務器游戲加速
Global Server Game Acceleration(或Global Accelerator)的架構是建立在單一區域部署的中心化游戲服務器和全球部署的具有加速公共網絡訪問的邊緣位置。玩家通過高速通道在地理上被路由到最近的邊緣位置。這有助于最大限度地減少延遲,確保高質量的性能和可用性,并實現全球加速。
目前,全球服務器游戲的主要痛點是不同地區的玩家網絡延遲不同導致的游戲體驗不公平。第三方專用網絡連接的價格和質量變化等技術復雜性,全球邊緣位置部署涉及的高運維成本,復雜的代理等等。
移動加速器
游戲開發者可能會遇到以下問題:
- 應用程序安裝和啟動緩慢
- 游戲加載緩慢
- 高延遲
- 移動、聯通、電信等運營商互動緩慢
- 混亂的運營商IP庫
- 服務器訪問失敗率高
- 非 WiFi 連接的可用性低
- 高丟包率和域名劫持
- 交互體驗差
- 用戶的游戲體驗差異遍布全球。
這些問題使得阿里云移動加速器最適合解決客戶端與邊緣站點之間的“最后一公里”加速。見下圖。
全球加速
使用阿里云全球加速,您無需手動配置到邊緣站點的內容交付加速,這可能很復雜,并且需要長時間調試。全球加速確保您的高可用性、可擴展性、性能和靈活的路由。
基本上,全球加速通過使用EIP(彈性IP地址)將中心化服務器上??的ECS實例或VPC負載均衡實例映射到公網來提供點對點加速。全球加速加速跨區域、跨國連接服務器,如下圖:
全路徑加速
通過將移動加速與全球加速相結合,我們可以加速從服務器到客戶端的整個數據路徑。在該方案中,移動加速基于動態路由加速客戶端與邊緣站點之間的連接,而全球加速通過高速通道加速中心服務器與邊緣站點之間的連接。見下圖。
在本文中,我們研究了幾種支持全球游戲服務器的架構設計,并評估了每種設計的優缺點。
全球游戲服務器(二):典型系統設計與案例分析
典型系統設計
全球排名設計
在設計全球排名服務時,必須考慮需求、分析、數據結構、排名數據持久化、排名服務器單點故障等問題。一個排名服務架構如下圖所示:
該架構使用Redis實現定時數據。游戲服務器向排名服務器上報排名數據。客戶端從游戲服務器拉取排名數據,游戲服務器從排名服務器拉取排名數據。
游戲時間設計
所有游戲服務器均使用GMT Jan 1, 1970 00:00:00 offset(一般秒數絕對值1)來表示游戲時間。這個時間同步到游戲客戶端,游戲客戶端根據手機設置的時區計算出游戲時間顯示在客戶端。規格如下圖所示。
為什么需要游戲時間同步?
- 為防止客戶端修改本地時間混淆游戲邏輯,客戶端必須使用服務器時間。
- 基本上所有解決游戲狀態同步問題的技術,例如預測拉動或服務器驗證同步,都需要時間同步。
- 在游戲中,一些定時事件或與時間相關的玩法特性需要一個標準統一的游戲服務器時間來保證公平競爭。
- 在客戶端和服務器通信的過程中,更安全的方法是給每個數據包加上時間戳,這樣服務器就可以驗證數據包的合法性。
游戲數據同步
解決方案 1:使用緩存進行即時數據回寫
在這種方法中,數據集中存儲,本地緩存立即將數據寫回數據庫。具體架構如下圖所示。
目前涉及到數據同步的場景主要有兩種:
場景1 玩家在本地登錄(上圖中紅字標注的解釋)。
- 數據庫代理從數據庫中讀取角色數據。
- 數據庫代理將角色數據插入到緩存中。
- 從緩存中讀取的角色數據用于計算。
- 當數據發生變化時,緩存數據和數據庫數據同步更新。
- 當玩家退出游戲時,緩存中的數據將被刪除。
場景二 玩家跨地域登錄。
- 首先,系統會檢查玩家是否在其他地區登錄。如果是,則進入第 2 步。如果否,則進入第 3 步。
- 玩家的角色數據被寫回數據庫,并在玩家注銷時從緩存中刪除。
- 數據庫代理從數據庫中讀取角色數據。
數據庫代理將角色數據插入到緩存中。 - 從緩存中讀取的角色數據用于計算。
- 當數據發生變化時,緩存數據和數據庫數據同步更新。
- 當玩家退出游戲時,緩存中的數據將被刪除。
方案二:區域數據庫實時同步
各區域數據庫實時同步。您可以使用 Message Service 或Alibaba Cloud DTS來完成此操作。每個區域數據庫都存儲所有玩家的數據。
優點:
玩家可以從不同的地區玩游戲,他們的數據不需要遷移。所有區域都支持本地數據讀寫。
缺點:
異步數據同步會產生數據不一致。如果玩家使用 VPN 訪問游戲,則 VPN 暫時斷開連接可能會導致玩家在另一個區域重新登錄。如果數據同步消息丟失或延遲,玩家再次登錄時讀取的數據可能不是最新的。
各個區域包含所有玩家數據,因此實時同步可能會給數據庫帶來很大壓力。區域數據庫之間的實時同步需要大量的跨區域專線帶寬。
方案三:跨區域數據更新
當玩家從不同的區域登錄時,玩家的本地服務器必須遠程讀取戰斗數據。戰斗結果調用API觸發本地服務器數據更新。
優點:
對于同一區域的玩家,角色數據從最近的本地節點讀取/寫入。
缺點:
實現邏輯復雜。所有的游戲結果都必須抽象到一個接口,數據由原始服務器接口集中更改。
方案四:遠程數據遷移
當玩家從不同的區域登錄時,玩家數據從玩家之前的服務器遠程遷移。每次玩家登錄時,系統都要檢查是否需要進行數據遷移。
游戲本地化解決方案
游戲本土化是游戲進軍海外市場的重要考量因素。游戲無論是在海外發布還是希望擴展到新的地區,都必須注意本地化工作。一般的做法是構建一個標準的客戶端安裝包,里面包含幾個基礎素材包,不同語言的美術素材包,以及一些程序素材。這允許根據手機的語言版本動態呈現游戲。
常見的安裝策略有以下三種:
- 客戶端安裝包下載后,用戶手動設置語言版本。這么大的包里面包含各種語言包,支持一鍵選擇語言。
- 當游戲在客戶端安裝時,它會檢測移動設備使用的語言以動態選擇要安裝的語言版本。這些安裝包一般都有內置的默認語言,如果需要其他語言,需要從網上下載語言包。
- 不同語言版本的客戶端安裝包提交到應用商店。然后,不同的安裝包版本服務于不同的區域。每個安裝包都必須定制。