オンライン マルチプレイに対応した専用ゲームサーバーに関する構築パターン
FPS(First person shooter:一人称視点シューティング ゲーム)や MMO(Massively Multiplayer Online:大規模多人数参加型オンラインゲーム)など、オンライン マルチプレイを提供する際には、プレイヤーのステートを管理するための DGS(Dedicated Game Server:ゲーム専用サーバー)が必要です。DGS を用いない構築パターンとして p2p(Peer to Peer)と呼ばれるユーザー端末同士で処理をする方式があります。今回は、p2p とそれを用いたアーキテクチャに関しては説明しません。
通常 DGS は、インターネット上のどこかでホストされ、プレーヤー間のゲームの状態を同期します。DGS において、中央集権的にサーバーでゲームの処理をすることで、ユーザーの不正行為を防ぐことができます。また、DGS をスケールアウトすることで、同時に接続するユーザー数を増やすことができます。そのため、オンライン マルチプレイ ゲームを開発する際に有効な構築パターンの 1 つといえます。典型的な DGS を用いたオンライン マルチプレイ ゲームのアーキテクチャは、以下のとおりです。
一般的には、フルスクラッチでオンライン マルチプレイに対応した DGS を管理するオーケストレーターを構築するのは困難です。 理由は、必要に応じてスケールアウトしたり、ユーザーがプレイ中のサーバーは削除しないなどの機能を独自に開発したりする必要があるためです。そこで Google では、インタラクティブ ゲーム大手の Ubisoft と共同で、専用サーバーのホスティング、スケーリングを Kubernetes ベースで実現する Agones というオープンソース プロジェクトを推進しています。
デザイン パターン詳細
GKE + Agones を用いた DGS 構築のパターン
解決する課題・使い所
DGS をコンテナとして、Kubernetes 上にホスティングするメリットとして、以下の点が考えられます。今回、Kubernetes に関する詳細な説明は行いません。
コンテナを利用することにより、環境要因で DGS(アプリケーション)が起動しないといった課題の発生を極力防ぐことができます。
アクセス増加に伴うスケーリング、可用性向上のためのオート ヒーリング機能など、コンテナを管理する上で必要な機能が Kubernetes で提供されます。
VM と比べて軽量なコンテナの方が起動と削除を高速に行えます。
しかし Kubernetes では、起動中の DGS において、ユーザーがゲームのプレイ中か、そうでないかを判断することができません。そのため、Kubernetes のスケールインで、プレイ中の DGS が削除されてしまう可能性があります。この課題を解決するための機能を、Agones が提供しています。具体的には、K8s のカスタム リソースを利用して、利用中の DGS のステータス管理を可能にすることで、プレイ中の DGS が削除されることを防ぐことができます。
利点
スケーラビリティ / システムの可用性
Google Kubernetes Engine + Cloud Spanner パターンでも紹介されていますが、GKE を用いることで、スケーラビリティに富んだ、可用性の高いシステムを構築できます。また、Agones では、必要な数の DGS を割当可能な状況で一定数保持する機能を有しています。これは、 Fleet / Fleet Autoscaler という Agones で定義された Kubernetes のカスタムリソースを利用して実現しています。開発工数の削減
DGS のスケールアウト、ステータス管理の機能を利用することで、“車輪の再発明”を防ぐことができます。また、さまざまな言語に対応した SDK も提供しており、使い慣れた言語で DGS を開発することが可能です。アーキテクチャの柔軟性
Google Cloud には、複数の Kubernetes 上で稼働する Agones クラスターを一元管理できる Google Cloud Game Servers(GCGS)と呼ばれるマネージド サービスがあります。GCGS を利用することで、複数の Kubernetes クラスター上の Agones クラスターを一元管理できます。これにより、大規模な Kubernetes 上に DGS をデプロイでき、拡張性高いゲーム基盤を容易に構築することができます。
また、ユーザー同士のマッチ メイキング機能を提供する Open Match というオープンソース プロジェクトを Google Cloud と Unity で推進しています。こちらも Kubernetes 上で動くことを前提としたプロダクトです。オンライン マルチプレイ ゲームにおいて、マッチ メイキングは必要不可欠な機能です。Agones と組み合わせることで、ユーザーのマッチ メイキング、DGS の管理を OSS により Kubernetes 上で実現できるため、ゲーム開発における工数を削減することができます。
さらに、Quilkin という Embark Studios と共同で開発された、UDP プロキシがあります。サイドカー パターンで、Kubernetes の上で動き、ユーザーと DGS の通信をプロキシします。これにより、ユーザーが DGS へ直接アクセスすることがなくなり、悪意のある攻撃者から DGS を守ることができます。
このように、Kubernetes 上で動くオープンソースを組みわせることで、可用性の高い大規模ゲームサービスを、容易かつセキュアに構築することができます。
注意事項
GKE クラスタ / Agones のアップグレード戦略を適切に計画しましょう。
このパターンで作成された事例
参照文献