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

REALITYにおけるビデオ通話のための専用MCUサーバ運用法

 REALITYにおけるビデオ通話のための専用MCUサーバ運用法

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

gree_tech
PRO

October 25, 2022
Tweet

More Decks by gree_tech

Other Decks in Technology

Transcript

  1. REALITYにおけるビデオ通話のための

    専用MCUサーバ運用法
    REALITY株式会社 サーバエンジニア 久山 貴大

    View Slide

  2. 自己紹介

    久山 貴大

    REALITY株式会社 

    サーバサイド エンジニア


    主な開発領域

    バックエンドの開発

    ビデオ通話機能のバックエンドのインフラ構築

    2


    View Slide

  3. アジェンダ
    サービス紹介

    ビデオ通話機能

    REALITYのリアルタイムコミュニケーション基盤

    専用サーバの課題

    Agonesとは

    全体構成

    まとめ

    3


    View Slide

  4. サービス紹介

    ビデオ通話機能

    REALITYのリアルタイムコミュニケーション基盤

    専用サーバの課題

    Agonesとは

    全体構成

    まとめ

    4


    View Slide

  5. スマホひとつでアバター作成、ライブ配信による交流やゲームまで楽しめる

    スマホ向けメタバースアプリ

    アバター
 ライブ配信

    コミュニケーション
 ゲーム

    ワールド

    REALITYとは
    5


    View Slide

  6. 6


    View Slide

  7. サービス紹介

    ビデオ通話機能

    REALITYのリアルタイムコミュニケーション基盤

    専用サーバの課題

    Agonesとは

    全体構成

    まとめ

    7


    View Slide

  8. アバター
 ライブ配信

    コミュニケーション
 ゲーム

    ワールド

    ビデオ通話機能

    8


    View Slide

  9. 9


    View Slide

  10. ビデオ通話(ビデオチャット)機能

    ● 機能概要

    ○ アバターでリアルタイムにビデオ通話

    ○ 通話枠ごとの最大同時参加人数は8人


    ● 内部設計

    ○ 配信機能で使われていた、既存の

    リアルタイムコミュニケーション基盤

    をベースにしている

    10


    View Slide

  11. サービス紹介

    ビデオ通話機能

    REALITYのリアルタイムコミュニケーション基盤

    専用サーバの課題

    Agonesとは

    全体構成

    まとめ

    11


    View Slide

  12. コラボ配信機能

    REALITYに元々配信機能の1つとして、

    コラボ配信という

    「複数の人で一緒に配信をする」機能がある

    12


    View Slide

  13. コラボ配信機能

    開発工数節約のため

    ビデオ通話機能はこのコラボ配信機能を元にして作成した

    13


    View Slide

  14. GKE

    コラボ配信機能でのサーバ構造

    14

    アプリ

    アプリケーションサーバ層

    リアルタイム通信サーバ層

    WebAPI 

    Server

    WebSocket 

    Server

    HTTP通信

    WebSocket通
    信

    コラボ配信では、アプリは

    ● WebAPI Server 

    ● WebSocket Server

    の2つのサーバに接続する


    View Slide

  15. コラボ配信機能でのサーバ構造

    15

    アプリケーションサーバ層

    WebAPI 

    Server

    WebSocket 

    Server

    HTTP通信

    WebSocket通
    信

    WebAPI ServerはHTTP通信を行い、

    通話開始処理やWebSocket Serverの

    エンドポイント払い出しを行う

    リアルタイム通信サーバ層

    アプリ

    GKE


    View Slide

  16. HTTP通信

    アプリケーションサーバ層

    WebAPI 

    Server

    コラボ配信機能でのサーバ構造

    16

    WebSocket 

    Server

    WebSocket通
    信

    アプリ

    WebSocket ServerはWebSocket通信を行い、

    アバターモーションや音声などの

    リアルタイム性が求められるデータの

    やりとりを行う

    リアルタイム通信サーバ層

    GKE


    View Slide

  17. コラボ配信機能でのサーバ構造

    17

    アプリケーションサーバ層

    WebAPI 

    Server

    WebSocket 

    Server

    HTTP通信

    WebSocket通
    信

    これらのサーバは全て

    Google Kubernetes Engine(GKE)上で

    動いている

    アプリ

    GKE

    リアルタイム通信サーバ層


    View Slide

  18. 18


    View Slide

  19. WebSocket通信

    モバイル端末で動くアプリのため、

    WebSocket通信では可能な限り低遅延・低通信量を目指す必要がある


    そのため、サーバや配信者側で動画データを生成するのではなく、

    アバターのモーションデータ、音声データを送受信して

    受信側で描画・再生を行う

    19

    配信側
 リアルタイム

    通信サーバ

    受信側

    モーションデータ

    音声

    モーション

    マイク入力


    生


    画

    アバター
 アバター


    View Slide

  20. モーションデータの受け渡し

    モーションデータは

    各クライアントから受け取ったデータを一本
    のストリーム上で

    それぞれ受け手側に流している
 リアルタイム

    通信サーバ

    クライアントB

    モーションデータB

    20

    クライアントA

    クライアントC

    モーションデータC

    クライアントD

    モーションデータD

    モーションデータB

    モーションデータC

    モーションデータD

    1つのストリームで

    全部受け渡し


    View Slide

  21. 音声データの受け渡し

    しかし、音声データも同じように

    それぞれのデータを送ると、

    最大7人分の音声データが送られるため

    回線に負荷がかかってしまう!
 リアルタイム

    通信サーバ

    クライアントB

    音声データB

    21

    クライアントA

    クライアントC

    音声データC

    クライアントD

    音声データD

    音声データB

    音声データC

    音声データD

    高負荷!


    View Slide

  22. 音声データの受け渡し

    音声データはサーバで合成して

    1つの音声データにしてから

    各クライアントに流す


    このようなサーバを

    MCU (Multipoint Control Unit)という

    リアルタイム

    通信サーバ

    クライアントB

    音声データB

    22

    クライアントA

    クライアントC

    音声データC

    クライアントD

    合成音声データ

    音声データD

    データ量最大1/7
    サーバで音声合成


    View Slide

  23. ビデオ通話機能のリアルタイム通信サーバの元である

    コラボ配信機能では、1つのコラボ枠の参加者が

    それぞれ接続するサーバは1つに限定されていなかった

    既存機能(コラボ配信)の構成における問題

    23

    コラボ枠

    参加者 A
    参加者 B
    参加者 C
    サーバ1

    サーバ2

    サーバ3


    View Slide

  24. 各サーバはそれぞれ受け取った音声・モーションデータを

    Redis経由で共有する必要があった

    既存機能(コラボ配信)の構成における問題

    コラボ枠

    参加者 A
    参加者 B
    参加者 C
    サーバ1

    サーバ2

    サーバ3

    24

    データA

    データA

    データB

    データC

    データB

    データB

    データA

    データC

    データC

    データA

    データB

    データC


    View Slide

  25. さらに全てのサーバで

    各参加者に対して個別に音声合成処理(重い)を行っていた

    既存機能(コラボ配信)の構成における問題

    コラボ枠

    参加者 A
    参加者 B
    参加者 C
    サーバ1

    サーバ2

    サーバ3

    25

    データB

    データC

    データA

    データC

    データA

    データB

    A+B合成音声作成

    合成音声

    合成音声

    合成音声

    A+C合成音声作成

    B+C合成音声作成


    View Slide

  26. このコラボ配信の音声合成処理では、参加者が接続した各サーバで

    接続したユーザ以外の音声データを

    それぞれ加算する処理が行われている

    音声合成処理

    26

    サーバ1

    音声加算処理

    計算量O(n)

    音声データB

    クライアントA

    音声データC

    クライアントA用の

    合成音声データ

    音声データD

    ・・・

    サーバ2

    音声加算処理

    計算量O(n)

    音声データA

    クライアントB

    音声データC

    クライアントB用の

    合成音声データ

    音声データD

    コラボの参加者それぞれに

    この処理が行われる


    View Slide

  27. 参加者がn人の場合、この音声加算処理1つ1つの計算量はO(n)


    各参加者に対してこの処理が行われる(つまりn回)ため、

    全体の計算量はO(n2)

    音声合成処理

    27

    サーバ1

    音声加算処理

    計算量O(n)

    音声データB

    クライアントA

    音声データC

    クライアントA用の

    合成音声データ

    音声データD

    ・・・

    サーバ2

    音声加算処理

    計算量O(n)

    音声データA

    クライアントB

    音声データC

    クライアントB用の

    合成音声データ

    音声データD

    コラボの参加者それぞれに

    この処理が行われる


    View Slide

  28. 参加者が別々のサーバに接続するため、以下の問題がある

    既存機能(コラボ配信)の構成における問題 まとめ

    コラボ枠

    参加者 A
    参加者 B
    参加者 C
    サーバ1

    サーバ2

    サーバ3

    28

    データB

    データC

    データA

    データC

    データA

    データB

    データA

    データB

    データC

    ● 音声・モーションデータをRedis経由で共有しなければならない

    ● 各参加者に対して、各サーバが個別に音声合成処理を行う

    A+B合成音声作成

    A+C合成音声作成

    B+C合成音声作成


    View Slide

  29. コラボ配信では、参加者が最大4人までなので問題が許容できた


    しかしビデオ通話では参加者が最大8人で

    今後最大参加者数がさらに増える可能性も考慮する必要がある



    なのでビデオ通話では

    先ほどの2つの問題を解決しなければならない

    ビデオ通話用の新たなサーバ構成

    29


    View Slide

  30. ビデオ通話用の新たなサーバ構成

    30

    実は解決方法は単純


    View Slide

  31. ビデオ通話用の新たなサーバ構成

    31

    1つの枠の参加者を

    全員同じサーバに接続させる


    つまりビデオ通話1枠ごとに専用サーバを立てること

    (ゲームにおいては、Delicated Game Serversとも呼ばれる)


    View Slide

  32. つまりこれを

    ビデオ通話用の新たなサーバ構成

    32

    通話枠

    参加者 A
    参加者 B
    参加者 C
    サーバ1

    サーバ2

    サーバ3


    View Slide

  33. こう!

    ビデオ通話用の新たなサーバ構成

    通話枠

    参加者 A
    参加者 B
    参加者 C
    専用サーバ
    33


    View Slide

  34. 参加者全員が1つのサーバにデータを送るので

    Redis経由でデータを共有する必要がなくなる

    「データをRedis経由で共有」問題の解決

    通話枠

    参加者 A
    参加者 B
    参加者 C
    34

    データA

    データB

    データC

    必要なデータは全て受け取っているので

    Redisとの共有不要!

    \さよなら…/

    専用サーバ

    View Slide

  35. 参加者全員が1つのサーバにデータを送るので

    Redis経由でデータを共有する必要がなくなる

    「データをRedis経由で共有」問題の解決

    通話枠

    参加者 A
    参加者 B
    参加者 C
    35

    データA

    データB

    データC

    必要なデータは全て受け取っているので

    Redisとの共有不要!

    専用サーバ

    View Slide

  36. そして、「参加者ごとに音声合成」問題も、

    参加者が全員1つのサーバに接続することで

    計算量を大幅DOWNさせられる!

    「参加者ごとに音声合成」問題の解決

    36


    View Slide

  37. 「参加者ごとに音声合成」問題の解決

    37

    サーバ1

    音声加算処理

    計算量O(n)

    音声データB

    クライアントA

    音声データC

    クライアントA用の

    合成音声データ

    音声データD

    ・・・

    サーバ2

    音声加算処理

    計算量O(n)

    音声データA

    クライアントB

    音声データC

    クライアントB用の

    合成音声データ

    音声データD

    コラボの参加者それぞれに

    この処理が行われる

    コラボ配信の構成だと、クライアントが接続するサーバが別れており

    計算量 O(n2) の処理を行う必要があったが…


    View Slide

  38. リアルタイム通信サーバ

    「参加者ごとに音声合成」問題の解決

    38

    音声データA

    クライアントA

    音声データB
 音声データN

    ・・・

    音声減算処理 
 音声減算処理 
 音声減算処理 

    全合成音声データ

    ・・・

    クライアントB
 クライアントN

    クライアントA

    合成音声データ

    クライアントB

    合成音声データ

    クライアントN

    合成音声データ

    1つのサーバに

    全参加者が接続しているので、


    音声合成の処理を効率化して

    計算量 O(n) に減らすことができる

    全音声加算処理


    View Slide

  39. リアルタイム通信サーバ

    新しい音声合成処理

    39

    全音声加算処理

    音声データA

    クライアントA

    音声データB
 音声データN

    ・・・

    全合成音声データ

    ・・・

    クライアントB
 クライアントN

    クライアントA

    合成音声データ

    クライアントB

    合成音声データ

    クライアントN

    合成音声データ

    新しい音声合成処理では、


    まず全参加者の音声を合成した

    全合成音声データを作成

    音声減算処理 
 音声減算処理 
 音声減算処理 


    View Slide

  40. 全音声加算処理 O(n)

    全合成音声データを作るには


    参加者それぞれの音声データを

    順番に空音声データに加算していく


    1つ1つの加算処理の計算量は O(1)


    なので、全音声加算処理の計算量は

    O(1×n) = O(n)

    全音声加算処理

    40

    空音声データ

    音声データA

    音声加算処理 O(1) 

    全合成音声データ

    音声データB



    ・



    ・

    音声加算処理 O(1) 


    View Slide

  41. リアルタイム通信サーバ

    「参加者ごとに音声合成」問題の解決

    41

    音声データA

    クライアントA

    音声データB
 音声データN

    ・・・

    音声減算処理 
 音声減算処理 
 音声減算処理 

    全合成音声データ

    ・・・

    クライアントB
 クライアントN

    クライアントA

    合成音声データ

    クライアントB

    合成音声データ

    クライアントN

    合成音声データ

    そして、全合成音声データから

    各参加者の音声を減算して、

    各クライアント用の合成音声を作成


    この減算処理1つ1つは計算量O(1)


    よって、

    減算処理全体の計算量は O(n)

    全音声加算処理 O(n)


    View Slide

  42. 音声減算処理 O(1)

    クライアントA用の

    合成音声データを作るには


    全合成音声データから

    クライアントAの音声を減算する

    音声減算処理

    42

    クライアントA

    全合成音声データ
 音声データA

    反転処理

    (-1を掛けるだけ)

    音声加算処理

    クライアントA用

    合成音声データ


    View Slide

  43. この処理は、音声データを反転させて

    全合成音声データに加算するだけ


    なので、1つの減算処理の

    計算量は O(1)

    音声減算処理

    43

    クライアントA

    全合成音声データ

    音声減算処理 O(1)

    音声データA

    反転処理

    (-1を掛けるだけ)

    音声加算処理

    クライアントA用

    合成音声データ


    View Slide

  44. リアルタイム通信サーバ

    音声減算処理全体の計算量

    44

    音声データA

    クライアントA

    音声データB
 音声データN

    ・・・

    全合成音声データ

    ・・・

    クライアントB
 クライアントN

    クライアントA

    合成音声データ

    クライアントB

    合成音声データ

    クライアントN

    合成音声データ

    音声減算処理は、

    各クライアントに対して

    1回ずつ走るので


    減算処理全体の計算量は


    O(1×n) = O(n)

    全音声加算処理 O(n)

    音声減算処理 

    O(1)

    音声減算処理 

    O(1)

    音声減算処理 

    O(1)


    View Slide

  45. リアルタイム通信サーバ

    「参加者ごとに音声合成」問題の解決

    45

    音声データA

    クライアントA

    音声データB
 音声データN

    ・・・

    音声減算処理 

    O(1)

    音声減算処理 

    O(1)

    音声減算処理 

    O(1)

    全合成音声データ

    ・・・

    クライアントB
 クライアントN

    クライアントA

    合成音声データ

    クライアントB

    合成音声データ

    クライアントN

    合成音声データ

    よって、参加者n人に対する

    音声合成の計算量は


    O(n+n) = O(n)

    全音声加算処理 O(n)


    View Slide

  46. 専用サーバの作り方

    46

    というわけで、専用サーバを立てれば

    より効率的にリアルタイム通信を処理できることがわかった


    View Slide

  47. サービス紹介

    ビデオ通話機能

    REALITYのリアルタイムコミュニケーション基盤

    専用サーバの課題

    Agonesとは

    全体構成

    まとめ

    47


    View Slide

  48. 専用サーバの作り方

    48

    でも、専用サーバって簡単には作れない


    View Slide

  49. 専用サーバの作り方

    49

    ・クライアントからの接続のルーティング

    ・スケールイン時の稼働中サーバの保護

    解決しなければいけない課題は以下の2つ


    View Slide

  50. クライアントからの接続のルーティング

    50

    専用サーバでは、Kubernetesクラスタ上に

    同じ機能を持った個別のサーバがいくつも立ち上がることになる

    専用サーバ
    専用サーバ
    専用サーバ

    Kubernetes クラスタ 


    View Slide

  51. Kubernetes クラスタ 

    クライアントからの接続のルーティング

    51

    ビデオ通話に参加しているクライアントからの接続で、

    正しい専用サーバーに適切にルーティングする必要がある

    通話枠1

    参加者 1-A
    参加者 1-B
    参加者 1-C
    専用サーバ
    通話枠2

    参加者 2-A
    参加者 2-B
    参加者 2-C
    専用サーバ
    その他の

    専用サーバ

    どれに接続すれば?

    IPアドレスは?

    ポートは?

    >へ<


    View Slide

  52. Kubernetes クラスタ 

    クライアントからの接続のルーティング

    52

    ビデオ通話に参加しているクライアントからの接続で、

    正しい専用サーバーに適切にルーティングする必要がある

    通話枠1

    参加者 1-A
    参加者 1-B
    参加者 1-C
    専用サーバ
    通話枠2

    参加者 2-A
    参加者 2-B
    参加者 2-C
    専用サーバ
    その他の

    専用サーバ

    適当に繋いじゃえ!
 !?

    !?

    !?


    View Slide

  53. Kubernetes クラスタ 

    クライアントからの接続のルーティング

    53

    ビデオ通話に参加しているクライアントからの接続で、

    正しい専用サーバーに適切にルーティングする必要がある

    通話枠1

    参加者 1-A
    参加者 1-B
    参加者 1-C
    専用サーバ
    通話枠2

    参加者 2-A
    参加者 2-B
    参加者 2-C
    専用サーバ

    その他の

    専用サーバ

    適当に繋いじゃえ!
 !?

    !?

    !?

    爆発四散!


    View Slide

  54. スケールイン時の稼働中サーバの保護

    54

    また、開催中のビデオ通話で使われている専用サーバが

    Kubernetesのスケールインで削除されないように保護する必要がある

    通話枠

    参加者 A
    参加者 B
    参加者 C
    専用サーバ
    それでね…

    へぇ…

    でもさぁ…


    View Slide

  55. スケールイン時の稼働中サーバの保護

    55

    また、開催中のビデオ通話で使われている専用サーバが

    Kubernetesのスケールインで削除されないように保護する必要がある

    通話枠

    参加者 A
    参加者 B
    参加者 C
    専用サーバ
    Kubernetes
    シャットダウン

    してくれ

    それでね…

    へぇ…

    でもさぁ…


    View Slide

  56. スケールイン時の稼働中サーバの保護

    56

    また、開催中のビデオ通話で使われている専用サーバが

    Kubernetesのスケールインで削除されないように保護する必要がある

    通話枠

    参加者 A
    参加者 B
    参加者 C
    専用サーバ
    Kubernetes
    シャットダウン

    してくれ

    シャットダウンします

    !?

    !?

    !?


    View Slide

  57. スケールイン時の稼働中サーバの保護

    57

    また、開催中のビデオ通話で使われている専用サーバが

    Kubernetesのスケールインで削除されないように保護する必要がある

    通話枠

    参加者 A
    参加者 B
    参加者 C
    Kubernetes
    シャットダウン

    してくれ

    !?

    !?

    !?


    View Slide

  58. スケールイン時の稼働中サーバの保護

    58

    また、開催中のビデオ通話で使われている専用サーバが

    Kubernetesのスケールインで削除されないように保護する必要がある

    通話枠

    参加者 A
    参加者 B
    参加者 C
    Kubernetes
    シャットダウン

    してくれ

    !?

    !?

    !?

    爆発四散!


    View Slide

  59. この2つの課題を解決する必要がある

    そうならないように

    59

    ・クライアントからの接続のルーティング

    ・スケールイン時の稼働中サーバの保護


    View Slide

  60. 60

    実は、これを解決する強力な助っ人が存在する


    View Slide

  61. 61

    そう、Agones ならね!


    View Slide

  62. サービス紹介

    ビデオ通話機能

    REALITYのリアルタイムコミュニケーション基盤

    専用サーバの課題

    Agonesとは

    全体構成

    まとめ

    62


    View Slide

  63. Agones とは

    Ubisoft と Google が共同開発している

    オープンソースのKubernetesライブラリ

    63


    View Slide

  64. Fleet
    Agones とは

    Agones System
    専用サーバ
    GameServer
    専用サーバ
    GameServer
    専用サーバ
    GameServer
    ・

    ・

    ・

    クライアントは各専用サーバに

    個別アクセス可能

    agonesは各Podを管理

    Kubernetes クラスタ
    64

    Kubernetesクラスタに導入することで専用サーバの

    スケーリングとルーティングが提供される


    View Slide

  65. ビデオ通話でのAgonesの動き

    65

    Agonesはビデオ通話がはじまった時に、

    専用サーバの一つを、その通話専用のサーバとして割り当てる

    通話枠1

    参加者 1-A
    専用サーバ
    専用サーバ
    その他の

    専用サーバ

    通話を始めます!

    ※実際はクライアントとAgonesは直接通信せず、

     APIサーバを通してやりとりが行われます

    View Slide

  66. ビデオ通話でのAgonesの動き

    66

    Agonesはビデオ通話がはじまった時に、

    専用サーバの一つを、その通話専用のサーバとして割り当てる

    通話枠1

    参加者 1-A
    通話枠1用の

    専用サーバ
    専用サーバ
    その他の

    専用サーバ

    通話を始めます!

    君は通話枠1専用ね
 了解

    ※実際はクライアントとAgonesは直接通信せず、

     APIサーバを通してやりとりが行われます

    View Slide

  67. ビデオ通話でのAgonesの動き

    67

    そして、ビデオ通話の参加者に

    その通話専用のサーバのIPアドレスとポートを教えてくれる

    通話枠1

    参加者 1-A
    通話枠1用の

    専用サーバ
    専用サーバ
    その他の

    専用サーバ

    君がつなぐサーバの

    IPとポートはね…

    参加者 1-B
    参加者 1-C
    ※実際はクライアントとAgonesは直接通信せず、

     APIサーバを通してやりとりが行われます

    View Slide

  68. Agonesによるルーティング

    68

    これにより、同じ通話の参加者は

    割り当てられた同じ専用サーバに正しく接続できる

    通話枠1

    参加者 1-A
    参加者 1-B
    参加者 1-C
    通話枠1用の

    専用サーバ
    通話枠2

    参加者 2-A
    参加者 2-B
    参加者 2-C
    通話枠2用の

    専用サーバ
    その他の

    専用サーバ


    View Slide

  69. Agonesによるスケールインからの保護

    69

    さらにAgonesは一度通話に割り当てたサーバを、

    通話終了までスケールインによる削除から保護してくれる

    通話枠1

    参加者 A
    参加者 B
    参加者 C
    通話枠1用の

    専用サーバ
    シャットダウン

    してくれ

    Kubernetes
    それでね…

    へぇ…

    でもさぁ…


    View Slide

  70. Agonesによるスケールインからの保護

    70

    さらにAgonesは一度通話に割り当てたサーバを、

    通話終了までスケールインによる削除から保護してくれる

    通話枠1

    参加者 A
    参加者 B
    参加者 C
    !!

    Kubernetes
    それでね…

    へぇ…

    でもさぁ…

    そのサーバは使用中なので

    消しちゃダメ!

    通話枠1用の

    専用サーバ

    View Slide

  71. Agonesによるスケールインからの保護

    71

    さらにAgonesは一度通話に割り当てたサーバを、

    通話終了までスケールインによる削除から保護してくれる

    通話枠1

    参加者 A
    参加者 B
    参加者 C
    別の使ってない

    サーバを消すか…

    Kubernetes
    それでね…

    へぇ…

    でもさぁ…

    安心してビデオ通話を

    続けてね!

    通話枠1用の

    専用サーバ

    View Slide

  72. Agonesのまとめ

    72

    ・クライアントからの接続のルーティング

    ・スケールイン時の稼働中サーバの保護

    Agonesは専用サーバを作る時に発生する

    という2つの課題を簡単に解決!


    View Slide

  73. サービス紹介

    ビデオ通話機能

    REALITYのリアルタイムコミュニケーション基盤

    専用サーバの課題

    Agonesとは

    全体構成

    まとめ

    73


    View Slide

  74. GKE (Kubernetes)
    アプリケーションサーバ層
    Node
    Node
    Service
    Service
    Realtime Backend Server
    Pod (GameServer)
    WebSocket Frontend Server
    Pod
    Agones
    WebAPI Server
    Pod
    Fleet
    FleetAutoScaler
    Deployment
    HPA
    HTTPS
    Load Balancer Management
    リアルタイムサーバ層
    74

    アプリケーションサーバ層
    全体構成

    ここまでを踏まえた、ビデオ通話のサーバ構成は以下の通り


    View Slide

  75. GKE (Kubernetes)
    アプリケーションサーバ層
    Node
    Node
    Service
    Service
    Realtime Backend Server
    Pod (GameServer)
    WebSocket Frontend Server
    Pod
    Agones
    WebAPI Server
    Pod
    Fleet
    FleetAutoScaler
    Deployment
    HPA
    HTTPS
    Load Balancer Management
    リアルタイムサーバ層
    75

    アプリケーションサーバ層
    全体構成

    この3つのサーバについて詳しく説明


    View Slide

  76. GKE (Kubernetes)
    アプリケーションサーバ層
    Node
    Node
    Service
    Service
    Realtime Backend Server
    Pod (GameServer)
    WebSocket Frontend Server
    Pod
    Agones
    WebAPI Server
    Pod
    Fleet
    FleetAutoScaler
    Deployment
    HPA
    HTTPS
    Load Balancer Management
    リアルタイムサーバ層
    76

    アプリケーションサーバ層
    WebAPI Server


    View Slide

  77. WebAPI Server

    GKE (Kubernetes)
    Node
    Node
    Service
    Realtime backend Server
    Pod (GameServer)
    WebAPI Server
    Pod
    Agones
    HTTPS
    Load Balancer
    ビデオ通話の参加者は、ビデオ通話開始・参加時に

    このサーバ経由で Agones に専用サーバを割り当ててもらう

    77


    View Slide

  78. GKE (Kubernetes)
    アプリケーションサーバ層
    Node
    Node
    Service
    Service
    Realtime Backend Server
    Pod (GameServer)
    WebSocket Frontend Server
    Pod
    Agones
    WebAPI Server
    Pod
    Fleet
    FleetAutoScaler
    Deployment
    HPA
    HTTPS
    Load Balancer Management
    リアルタイムサーバ層
    78

    アプリケーションサーバ層
    Realtime Backend Server


    View Slide

  79. ここまで説明したビデオ通話用の専用MCUサーバ

    Agonesによって管理されている

    Realtime Backend Server

    GKE (Kubernetes)
    Node
    Node
    Service
    Realtime backend Server
    Pod (GameServer)
    WebSocket Frontend Server
    Pod
    Agones
    HTTPS
    Load Balancer
    79


    View Slide

  80. Node
    Fleet
    Node
    Fleet
    Agones によるスケーリング

    Realtime Backend Serverは Agonesによってスケーリングされる

    未使用のサーバが少なくなると、自動的にスケールアウトする

    Fleet Autoscaler Fleet Autoscaler
    Realtime Backend Server
    GameServer (使用中)
    Realtime Backend Server
    GameServer (使用中)
    Realtime Backend Server
    GameServer (使用中)
    Realtime Backend Server
    GameServer (未使用)
    Realtime Backend Server
    GameServer (使用中)
    Realtime Backend Server
    GameServer (使用中)
    Realtime Backend Server
    GameServer (使用中)
    Realtime Backend Server
    GameServer (未使用)
    Realtime Backend Server
    GameServer (未使用)
    Realtime Backend Server
    GameServer (未使用)
    Realtime Backend Server
    GameServer (未使用)
    Realtime Backend Server
    GameServer (未使用)
    ①未使用の専用サーバの台数が

     少ないのを検知

    ②新たに専用サーバを立ち上げて補充

    80


    View Slide

  81. GKE (Kubernetes)
    アプリケーションサーバ層
    Node
    Node
    Service
    Service
    Realtime Backend Server
    Pod (GameServer)
    WebSocket Frontend Server
    Pod
    Agones
    WebAPI Server
    Pod
    Fleet
    FleetAutoScaler
    Deployment
    HPA
    HTTPS
    Load Balancer Management
    リアルタイムサーバ層
    81

    アプリケーションサーバ層
    WebSocket Frontend Server


    View Slide

  82. GKE (Kubernetes)
    Node
    WebSocket Frontend Server

    Node
    Service
    Realtime Backend Server
    Pod (GameServer)
    WebSocket Frontend Server
    Pod
    Agones
    WebAPI Server
    Pod
    HTTPS
    Load Balancer
    通話参加者と Realtime Backend Server の通信を中継する

    このサーバを中継することで、クライアント - サーバ間の

    通信のセキュリティを担保しやすくなる

    82


    View Slide

  83. WebSocket Frontend Server を経由するメリット

    83

    通話枠1

    参加者 1-A 通話枠1用の

    専用サーバ
    その他の

    専用サーバ

    君がつなぐサーバの

    IPとポートはね…

    参加者 1-B
    参加者 1-C
    ※実際はクライアントとAgonesは直接通信せず、

     APIサーバを通してやりとりが行われます

    Agonesはビデオ通話の参加者に

    その通話専用サーバのIPアドレスとポートを教えてくれるが…


    View Slide

  84. WebSocket Frontend Server を経由するメリット

    84

    通話枠1

    参加者 1-A
    その他の

    専用サーバ

    参加者 1-B
    参加者 1-C
    XXX.XXX.XXX.XXX:7000

    これをそのまま使って通信を行うと

    専用サーバ側でIPv6シングルスタック環境に対応した

    SSL終端処理を実装する必要があり大変

    通話枠1用の

    専用サーバ
    IPv6にしか

    対応してないよ!

    IPv6用の

    処理が必要・・・


    View Slide

  85. WebSocket Frontend Server を経由するメリット

    85

    しかし、通信を一度中継サーバを経由させて、

    中継サーバにドメインを付与することによって

    通話枠1

    参加者 1-A
    その他の

    専用サーバ

    参加者 1-B
    参加者 1-C
    XXX.XXX.XXX.XXX:7000

    通話枠1用の

    専用サーバ
    中継サーバ
    tantan-websocket-outer.reality.app 

    Agonesは専用サーバのIPとポートを 

    参加者ではなく中継サーバ に渡す


    View Slide

  86. WebSocket Frontend Server を経由するメリット

    86

    通話枠1

    参加者 1-A
    その他の

    専用サーバ

    参加者 1-B
    参加者 1-C
    XXX.XXX.XXX.XXX:7000

    クライアント - サーバ間の通信で

    HTTPS Load Balancer を通せるようになり、簡単にWSS接続可能に 

    通話枠1用の

    専用サーバ
    中継サーバ
    tantan-websocket-outer.reality.app 

    Agonesは専用サーバのIPとポートを 

    参加者ではなく中継サーバ に渡す

    HTTPS
    Load Balancer

    View Slide

  87. GKE (Kubernetes)
    アプリケーションサーバ層
    Node
    Node
    Service
    Service
    Realtime Backend Server
    Pod (GameServer)
    WebSocket Frontend Server
    Pod
    Agones
    WebAPI Server
    Pod
    Fleet
    FleetAutoScaler
    Deployment
    HPA
    HTTPS
    Load Balancer Management
    リアルタイムサーバ層
    87

    アプリケーションサーバ層
    全体構成


    View Slide

  88. サービス紹介

    ビデオ通話機能

    REALITYのリアルタイムコミュニケーション基盤

    専用サーバの課題

    Agonesとは

    全体構成

    まとめ

    88


    View Slide

  89. まとめ

    ・既存の機能を流用して、ビデオ通話機能を作成した


    ・そのままだと、処理が重くなるため、専用サーバにすることに


    ・専用サーバを作るためにAgonesを導入


    ・専用サーバとクライアントの間に中継サーバをおくことで

     セキュリティを担保

    89


    View Slide

  90. View Slide