こんにちは。ミクシィの 開発本部 SREグループ のriddle です。
弊社では2022年7月にゴーストスクランブル(通称ストブル)というスマホゲームをリリースしました。
ストブルはマルチプレイゲームとボイスチャット機能を搭載しており、最大4人でマルチプレイができるアクションゲームです。
この記事ではスマホゲームに求められる要件を説明しながら、
ストブルのバックエンド・インフラ構成もあわせて紹介します。
−−−−−−−−−−−−−−−−−−−−−−−−−
<目次>
−−−−−−−−−−−−−−−−−−−−−−−−−
ストブルのバックエンドでは以下の機能を提供しています。
ゲームアカウントを登録したり、ガチャをひいたり、アイテムを購入したりなど、ゲームのうち永続性と一貫性を持たせたい操作を提供します。
一般的に API サーバと呼ばれますが、ストブルでは gRPC を利用しているので gRPC サーバと呼んでいます。
gRPC をゲームで使うのはチャレンジングな試みでしたが、Protocol Buffers
の使い勝手がいい感じです。 またシリアライズによってデータサイズが小さくなるので、ユーザの通信量が小さくなるのもうれしいですね。
※HTTP/2ベースで動くので End-to-Endで TLS 必須なところが開発時に厄介ですが(ローカル開発するときは流石にinsecure
にはしますが)
また永続データはSpanner
に、
一時データはMemory Store for Redis
に格納しています。
ストブルは4人で同時に遊べる マルチプレイを売りにしています。 マルチプレイではサーバとの通信ではなく、ユーザ同士がパケットを交換して通信をするので専用のサーバが必要です。
モンストではTURN
サーバを利用していましたが、ストブルではプロトタイプ開発の容易さからモノビット社のMonobit Unity Networking 2.0 (MUN)
を利用しています。
MUN はホストOSにインストールする製品のため、
コンテナではなくCompute Engine
で動かしています。
よりマルチゲームを楽しんでもらうため、ストブルではボイスチャットを用意しています。 こちらは弊社のスーパーエンジニアがGKE
+Agones
で動くボイスチャットアプリを作ってくれました!
ボイスチャットの詳しい構成や挙動は別の機会に紹介したいと思います。
フレンドにマルチプレイゲームの招待をする際に使う機能です。
弊社で通知を実装する際は、リアルタイム通信もできるWeb Socket
サーバや通知専用のNATS
サーバを自前で建てていたのですが、今回は通知に特化したサービスがあればよかったのでFirebase Cloud Messaging(FCM)
を採用しています。
クライアントAがマルチプレイ用のルームを立てフレンドを招待すると
という流れで通知が飛びます。
続いてゲームの基盤に求められる特性(いわゆる非機能)を紹介します。
Web サービスと異なり、
ゲームの基盤は時間ごとのトラフィックの増減が非常に激しいです。
たとえば、リリース直後は大量のアクセスがありますが、その後はアクセス数がガクンと落ちます。 またイベントやキャンペーンといった販促活動を行うと大量のトラフィックが飛んでくることもあります。
そのためユーザ体験を損なわないように、スマホゲームにはスケーラブルなゲーム基盤が必須です。さらにアクセスが減った時は、コストを抑えるため簡単にスケールインできる必要もあります。
サーバなどのコンピュートリソースはコンテナの登場で増減が容易になりましたが、データベースはスケールインが難しいことが多いです。
そのため我々も使っているCloud Spanner
はボタンぽちぽちでスケールイン・アウトができるのでゲーム業界では支持を集めているようです。
ゲームでは bot や 不正ユーザからのアクセスや攻撃が多くとんでくるので、相応のセキュリティ対策が求められます。
実際ストブルもリリース直後に海外からの大量アクセスがとんできたので、Cloud Armor をつかって弾きました。
ただチートやセキュリティ対策の多くはユーザが直接ダウンロードするクライアント側での対策が必要です。(この動画がとてもわかりやすい)
「ゲームをどのように改善・更新していくか?」 を判断するため、
など、遊んでいただいたユーザのログを出力し、
自前のデータ基盤にためて、ゲームの継続率やミッション達成率など必要な項目を設定して KPI 分析を行なっています。ストブルではBigQuery
+Looker
で分析しています。
基盤やバックエンドを設計・構築する際には「ゲームの機能を提供する」以外にもこれらの非機能要件も考えています。
これらを満たすため、
ストブルでは以下の構成でサービス提供を行なっています。
参考までに使用している言語やツールも紹介します。
今回はざっくりストブルのバックエンド〜インフラで利用している技術を紹介しました。 個別の話や、リリースまでに色々と苦労したことについては別に記事にしようと思いますので、またよろしくお願いします!
ゲームも配信中なので、よかったら遊んでみてください!
株式会社MIXIに所属の開発者による技術知見や開発ノウハウ、カンファレンスレポートなど、開発に関する情報を共有するエンジニア・ブログです。
SRE Engineer in Mixi ! twitter->https://twitter.com/riddle_tec