Agones と一緒に使うフルマネージドなマッチメイキング Diarkis Matchmaker の考え方
Google Cloud Japan Gaming Team
はじめに
マルチプレーヤー型ゲームで欠かせないのはマッチメイキングです。多くのゲーム デベロッパーにとって専用ゲームサーバーで独自の実装が必要であり、ゲームのロジックを独自で開発する上で Agones 等のゲームサーバーのライフサイクルを管理するフレームワークが利用されます。なお、マッチメイキングの部分は独自で作成することはそれほど簡単ではありません。マッチングのロジックはゲームに依存し開発は必要ではありますが、プレイヤーの検索やゲームする複数のプレイヤーをゲームの世界に誘導することは共通する部分であり、マネージドサービスの必要性は多いです。このブログでは Diarkis のマッチメイキングについて解説し、各コンポーネントの説明をした上で Agones と組み合わせた場合を例にして実装されどのような構成・アーキテクチャになるかを紹介します。
ゲームサーバー/Agones のおさらい
Agones は専用ゲームサーバー (Dedicated Game Server(DGS)) を Kubernetes(k8s) 上で実行するための OSS になります。
FPS(First Person shooter/一人称視点シューティングゲーム) や MMO(Massively Multiplayer Online/大規模多人数参加型オンラインゲーム) など、オンラインマルチプレイを提供するものは、プレイヤーのステートを管理するため DGS を必要とします。DGS は通常、インターネット上のどこかでホストされプレーヤー間のゲームの状態の同期を行います。p2p のようにホストがユーザー側にないため、不正行為からの保護としてもメリットがありますし、同時に接続するユーザー数も、端末機よりスケールすることができます。
一般的なマルチプレイゲームで Agones を利用するパターンは以下の構成となります。
Matchmaker 側で成立されたマッチごとに DGS を利用することになるので、k8s → Agones Controller 経由で DGS を確保します。確保された DGS の情報をマッチのプレイヤーに返すことで直接の通信が可能になります。
source : Introducing Agones: Open-source, multiplayer, dedicated game-server hosting built on Kubernetes
上記の構成を踏まえて、Diarkis Matchmaker と Agones を組み合わせた場合の構成を次のパートで紹介します。
Diarkis Matchmaker の紹介
Diarkis は、マルチプレイヤーゲームの規模に合わせたスケーリングのために、クライアントとサーバー間のリアルタイム通信を処理するソフトウェアエンジンです。Kubernetes の上で動作するように設計されており、マッチメイキング、ルーム形式のマルチプレイヤーコミュニケーション、MMO 形式の機能など、マルチプレイヤーゲームに必要な機能を備えています。
またスケールもしやすくするように開発されており、同時数十万プロフィールを数百ミリ秒~数秒程度でマッチングさせた実績もあります。
Diarkis Matchmaker の考え方
Diarkis マッチメイキングはプレイヤー追加 (Add)、プレイヤー検索 (Search)、プレイヤー削除 (Delete) を利用することでマッチングを実現しています。これによってスケーラブルでシンプルなマッチメイキングの実現が可能です。
Agones と Diarkis マッチメイキングを利用してマルチプレイヤーゲームを実現する方法を説明するためにひとつの Sample を使って解説します。その前に Diarkis の Matchmaking を理解するための Room Module の概念について紹介します。
Diarkis Room Module
Diarkis Enterprise 版 ( Kubernetes Cluster をご提供する版 ) では Room Module という Module が提供されます。
まずは Room Module がどのような機能を持っているのかをウォークスルーしていきましょう。 Room Module はその名前の通り、複数のユーザを仮想的な部屋に格納することで、 Room 内のユーザ間でリアルタイム通信を可能にする Diarkis の Module のひとつです。Room 内のユーザ間で、 TCP, UDP, RUDP による Broadcast が可能で、ユーザやゲームの状態管理を行うための通信手段を提供しています。
また、 Room Module には 1 人のユーザが複数の Room に入ることができないという排他制御が実装されています。
さらに、 Room には非常に短い時間で Live Migration を行ってユーザを退避させる機能もあるので、こちらの機能を用いて耐障害性を上げるという利用方法もあります。
厳格な Matchmaing のための Room 利用
この “ 1 人のユーザが複数の Room に入ることができない” という制約を使って Matchmaking における重複排除を実現することが可能です。重複排除の詳細なフローに関しては以下で再度解説しますが、ここでは大まかな流れとして、
1. 自分と同じ条件 ( e.g: スコアやランクなど ) の Room があるか検索する
a. なければ作成する
2. Room に入れるか試みる
a. Room Join 失敗 => Room が定員オーバー or 自分がすでに別の Room に入っている
b. Room Join 成功 => Matchmaking 成立
というように Room への Join を試みることで重複排除を実現しています。
Matchmaking だけじゃない Room Module の特徴
ここまでの Room Module の特徴をまとめると
- ユーザの重複排除
- 1 ユーザ, 1 Room のみの Join
- Room の Live Migration
- メッセージのユニキャスト, ブロードキャスト
- クライアント側での callback 登録。 Room のイベントに対してクライアント側で callback 関数を登録しておくことで、イベントドリブンなゲームシステムの構築が可能
- 定期実行される関数を Room に対して付与
- Live Migration による耐障害性の大幅向上
となります。
Agones と一緒に使うDirakis の Matchmaking の考え方
ここまでは、Agones の概要、Diarkis のMatchmakingと Room Module について説明しました。このパートでは、具体的に一緒に使うパターンをご紹介し、一つの例をもとに Player がログインする段階からプレイが開始するところまでを解説します。
上記の図で番号で表示している通り、Diarkis MatchMaker はゲームのフロントエンドからリクエストされます。Diarkis MatchMaker で Room を作成し同じ条件のプレイヤーが揃えれば専用ゲームサーバー (DGS) の情報を返し、直接 DGS に通信することでマルチプレイを実現できます。
まとめ
今回の記事ではマルチプレイゲームに必要不可欠な Matchmaking の部分をどのように Dirakis ソリューションを活用できるかを紹介しました。
Diarkis ソリューションは Matchmaking に必要なコンポーネントが揃っており、簡単にスケールするという特徴もあります。専用ゲームサーバーは Agones を OSS として利用する場面でも Dirakis の Matchmaking や Room を利用することも可能であり、Diarkis ソリューションで Real Time サーバーの構築や低コストかつ安定なゲームサーバーを実現できます。
Diarkis MatchMaker のスケールに関する情報はこのホワイトペーパーで紹介されていますので、ぜひご確認ください。