Google Cloud Platform 提供了高度可擴展和可靠的遊戲實施,該平台使用 Google App Engine 和 Google Compute Engine 進行即時線上玩家的互動。 該解決方案通過使用 App Engine 並通過使用 Compute Engine 來運行遊戲伺服器和一般的遊戲引擎,為玩家配對和玩家定制提供核心遊戲元素。
此解決方案涉及的要點包括:
• 擴大服務數百萬的玩家。
• 使用GCP構建功能齊全的遊戲體驗。
• 利用App Engine進行前端互動,並在數據存儲區(datastore)中維護遊戲狀態。
• 使用App Engine來管理(orchestrating)和自動縮放(auto-scaling)由Compute Engine所建造的遊戲伺服器。
• 通過分析包含用戶和遊戲統計資訊的大量數據集(datasets),獲得業務洞察。
*本文翻譯自 “Game Server Reference Architecture with App Engine and Compute Engine” 一文,內容仍以原文為準*
**文末還有Github範例可以下載**
隨著玩遊戲的人數不斷增加,您需要為強大的遊戲體驗所需的計算資源量可能會增長很多。 線上遊戲已經從只有少數人在其車庫中運行到成百上千萬玩家享受網路的遊戲體驗、玩家配對、遊戲內購買和好友清單。 這些常見的遊戲元件(game components)已經導致開發複雜的分佈式系統、高性能的計算和大規模網絡實作。 在競爭激烈的環境下,開發和提供下一個重量級遊戲需要仔細管理您的資源,專注於關鍵的遊戲成份上。
配置雲端資源或忽略一些複雜的處理會大幅減少人力和支出,而專注於遊戲或圖像資源。 通過使用Google Cloud Platform,您可以專注於創造獨特的遊戲體驗,同時充分利用Google在開發分佈式系統方面的豐富經驗。
該解決方案利用App Engine的可擴展性和可靠性,使運行在Compute Engine遊戲伺服器上的玩家可以順利進行匹配,並建立一段遊戲會話(game sessions)。 App Engine是一個可擴展的平台(PaaS)提供例如使用者檔案、玩家配對、遊戲內購買、遊戲社群和手機端的互動。 理想情況下,App Engine滿足所有在線遊戲的需求,但您可能希望能進入VM中來運作一些常見的遊戲引擎和 SDK。 這時候就需要Compute Engine。儘管許多方面都可以用於純粹的App Engine實現,但主要的重點還是在Compute Engine上運行專用的遊戲伺服器。
此解決方案中使用的服務包括:
• Google App Engine
• 提供主要的圖像化用戶界面來提供遊戲和使用設定(user settings)。
• 提供玩家配對和伺服器瀏覽。
• 將負載分配至各台Compute Engine。
• 維持提供集群(cluster)來處理玩家的遊戲負載。
• Google Compute Engine
• 運行客製化(customized)遊戲伺服器。
• Google BigQuery
• 分析大量的遊戲和用戶數據集。
• Google Cloud Storage
• 儲存遊戲伺服器二進位檔案文件。
• 分配遊戲客戶端二進位資料和遊戲虛擬財產。
• 儲存備份日誌以處理並加載到BigQuery中。
線上遊戲解決方案的關鍵架構元件
用戶通過下載本地應用程式或導航到遊戲的網站,開始玩最喜歡的遊戲。 如果是他們第一次玩,所有客戶端二進位檔案文件和遊戲虛擬財產都可以從雲端存儲下載。 雖然遊戲客戶端在行動設備和個人電腦各有不同,但仍然都會提供核心的遊戲功能。 核心功能包括更新用戶個人資料、管理玩家config和檢查朋友的成就。App Engine可以通過直接提供網站或提供 RESTful API 來存取所有必要的資訊,且用於所有設備。
以下部分將詳細介紹遊戲解決方案的每個關鍵元件。
選擇一個遊戲伺服器
允許玩家加入遊戲伺服器並與其他玩家互動是主界面最重要的組件之一。 玩家配對是這款遊戲解決方案的一個部分,它與玩家在同一地區和遊戲模式的用戶相匹配。 根據搜索,性能和可擴展性要求,此解決方案還可以通過利用Cloud SQL ,Google自定義搜索API或Google Cloud Datastore來擴展到包含所有功能的伺服器和搜索功能。
連接到專用遊戲伺服器
玩家選擇伺服器加入後,遊戲客戶端接收到專用伺服器的IP地址,玩家的遊戲客戶端建立和與運行在Compute Engine上的專用伺服器做連接,並加載遊戲中的虛擬財產。
Compute Engine遊戲伺服器負責通過低延遲的客戶端伺服器通信處理所有玩家的互動。 有關設計多人遊戲伺服器的相關資訊超出了本文的範圍。 設計多人遊戲伺服器時,建議利用現有的遊戲伺服器和SDK。
管理遊戲中的請求和Compute Engine運行狀況檢查
當Compute Engine上運行專用遊戲伺服器時,可能需要將遊戲中的請求發送到App Engine。 如果玩家從商店購買商品或建立了自訂的遊戲config,則App Engine可以維護此資訊。 此外,專用遊戲伺服器可以回傳到App Engine來更新玩家分數,統計數據和體驗級別。
當一整個流程完成後,玩家可以保留在遊戲伺服器上進行新一輪的循環或者重新導到器配對。 玩家的分數,比賽統計數據和遊戲中商店建議可以在輪次之間顯示。 如果專門的遊戲伺服器意外終止,則遊戲客戶端必須處理此事件,並將玩家重新導至新會話(sessions)進行伺服器配對。
自動縮放遊戲伺服器
自動縮放是第一個不會顯著影響遊戲的後台任務之一,然而對於構建可擴展的全功能遊戲至關重要。 此步驟將了解App Engine中的開發人員實施的專用遊戲伺服器自動縮放邏輯。 隨著玩家數量的增加,虛擬機將創建新的專用伺服器來處理增加的負載量。 同樣,如果白天的玩家人數減少,則可以關閉未使用的專用伺服器以降低成本。
儲存日誌(logs)進行分析
Cloud Storage是儲存文件的好選擇,例如伺服器日誌和分析pipeline輸出。 Compute Engine上的專用遊戲伺服器產生了大量有價值的數據,用於了解玩家行為和排除軟件錯誤。 為了長期儲存這些數據,文件應該使用後台進程(process),定期從Compute Engine Instances上傳到Cloud Storage。 如果需要分析pipeline來轉換和合併數據,則可以從Cloud Storage下載相關文件,並在其他Compute Engine上進行處理。 作業的輸出可以儲存在Cloud Storage中,可以將其輸入到Google BigQuery中的其他pipeline輸入,也可以編譯成報告。 有關資訊,請參閱使用Cloud Dataflow處理日誌並使用Fluentd和BigQuery進行即時日誌分析 。
使用 BigQuery 分析大量用戶和遊戲數據集
集成到此解決方案中的BigQuery是一種用於實時分析大量數據集的特殊查詢工具。 當專用遊戲伺服器託管數百萬活躍玩家時,您可以獲得數十億行的有用數據。 無論是原始遊戲日誌還是分析pipeline輸出,可以使用預定義(predefined)的模式將數據加載到BigQuery中。 加載完成後,SQL類查詢在幾秒鐘內完成,可用於獲取有價值的資訊,如用戶參與和遊戲激勵的影響。
實施細節
本節提供了分配玩家負載和提供創建全功能遊戲體驗所需的核心遊戲功能的實現細節。 該解決方案的主要焦點是分發遊戲伺服器來處理玩家線上即時互動的核心場景。 該解決方案可以延伸作為全店和社區模型的附加功能,但這些功能不在本文的範圍之內。
請求一個遊戲伺服器
玩家使用遊戲伺服器的瀏覽器根據配對標準來請求推薦的遊戲伺服器清單。 此請求是通過Google Cloud Endpoints提交的,它提供了由App Engine提供的身份驗證的RESTful API。
配對邏輯
匹配邏輯為用戶提供了推薦伺服器的清單。 根據配對要求的規模和頻率,您可以使用各種技術實現此解決方案。一種方法是使用App Engine後台來維護每個資料中心內推薦的伺服器清單,然後將該清單儲存在Memcache中以便快速檢索。 推薦伺服器的邏輯取決於遊戲的類型。 例如,一些遊戲推薦負載最低的伺服器以最小化延遲,而其他遊戲需要最少數量的人連接到每個伺服器以進行更多的配對排列。 雖然Memcache提供了高性能,分佈式快取(cache),物件緩存系統等,但建議也必須儲存在Cloud Datastore中,以避免Memcache的突發狀況。 App Engine Cron服務可以每分鐘安排任務。 對於後台來說,維護每個區域的推薦伺服器清單非常重要,因為玩家通常希望連接到最低延遲的伺服器。 其他伺服器選擇技術可以通過可用伺服器循環,或者向客戶端提供合理大小的清單,以便它可以識別最低延遲伺服器。 更複雜的解決方案可以包括維護所有伺服器的伺服器計數,加載,延遲和狀態的任務。 解決方案也可以設計為動態查詢每個請求。
返回配對結果
匹配的結果返回給客戶端,玩家從清單中選擇或客戶端自動選擇理想的伺服器。
連接到專用伺服器
遊戲客戶端嘗試連接到所選擇的專用遊戲伺服器的IP地址。 如果連接失敗或伺服器已滿,客戶端可以嘗試連接備用建議的伺服器或將玩家重新引導到伺服器配對。
處理遊戲中的請求
在玩家建立與專用遊戲伺服器的連接之後,伺服器負責處理來自玩家的所有事件並提供關於當前在比賽中的其他玩家的資訊。 App Engine通過處理重要事件和提供玩家資訊以達到在所有專用伺服器上保持一致的遊戲體驗。 例如,如果玩家具有自訂config,則對App Engine的請求提供有關config的資訊,並允許玩家存取所有購買的項目。 隨著玩家獲得經驗並發生重要的遊戲中事件,細節將發送到App Engine,以保持所有玩家的完整視圖。 對Cloud Endpoints的認證請求和提供的RESTful API是將游戲伺服器連接到App Engine的簡單方法。
請求玩家配置(config)
當遊戲允許玩家購買物品或創建自定義字符配置時,所有資訊必須保持在可靠和可擴展的資料中。 Cloud Datastore旨在擴展為數百萬用戶提供服務的Web應用程序。 推薦雲數據儲存用於儲存所有玩家資訊,因為隨著遊戲從數百萬玩家的增長而無縫擴展。 還可以利用Memcache來儲存頻繁的Cloud Datastore查詢結果,以提高性能。 因為Memcache是