GKEなどのGoogle Cloudサービスを用いた負荷軽減と運用効率化のノウハウを披露
「あれ、サーバー代で倒産する…?」大ヒットゲーム・パルワールドが語る、安価で堅牢なインフラ構築
公式サーバー:リアルタイムゲームサーバーをKubernetesで運用する意義
もうひとつ披露されたのが、ポケットペア自身が運用する「公式サーバー」での取り組みだ。この公式サーバーも、APIサーバーと同様にGKEを採用している。
公式サーバーは、ステートフルなアプリケーション管理向けのワークロードAPI「StatefulSet」を利用して、1台のPodで並列化せずに運用しており、セーブデータはPersistentVolume(永続ボリューム)に保存している。そして、ゲームクライアントはノードのHostPortに直接接続する。
「これだけみると、Kubernetesで管理する理由は少ないのではと思うかもしれないが、使ってみるとGKEが便利な場面が沢山あった」(笹氏)
ひとつ目のメリットが、「Kubernetesの仕組みで管理が容易になること」だ。「Kubernetesの仕組みは、ゲームサーバーにおいても運用を助けてくれるものが多い」と笹氏。
例えば、コンテナの不正終了を検知して自動で再起動したり、CronJobで定期的にバックアップや再起動を実行したり、PreStopでメンテナンスや定期再起動の際にシャットダウン処理を追加で入れることなどができる。
2つ目のメリットが「Google Cloudの他のリソースとの連携」だ。特に、セーブデータの管理では、ストレージ周りのバックアップやリストアが必要となるが、Google Cloudとの連携によって容易に実現できたという。
PersistentVolumeに保存されたセーブデータのバックアップには、Kubernetesの「VolumeSnapshot」リソースを活用している。PersistentVolumeがGoogle Compute Engine(GCE)のディスクと対応しているように、VolumeSnapshotはGCEのスナップショットと対応している。これを利用して、Kubernetesの仕組み(CronJob)だけでバックアップを完結させた。
これは差分バックアップであるため、前回のスナップショットからの変更データのみが保存され、低コストでの運用が可能だ。また、リストアする際は、PersistentVolumeClaimに、リストアしたい時点で作成したVolumeSnapshotのリソース名を指定するだけで、その時点まで戻すことができる。
最後は、「管理対象サーバーのマニフェスト化」だ。対象のサーバーは、Kubernetesのマニフェスト形式でコードとして扱えるため、GitHubで管理してGitHub Actionsでデプロイができる。
オペレーションの共通化や情報取集に役に立ち、実験版やプラットフォーム違いなど、様々なバリエーションのサーバーも手間なく増やすことができる。
最後に中條氏は「この発表によってゲーム業界でGoogle Cloudを採用する方々の参考になれば嬉しい」と締めくくった。