AWS Summit Tokyo 2018の「今すぐ実現できるゲームのクラウド対応 〜GameSparksとAmazon GameLiftでユーザー動向に即応〜」のセッションを聴いて、個人的に気になった部分をまとめています。
まだ資料が公開されておらず、個人のメモをベースに書いているため、内容が全て網羅されているレポートではありません。
資料、動画が公開されたら別途ちゃんとしたレポートを書きます(多分)
ゲームに必要なバックエンドサービス
ゲームのバックエンドサービスは、下記のような機能が主に作られる。
基本要素
- ユーザ管理、認証
- 課金管理
- フレンド
- チーム
- チャット
- リーダーボード
ゲーム要素
- ゲーム内通過
- ロビー
- etc...
クライアントでこれらのを実装すると、クラックされてしまう恐れが強まるため。
バックエンドサービスの大変なところ
- 実装工数がかかる
- リリース後もバグ修正や機能向上が必要
- 運用時に障害が発生した際、夜間や休日でも呼び出されることがある
- プログラムのバグだけでなく、データ更新に失敗した時なども呼び出される
GameSparks
概要
- ゲームのバックエンドサービスをサーバーレスで実現
- 認証、課金、ガチャ、etc...
- 色々なゲームの機能があらかじめ用意されている
- 開発時間とコストの削減
- ゲームデータをリアルタイムに分析、更新
- 複雑な機能も、色々ある機能の組み合わせで作れる
これらを対応することで、バックエンドエンジニアの負担を減らすことができる。
充実したサービス群
- リアルタイムのデータリレーサービス
- 数人〜数十人のリアルタイムマルチプレイも簡単に実現
- アナリティクス
- 視覚的なユーザ動向の分析も可能
- UnityやUnreal Engineにも対応しており、Webブラウザからも使える
Webインターフェース上で開発できる
Web上に管理画面的なインターフェースが用意されており、下記のようなことが可能になる。
- プロジェクト横断的に開発、分析可能
- 同じGameSparksのアカウント内の情報は見れるようにできる
- データ作成
- 例えば、ガチャのアイテムのリストを作るだけで、ガチャのデータを作れたりする
- 機能テスト、デバッグ
- カスタムインターフェース
- サーバーサイドのプログラムを直接書くこともできる
サポート体制
- 24時間/365日対応
- 障害情報もWeb上で共有
始め方
- アカウントを登録すれば、簡単に始められる
- 無料期間もある
操作
- 開発ユーザの権限管理で、外部の開発会社の人も同じ環境に混ぜて一緒に開発することもできる
- Cloud Code
Test Harnessというテスト環境
- すべてのWebのインターフェースからテストできる
- Postman的な機能もある
GameSparksのまとめ
- 開発工数の短縮
- 運用工程も簡単になる
- 調査用のページを用意しておくことで、エンジニアじゃなくても障害時の調査がある程度できるようになるから
Amazon GameLift
概要
- 複数人プレイのゲームセッションをAWSのグローバルなサーバインスタンス群で稼働させ、スケーリングも柔軟に扱えるソリューション
- FPSとか
- 非同期オンラインプレイとか
- 内部的にはEC2が稼働している
マルチプレイのゲーム開発でよく聞く内容
- 機能の要件
- チート対策
- eスポーツ
- 課金とかの安全性
- コンソールやPCへの展開
- 世界展開を見据えておきたい
P2Pネットワークアーキテクチャ
- 最初に立ち上げた人がhostになり、他の人がclientになりつなげる
- hostになったプレイヤーとclientになったプレイヤーで公平性が保てない
- hostがやめるとすべてのclientがゲームをプレイできなくなる
- clientが抜ける分にはゲームを続けられる
- hostになったプレイヤーは自分がサーバのため、レイテンシ0でプレーできる
サーバ・クライアント型アーキテクチャ
- すべてのclientに平等
- これをやりやすくするのがGameLift
- 世界展開とオートスケーリングで柔軟に対応
GameLiftの機能
- サーバインフラ管理
- オートスケーリング
- 複数AZ
- 自動リージョンフェイルオーバー
- DDosプロテクション
- セッション管理
- プレイヤー、ゲームセッション
- ワールド管理
GameLiftのオートスケーリング
- プレイヤーの参加状況に応じて増減させる
- スポットインスタンスに対応したため、よりコストを削減できる
FleetIQとSpot Instance
- インスタンスをLatency、Termination Rate、Costというカテゴリに分類する
- カテゴリ分けした中から、ターミネイトされる確率が低いインスタンスをなるべく選ぶようにしてくれる
- 通常のサーバ構成でEC2のインスタンスが障害で落ちる確率より低いターミネイト率にできる
メッシュ型ネットワークモデルからの移行例
- For Honor(Ubisoft)
- 一部のクライアントのレイテンシの悪影響が全クライアントに影響してしまうことが起きた
- リリース後にGameLiftに移行し、問題なくなった
- Friday the 13th: The Game(illFonic)
- P2P型
- ホストプレイヤーキャンパーになっていまうと、ジェイソンにやられると止めてしまう確率が高いので、他の参加者がプレイできなくなる事象が多発
- レイテンシの問題も発生していた
- ホストのユーザだけ早い
- これらの問題解決のため、GameLiftへ移行した
- その他移行例
- Quake Champions
- P2P型からGameLiftへ移行
- Quake Champions
GameLift導入に共通するモチベーション
- ユーザエクスペリエンス向上効果 > サーバコスト
- P2Pでサーバコスト0として出していたゲームも、UX向上のためにサーバコストをかけてGameLiftを導入している
GameLiftまとめ
- 対戦、協力プレイ用のサーバを低コストで導入・運用可能
- かなり冒険的なサービスや価格の提供も可能
- コストもかなり安い
- 利用料はインスタンスが運用された時間の分のみ
感想
どちらも本当に使えればかなり良さそう。
特にGameSparksは、「これだけできたらサーバーエンジニアいらなくなるのでは?」と自分の仕事がなくなる危機を感じる程だった。
バックエンドエンジニアは、プログラムの実装、設計とか「作る」スキルだけじゃなくて、こういうものを「使う」スキルも身に着けて行くべきなのかもしれない。