はじめに
本記事は8月1日〜2日で開催されているGoogle Cloud Next Tokyo ’24の1日目に行われた、「『鉄拳8』のグローバルなマッチングと対戦を支えたGoogle Kubernetes Engine(GKE)と Diarkis」のセッションのレポート記事となります。
鉄拳8はバンダイナムコエンターテインメント社より2024年1月26日に発売されたゲームソフトで、世界中のユーザーとクロスプラットフォームでのリアルタイムオンライン対戦を実現しており、本セッションではそのシステムを支えている技術の解説が行われました。
鉄拳8のリアルタイムオンライン対戦を支えているミドルウェア
結論から言うと、鉄拳8のリアルタイムオンライン対戦では株式会社 Diarkisにより提供されている、Diarkisという通信ミドルウェアが利用されています。
DiarkisはUDPやTCPで直接通信することにより高速通信を実現しているとのことです。
また、DiarkisをGKEやGCEなど様々な利用環境での動作をサポートしており、鉄拳8においてはGKE上でDiarkisを稼働することによって、サーバーの負荷に応じたスケーリングや障害が発生した際のサーバー (Kubernetes Node) 間の移動が可能なため、高速通信を実現しながらも可用性と信頼性も担保しています。
鉄拳8のオンライン要素
鉄拳8のオンライン要素として、「Matchmaking」「P2P」「Lobby」の3つの要素があり、うち「Matchmaking」「P2P」の2つが前述したDiarkisを利用しているとのことです。
P2Pはサーバーを経由せずクライアント同士が直接通信する方式ですが、P2Pが不安定な場合のリカバリー策としてTURNと呼ばれるP2Pの通信を間でリレーするサーバーも利用されています。
鉄拳8で求められた要件
また鉄拳8では「世界中のユーザーとグローバルにマッチングし、かつ低レイテンシで安定していること。」という要件が求められていました。
これをGoogle CloudのVPCで世界中のリージョンにサブネットを構築することで、リージョン間で高速に通信し、また各リージョンにTURNサーバーを構築することで、「世界中のユーザーとグローバルにマッチングし、かつ低レイテンシで安定していること。」という要件を満たすことができたとのことです。
これはリージョンをまたいでネットワークの作成やGKEのクラスタリングをできる、Google Cloudならでは強みではないでしょうか。
鉄拳8のリリース後のトラブル対応
また、リリース前にCloud Monitoringを利用して、マッチングや対戦品質のメトリクスの収集を設定していたことで、リリース後に問題が発生しているリージョンを素早く特定し、適切な対応を行うことができたとのことでした。
おまけ
Diarkisはステートフルな作りになっているということをセッション内で話されており、ステートフルな状態でどのようにサーバー間を移動しているのかが個人的に気になったので、セッション後に直接スピーカーへ質問できるAsk the Speakerで聞いてみました。
結論からいうと、DiarkisはセッションIDやそのゲームのプレイヤー名などの任意で設定可能な属性値をインメモリでステートとして持っており、プロセスのSIGTERMをDiarkisが検知するとステートを保持したまま別のサーバーに移動するとのことでした。
ステートをディスクに持たずにメモリ上で持つことで、低レイテンシをアシストしているようですね。