しがないエンジニアのブログ

技術的な内容をメモ代わりにつらつら

[Unite2019] Google Cloud for Games 〜オープンソースからマネージドサービスへ〜

動画・スライド:なし

ハムディ サミール グーグル・クラウド・ジャパン合同会社

※ スライドが公開されてないためメモ書き程度の内容になっています


学んだ知見

  • agones
    • k8sを活用したサービスの場合スケールアウトをより負担なくできる
  • open match
    • リアルタイムマッチング機能開発を新しくする場合に使える

講演概要

フォーカスしていること

  • ゲームサーバホスティング
  • プラットフォームサービス
    • マッチメイキング、アイテム管理など
  • ゲーム分析

googleだからこそ

次世代マルチプレイヤーゲーム

  1. real-time multiplayer experiences
  2. planet-scale matchmaking

1.real-time multiplayer experiences

ゲームサーバとは?

  • イベントを受け持つサーバ
  • 正しいゲーム世界を表示するためにゲームの状態に関するデータを送受信
  • リアルタイムかつ信頼できる方法で完了しなければならない

クライアント

  • PC, コンソール、モバイル
  • 単一プレイヤー サーバ
  • Host, VM
  • 対戦プレイヤー

ゲームサーバが行うこと

  • 入力を受信
  • 位置トラック
  • 衝突、異動管理
  • 物理演算
  • ゲーム状態をプレイヤーに送信

毎秒120回にも及んで処理をしている!

よく使うP2Pモデル
なぜ専用サーバが必要か?

  • すでにP2Pがあるし、無料

しかし、マルチスケールしない、チート対策できない
平均以下の体験になってしまう

専用サーバモデル

  • 一貫性
  • スケーラブル
  • セキュア
    ワールドクラスの体験
    最近はこちらが主流(fort night, apexなど)

→ Dedicated Game Server

典型的なアーキテクチャ
クライアント → Matchmaker ←→ Server Manager ←→ 複数のDedicated Game Server

Dedicated Game Server

自前で作ると…

  • 外部依存なし
  • コンテナ不要
  • コーディング必須
    • メンテの必要性

専用サーバのデプロイ
Gameserverをたくさんよういしてやる

もう1つのやり方、コンテナ化

  • どのk8s環境でも実行可能
  • OSSでコミュニティが開発
  • コンテナ化は必須
    • OSの選定が必要になる

agonesを利用?

Agonesについて

ゲームサーバのあれこれをコンテナで正しく動作させるために作られた

SDKの機能

  • ゲームサーバのライフサイクル管理
    • レディネス&停止
    • ヘルスチェック
    • アクセスと監視の設定
    • 構成値を設定

agonesを使うと、スケールダウンについて起動中のセッションを落とさずに実行できる!!
k8sだけだと起動中のものも落ちてしまう

一般的にアロケートされたものを解除したいときは、APIで解除のメソッドを呼べばallocated → readyになる

Agonesのアーキテクチャ
クライアント → Custom Matchmaker → k8s API ←→ Agones → Dedicated Game Server

Google Cloud Game Servers(agones + Google Cloud)
フルマネージドAgones

  • シンプル
  • 柔軟
  • OSSと同じSDK

Google Cloudで グローバル&リアルタイム&マルチプレイヤー
ゲームをローンチする最もかんたんな方法

高いパフォーマンスも発揮できる

2. planet-scale matchmaking

open match

  • マッチメイクフレームワーク
  • 柔軟性、スケーラビリティ、拡張性にフォーカス

doodle ハロウィンで初めて利用された

アーキテクチャ
player ←→ Game Frontend → Hosted Environment(open match) ← director → Servers

Game Frontend: チート対策のために、open matchを直セスアクセスさせない(ロビーでプレイヤー情報を確認する)
director: マッチングをトリガーするプロセス

fake player0/1 → create ticket
match
return assignment to open match by director
return assignment to fake player0/1 by open match

ticker: 試合をリクエストしているプレイヤー
assignment: open matchからチケット作成者に情報が返る

現状のopen matchはv0.7

open matchの事例

  • kick flight
    • 360ど空中対戦アクションゲーム
    • 4vs4のリアルタイムバトル