歡迎光臨
每天分享高質量文章

Agones:一款基於Kubernetes的開源遊戲伺服器

在分散式系統領域,支援線上彈性擴充套件,實時多人專屬遊戲伺服器意味著特殊的挑戰。隨著遊戲專業人士創造的各種特殊方案,Kubernetes被整合成跨雲和物理機,支援複雜工作流的開源分散式標準。今天,我們很高興釋出開源Agones[1](希臘語“contest”或者“gathering”的意思)專案,支援彈性擴充套件實時多人專屬遊戲平臺。
按照目前跟遊戲業界巨頭Ubisoft的合作進展,Agones被定位為自驅動(batteries-included),開源,基於Kubernetes的專屬彈性遊戲平臺專案,使用者可以在其上按需靈活調整自己的遊戲主機配置。

專屬遊戲伺服器的特性

遊戲行業一般透過軟體排程編排實現遊戲服務彈性擴充套件,而系統級的彈性則很少被考慮,實際上這並不奇怪。許多流行線上多人遊戲都需要專屬伺服器,例如competitive FPSs、MMOs和MOBAs,它們都需要給玩家共享同一個遊戲世界的感受。這種專屬伺服器一般都部署在網際網路上,來實時同步玩家之間的狀態,同時也需要對每個玩家狀態進行裁決,保證大家不會作弊。
專屬遊戲伺服器是在記憶體中保留遊戲資訊的有狀態應用。但是和其它有狀態應用(如資料庫)不同,他們生命週期很短,一般只需保留幾分鐘或者幾個小時。專屬遊服也需要直連到執行服務行程的IP和埠,而不是透過負載均衡器,因此這類應用對網路延遲很敏感(複雜均衡器只會增加延遲)。另外所有連到同一臺伺服器玩家會共享記憶體狀態,因此將他們連到同一臺裝置最簡單。下圖是一個典型架構,具體過程如下:

  1. 玩家們連線到某種匹配服務,匹配服務(一般透過玩家等級)將玩家匹配分組。

  2. 一旦玩家匹配成功,匹配服務通知遊戲管理器在伺服器叢集中提供一個專屬遊戲行程。

  3. 遊戲管理器在叢集中某臺機器上建立專屬遊戲服務。

  4. 遊戲管理器給專屬遊戲服務分配IP地址和服務埠,並傳回匹配器。

  5. 匹配器將傳回的IP地址和埠回傳給玩家

  6. 玩家們直連到專屬服務行程開始遊戲。

基於Kubernetes構建開源Agones

Agones用Kubernetes叢集替代了圖一架構圖中的叢集管理和彈性擴充套件功能,其中包括一個客製化Kubernetes控制器和客製化的遊戲服務資源定義匹配器。如圖二所示:

Agones透過呼叫標準Kubernetes功能和API提供的內建功能,可以在Kubernetes叢集中提供建立、執行、管理和彈性擴充套件專屬服務行程的能力。這種樣式也允許匹配器直接透過Kubernetes API和Agones溝通生成專屬遊戲服務。
在Kubernetes之上構建Agones還有其它好處:可以很容易在任何地方,例如開發者裝置,透過像minikutbe、in-studi叢集,on-premises裝置或者雲環境等平臺直接運行遊戲負載。Kubernetes也可以簡化操作。多人遊戲除了專屬伺服器外,還有後勤服務、賬戶管理、裝備、市場等其他行程支撐。用Kubernetes作為單一平臺可以動態執行支撐行程,減少開發團隊面對的遊戲層面複雜邏輯關係。
最後一點,Agones後臺並不只是孤立的遊戲開發,其後臺可以使用Kubernetes貢獻者和大量成熟工具帶來的生態系統。Ubisoft在Agones專案中資助了貢獻者,將他們頂尖的知識帶到了AAA級遊戲玩家面前。
我們的目的就是盡所能提供提供高質量無縫服務,讓玩家只需專註於遊戲中。Agones幫助我們在資料中心執行專屬遊戲服務的靈活性,而且給開發團隊提供了更多資源可控性。這種合作為整合Google雲平臺專業性和我們隊遊戲行業的專業理解提供了可能性。
——Carl Dionne,開發總監,Online Technology Group,Ubisoft
開始

因為Agones是基於Kubernetes擴充套件開發的,因此可以使用所有標準Kubernetes工具,包括kubectl和Kubernetes API。

