Upgrade to Pro — share decks privately, control downloads, hide ads and more …

REALITYのライブゲームで新しく採用したDGSの話(リアルタイムサーバーの話)

 REALITYのライブゲームで新しく採用したDGSの話(リアルタイムサーバーの話)

GREE Tech Conference 2022で発表された資料です。
https://techcon.gree.jp/2022/session/TrackC-1

gree_tech

October 25, 2022
Tweet

More Decks by gree_tech

Other Decks in Technology

Transcript

  1. •REALITYとは •REALITYのゲーム •#REALITY釣り部 • DGSの紹介 • 技術概要 • 選定基準・理由 •

    クライアントとの連携 • REALITYならではの技術的工夫 アジェンダ 2

  2. 作り方によって2種類に分類可能 REALITYのゲーム 4
 • Unityゲーム
 ◦ REALITYアプリのバイナリに内蔵されている
 ◦ REALITYアバターをそのまま使える
 •

    Webゲーム
 ◦ アプリの更新とは別に配信可能
 ◦ 3Dのアバターを使うことはできない
 → どちらのゲームも複数人で遊べ、視聴者もゲームの画面を見ることがで きる

  3. 通常のゲーム開発ではあまり見られない課題がいくつもある 「#REALITY釣り部」技術的な課題 • REALITYの特徴から発生する課題
 ◦ 配信中にアバターを変更できるため、ゲームのプレイ中に変更される 場合を考慮しなければならない
 ◦ 配信中にコラボの出入りが発生することによるプレイヤーの変化に対 応する必要がある


    ◦ 配信中や視聴中にバックグラウンドにしたり、アプリ終了から復帰した りするユーザーがいることを考慮しなければならない
 ◦ スマホ向けメタバースなので、通信状況の悪いモバイル回線での安定 性を意識する必要がある

  4. 既存REALITYゲームの通信の仕組み 「#REALITY釣り部」技術的な課題 コラボ プラットフォーム マルチゲームサーバー ホスト 視聴者 ▼データを中継するためのサーバー マルチゲームサーバーは、ホストから受け取ったデータ をコラボ参加者や視聴者に転送したり、あるいは逆にコ

    ラボ参加者のデータをホストに転送したりしてくれる ▼ホストが送ったデータはサーバーにバック アップされる ホストが切断したりアプリ終了したりしてもデータを失わ ないように、ホストが送った最終のデータをサーバーが 保存し、再接続時に受信する仕組みが存在する
  5. 釣りに適用すると 「#REALITY釣り部」技術的な課題 コラボ プラットフォーム マルチゲームサーバー ホスト 視聴者 APIサーバー ▼APIサーバーの必要性 課金やランキングがある以上、チート防止のためにサー

    バーで釣りを管理する必要がある。 ▼APIサーバーの問題点 • リクエスト時のオーバーヘッドがあるので、遅延が大 きい • 情報を都度DBに保存するので、遅延が増加する 上、サーバー側負荷も高くなりがち • 情報を他人に共有するだけでも、 API→ホスト→マ ルチゲームサーバー →コラボのように複雑な経路に なり、さらに遅延が増加する とにかく遅延が大きすぎる データベース 都度参照する
  6. 「#REALITY釣り部」技術的な課題 一方で、視聴者はというと
 ◦ プレイする訳ではないので、リアルタイム性の高さはそこまで大事では ない(音声にも一定の遅延があるので遅れは許容)
 ◦ むしろ安定性の方が求められる
 ◦ 配信枠によって人数が読めず、サーバーに接続させる場合はオートス ケール可能な環境が好ましい


    →既存のマルチゲームサーバーを使った方が理想的である
 ・マルチゲームサーバーはPub/Sub方式を採用したオートスケール可能な環境
 ・一定時間ごとの情報を送信フレームにしてホストが共有し、あえて遅延させる ことで、安定でなめらかな視聴環境を用意できる

  7. 「#REALITY釣り部」技術的な課題 以上のことから、次の構成に決定
 
 DGS コラボ PF Multigame Server ホスト 視聴者

    TCP Socket ▼リアルタイム通信専用のサーバーを用意 ゲーム中のリアルタイム通信を専用サーバーにすること で、高レスポンス、高効率の通信に。 ロジックが実行できるので、釣りの状態も管理可能。 APIサーバーと比べDBアクセスの頻度が低く(ゲーム終 了時などにまとめてDBアクセスする)、遅延の要因も削 減される。 WSS ▼視聴は従来のまま 配信ホストがゲームのデータを一定時間分 まとめて送信フレームにして視聴者に共有。 視聴者はバッファーに一定の受信フレーム が溜まったところで再生することで安定した 視聴が行える。大人数接続の耐性もある。
  8. 「#REALITY釣り部」技術的な課題 まだ問題は残っている
 
 コラボ DGS ホスト コラボ 配信A コラボ DGS

    ホスト コラボ 配信B ▼DGSのインスタンス生成、消去 配信で釣りを遊ぶごとに、専用のDGSインス タンスを生成する必要があり、終了する場合 にはリソースを解放して再利用可能な状態 にする必要がある。また、すぐにプレイできる ように、事前に必要な処理を済ませた待機 中のインスタンスをいくつか用意しておきた い。 ▼使用中DGSの保護 雑にオートスケールの設定を入れたり、手動 でスケールインしたりすると、使用中のイン スタンスを誤って終了する可能性がある。 ▼接続先DGSの割りあて 同じ配信で遊んでいる人は同じサーバーに 接続しなければならない。正しく同じサー バーに振り分ける必要がある。
  9. 「#REALITY釣り部」で使っているAgones Fleet Agones System (FleetAutoScaler) DGS Allocated DGS Allocated ・


    ・
 ・
 DGS Ready DGS Shutdown ▼Fleet Fleetは、ここでいうDGSのセットのようなもの。 
 
 主要な状態として、Ready・Allocated・Shutdownがある。 
 
 FleetAutoScalerにより、オートスケールが行われる。 
 

  10. 「#REALITY釣り部」で使っているAgones Fleet DGS Allocated ・
 ・
 ・
 DGS Ready DGS

    Ready Fleet DGS Allocated ・
 ・
 ・
 DGS Allocated DGS Ready Fleet DGS Allocated ・
 ・
 ・
 DGS Allocated DGS Ready DGS Ready 割り当て要求時に、Readyのサーバーを Allocatedにしてクライアントと接続させる Readyの数が常に一定( Buffer Size)になるよう に、割り当て後には新規でインスタンスが立ち上が る Buffer Size Buffer Size
  11. 「#REALITY釣り部」で使っているAgones Fleet DGS Shutdown 
 ・
 ・
 DGS Ready DGS

    Ready Buffer Size Fleet ・
 ・
 ・
 DGS Ready DGS Ready Buffer Size 使用完了したShutdownのサーバーは削除されるが、Allocatedはオートス ケールから保護される。 DGS Allocated DGS Allocated
  12. 「#REALITY釣り部」で使っているAgones Agones System ① ② Dedicated Game Server Pod (GameServer)

    API Server ③ ④ ⑤ ⑥ ▼ゲームを開始するまでの処理 ①クライアントからAPIサーバーにDGSの割 り当てを要求 ②APIサーバーからAgones SystemにDGS の割り当てを要求 ③Agones SystemがDGSの割り当て (Allocate)を行う ④⑤Agones SystemからAPIサーバーを経 由して接続先のホスト名とポート番号をクラ イアントに通知 ⑥クライアントがDGSに接続
  13. DGSとクライアントとの連携(個別の釣り) 1. DGSからイベントを送る a. ゲームの開始 b. イベントの開始通知 c. イベントの終了通知(厳密には終了イベントの開始通知) d.

    魚影の移動情報、形の情報 2. クライアントからDGSにイベントを送る a. 魚が餌に食いついた b. 魚とのバトルの開始リクエスト