建立遊戲伺服器

使用如下命令建立專屬遊戲服務:
Dockerfile
FROM debian:stretch
RUN useradd -m server
COPY ./bin/game-server /home/server/game-server
RUN chown -R server /home/server && \
   chmod o+x /home/server/game-server
USER server
ENTRYPOINT ["/home/server/game-server"]
透過變價Kubernetes Pod配置選線提價遊戲服務資源:
gameserver.yaml
apiVersion: "stable.agon.io/v1alpha1"
kind: GameServer
metadata:
 name: my-game-server
spec:
 containerPort: 7654
 # Pod template
 template:
   spec:
     containers:
     - name: my-game-server-container
       image: gcr.io/agon-images/my-game-server:0.1
透過kubectl命令列或者Kubernetes API提交以上定義:
$ kubectl apply -f gamesever.yaml
gameserver "my-game-server" created
Agones會按照yaml檔案中配置啟動遊戲伺服器,分配一個公有埠,將IP和埠號發回玩家端進行直連。透過嵌入遊戲伺服器內的SDK程式碼監控遊戲伺服器生命週期和狀態。可以透過kubectl和Kubernetes API向遊戲伺服器請求獲得各種資訊,包括狀態、IP和埠等。
$ kubectl describe gameserver my-game-server
Name:         my-game-server
Namespace:    default
Labels:      
Annotations:  
API Version:  stable.agones.dev/v1alpha1
Kind:         GameServer
Metadata:
 Cluster Name:
 Creation Timestamp:  2018-02-09T05:02:18Z
 Finalizers:
   stable.agones.dev
 Generation:        0
 Initializers:      
 Resource Version:  13422
 Self Link:         /apis/stable.agones.dev/v1alpha1/namespaces/default/gameservers/my-game-server
 UID:               6760e87c-0d56-11e8-8f17-0800273d63f2
Spec:
 Port Policy:     dynamic
 Container:       my-game-server-container
 Container Port:  7654
 Health:
   Failure Threshold:      3
   Initial Delay Seconds:  5
   Period Seconds:         5
 Host Port:                7884
 Protocol:                 UDP
 Template:
   Metadata:
     Creation Timestamp:  
   Spec:
     Containers:
       Image:  gcr.io/agones-images/my-game-server:0.1
       Name:   my-game-server-container
       Resources:
Status:
 Address:    192.168.99.100
 Node Name:  agones
 Port:       7884
 State:      Ready
Events:
 Type    Reason    Age   From                   Message
 ----    ------    ----  ----                   -------
 Normal  PortAllocation  3s    gameserver-controller  Port allocated
 Normal  Creating        3s    gameserver-controller  Pod my-game-server-q98sz created
 Normal  Starting        3s    gameserver-controller  Synced
 Normal  Ready           1s    gameserver-controller  Address and Port populated

下一步

Agones還是很初級階段,但是我們對它的未來很期待。我們在其上已經開始了不少功能,例如遊戲伺服器叢集[2],包括支援Windows的0.2版本[3]路標支援,遊戲伺服器狀態蒐集和顯示,節點自動擴充套件等。
如果想嘗試Agones 0.1 alpha版本,可以直接在Kubernetes叢集上安裝,例如:GKE or minikube;我們也有一個很好的安裝檔案[4]可以參考。
相關連結:
  1. https://github.com/GoogleCloudPlatform/agones

  2. https://github.com/GoogleCloudPlatform/agones/issues/70

  3. https://github.com/GoogleCloudPlatform/agones/milestone/2

  4. https://github.com/GoogleCloudPlatform/agones/blob/master/docs/installing_agones.md

原文連結:https://cloudplatform.googleblog.com/2018/03/introducing-Agones-open-source-multiplayer-dedicated-game-server-hosting-built-on-Kubernetes.html
Kubernetes 實戰培訓

本次培訓內容包括:Docker容器的原理與基本操作;容器網路與儲存解析;Kubernetes的架構與設計理念詳解;Kubernetes的資源物件使用說明;Kubernetes 中的開放介面CRI、CNI、CSI解析;Kubernetes監控、網路、日誌管理;容器應用的開發流程詳解等,點選識別下方二維碼加微信好友瞭解具體培訓內容

3月23日開始上課,還剩最後5個名額,點選閱讀原文連結即可報名。
贊(0)

分享創造快樂