Slide 1

Slide 1 text

REALITYにおけるビデオ通話のための
 専用MCUサーバ運用法 REALITY株式会社 サーバエンジニア 久山 貴大

Slide 2

Slide 2 text

自己紹介
 久山 貴大
 REALITY株式会社 
 サーバサイド エンジニア
 
 主な開発領域
 バックエンドの開発
 ビデオ通話機能のバックエンドのインフラ構築 
 2


Slide 3

Slide 3 text

アジェンダ サービス紹介
 ビデオ通話機能
 REALITYのリアルタイムコミュニケーション基盤
 専用サーバの課題
 Agonesとは
 全体構成
 まとめ
 3


Slide 4

Slide 4 text

サービス紹介
 ビデオ通話機能
 REALITYのリアルタイムコミュニケーション基盤
 専用サーバの課題
 Agonesとは
 全体構成
 まとめ
 4


Slide 5

Slide 5 text

スマホひとつでアバター作成、ライブ配信による交流やゲームまで楽しめる
 スマホ向けメタバースアプリ
 アバター
 ライブ配信
 コミュニケーション
 ゲーム
 ワールド
 REALITYとは 5


Slide 6

Slide 6 text

6


Slide 7

Slide 7 text

サービス紹介
 ビデオ通話機能
 REALITYのリアルタイムコミュニケーション基盤
 専用サーバの課題
 Agonesとは
 全体構成
 まとめ
 7


Slide 8

Slide 8 text

アバター
 ライブ配信
 コミュニケーション
 ゲーム
 ワールド
 ビデオ通話機能
 8


Slide 9

Slide 9 text

9


Slide 10

Slide 10 text

ビデオ通話(ビデオチャット)機能
 ● 機能概要
 ○ アバターでリアルタイムにビデオ通話
 ○ 通話枠ごとの最大同時参加人数は8人
 
 ● 内部設計
 ○ 配信機能で使われていた、既存の
 リアルタイムコミュニケーション基盤
 をベースにしている
 10


Slide 11

Slide 11 text

サービス紹介
 ビデオ通話機能
 REALITYのリアルタイムコミュニケーション基盤
 専用サーバの課題
 Agonesとは
 全体構成
 まとめ
 11


Slide 12

Slide 12 text

コラボ配信機能
 REALITYに元々配信機能の1つとして、
 コラボ配信という
 「複数の人で一緒に配信をする」機能がある
 12


Slide 13

Slide 13 text

コラボ配信機能
 開発工数節約のため
 ビデオ通話機能はこのコラボ配信機能を元にして作成した
 13


Slide 14

Slide 14 text

GKE
 コラボ配信機能でのサーバ構造
 14
 アプリ
 アプリケーションサーバ層
 リアルタイム通信サーバ層
 WebAPI 
 Server
 WebSocket 
 Server
 HTTP通信
 WebSocket通 信
 コラボ配信では、アプリは
 ● WebAPI Server 
 ● WebSocket Server
 の2つのサーバに接続する


Slide 15

Slide 15 text

コラボ配信機能でのサーバ構造
 15
 アプリケーションサーバ層
 WebAPI 
 Server
 WebSocket 
 Server
 HTTP通信
 WebSocket通 信
 WebAPI ServerはHTTP通信を行い、
 通話開始処理やWebSocket Serverの
 エンドポイント払い出しを行う
 リアルタイム通信サーバ層
 アプリ
 GKE


Slide 16

Slide 16 text

HTTP通信
 アプリケーションサーバ層
 WebAPI 
 Server
 コラボ配信機能でのサーバ構造
 16
 WebSocket 
 Server
 WebSocket通 信
 アプリ
 WebSocket ServerはWebSocket通信を行い、
 アバターモーションや音声などの
 リアルタイム性が求められるデータの
 やりとりを行う
 リアルタイム通信サーバ層
 GKE


Slide 17

Slide 17 text

コラボ配信機能でのサーバ構造
 17
 アプリケーションサーバ層
 WebAPI 
 Server
 WebSocket 
 Server
 HTTP通信
 WebSocket通 信
 これらのサーバは全て
 Google Kubernetes Engine(GKE)上で
 動いている
 アプリ
 GKE
 リアルタイム通信サーバ層


Slide 18

Slide 18 text

18


Slide 19

Slide 19 text

WebSocket通信
 モバイル端末で動くアプリのため、
 WebSocket通信では可能な限り低遅延・低通信量を目指す必要がある
 
 そのため、サーバや配信者側で動画データを生成するのではなく、
 アバターのモーションデータ、音声データを送受信して
 受信側で描画・再生を行う
 19
 配信側
 リアルタイム
 通信サーバ
 受信側
 モーションデータ
 音声
 モーション
 マイク入力
 再 生
 描 画
 アバター
 アバター


Slide 20

Slide 20 text

モーションデータの受け渡し
 モーションデータは
 各クライアントから受け取ったデータを一本 のストリーム上で
 それぞれ受け手側に流している
 リアルタイム
 通信サーバ
 クライアントB
 モーションデータB
 20
 クライアントA
 クライアントC
 モーションデータC
 クライアントD
 モーションデータD
 モーションデータB
 モーションデータC
 モーションデータD
 1つのストリームで
 全部受け渡し


Slide 21

Slide 21 text

音声データの受け渡し
 しかし、音声データも同じように
 それぞれのデータを送ると、
 最大7人分の音声データが送られるため
 回線に負荷がかかってしまう!
 リアルタイム
 通信サーバ
 クライアントB
 音声データB
 21
 クライアントA
 クライアントC
 音声データC
 クライアントD
 音声データD
 音声データB
 音声データC
 音声データD
 高負荷!


Slide 22

Slide 22 text

音声データの受け渡し
 音声データはサーバで合成して
 1つの音声データにしてから
 各クライアントに流す
 
 このようなサーバを
 MCU (Multipoint Control Unit)という
 リアルタイム
 通信サーバ
 クライアントB
 音声データB
 22
 クライアントA
 クライアントC
 音声データC
 クライアントD
 合成音声データ
 音声データD
 データ量最大1/7 サーバで音声合成


Slide 23

Slide 23 text

ビデオ通話機能のリアルタイム通信サーバの元である
 コラボ配信機能では、1つのコラボ枠の参加者が
 それぞれ接続するサーバは1つに限定されていなかった
 既存機能(コラボ配信)の構成における問題
 23
 コラボ枠
 参加者 A 参加者 B 参加者 C サーバ1
 サーバ2
 サーバ3


Slide 24

Slide 24 text

各サーバはそれぞれ受け取った音声・モーションデータを
 Redis経由で共有する必要があった
 既存機能(コラボ配信)の構成における問題
 コラボ枠
 参加者 A 参加者 B 参加者 C サーバ1
 サーバ2
 サーバ3
 24
 データA
 データA
 データB
 データC
 データB
 データB
 データA
 データC
 データC
 データA
 データB
 データC


Slide 25

Slide 25 text

さらに全てのサーバで
 各参加者に対して個別に音声合成処理(重い)を行っていた
 既存機能(コラボ配信)の構成における問題
 コラボ枠
 参加者 A 参加者 B 参加者 C サーバ1
 サーバ2
 サーバ3
 25
 データB
 データC
 データA
 データC
 データA
 データB
 A+B合成音声作成
 合成音声
 合成音声
 合成音声
 A+C合成音声作成
 B+C合成音声作成


Slide 26

Slide 26 text

このコラボ配信の音声合成処理では、参加者が接続した各サーバで
 接続したユーザ以外の音声データを
 それぞれ加算する処理が行われている
 音声合成処理
 26
 サーバ1
 音声加算処理
 計算量O(n)
 音声データB
 クライアントA
 音声データC
 クライアントA用の
 合成音声データ
 音声データD
 ・・・
 サーバ2
 音声加算処理
 計算量O(n)
 音声データA
 クライアントB
 音声データC
 クライアントB用の
 合成音声データ
 音声データD
 コラボの参加者それぞれに
 この処理が行われる


Slide 27

Slide 27 text

参加者が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
 コラボの参加者それぞれに
 この処理が行われる


Slide 28

Slide 28 text

参加者が別々のサーバに接続するため、以下の問題がある
 既存機能(コラボ配信)の構成における問題 まとめ
 コラボ枠
 参加者 A 参加者 B 参加者 C サーバ1
 サーバ2
 サーバ3
 28
 データB
 データC
 データA
 データC
 データA
 データB
 データA
 データB
 データC
 ● 音声・モーションデータをRedis経由で共有しなければならない
 ● 各参加者に対して、各サーバが個別に音声合成処理を行う
 A+B合成音声作成
 A+C合成音声作成
 B+C合成音声作成


Slide 29

Slide 29 text

コラボ配信では、参加者が最大4人までなので問題が許容できた
 
 しかしビデオ通話では参加者が最大8人で
 今後最大参加者数がさらに増える可能性も考慮する必要がある
 
 
 なのでビデオ通話では
 先ほどの2つの問題を解決しなければならない
 ビデオ通話用の新たなサーバ構成
 29


Slide 30

Slide 30 text

ビデオ通話用の新たなサーバ構成
 30
 実は解決方法は単純


Slide 31

Slide 31 text

ビデオ通話用の新たなサーバ構成
 31
 1つの枠の参加者を
 全員同じサーバに接続させる
 
 つまりビデオ通話1枠ごとに専用サーバを立てること
 (ゲームにおいては、Delicated Game Serversとも呼ばれる)


Slide 32

Slide 32 text

つまりこれを
 ビデオ通話用の新たなサーバ構成
 32
 通話枠
 参加者 A 参加者 B 参加者 C サーバ1
 サーバ2
 サーバ3


Slide 33

Slide 33 text

こう!
 ビデオ通話用の新たなサーバ構成
 通話枠
 参加者 A 参加者 B 参加者 C 専用サーバ 33


Slide 34

Slide 34 text

参加者全員が1つのサーバにデータを送るので
 Redis経由でデータを共有する必要がなくなる
 「データをRedis経由で共有」問題の解決
 通話枠
 参加者 A 参加者 B 参加者 C 34
 データA
 データB
 データC
 必要なデータは全て受け取っているので
 Redisとの共有不要!
 \さよなら…/
 専用サーバ

Slide 35

Slide 35 text

参加者全員が1つのサーバにデータを送るので
 Redis経由でデータを共有する必要がなくなる
 「データをRedis経由で共有」問題の解決
 通話枠
 参加者 A 参加者 B 参加者 C 35
 データA
 データB
 データC
 必要なデータは全て受け取っているので
 Redisとの共有不要!
 専用サーバ

Slide 36

Slide 36 text

そして、「参加者ごとに音声合成」問題も、
 参加者が全員1つのサーバに接続することで
 計算量を大幅DOWNさせられる!
 「参加者ごとに音声合成」問題の解決
 36


Slide 37

Slide 37 text

「参加者ごとに音声合成」問題の解決
 37
 サーバ1
 音声加算処理
 計算量O(n)
 音声データB
 クライアントA
 音声データC
 クライアントA用の
 合成音声データ
 音声データD
 ・・・
 サーバ2
 音声加算処理
 計算量O(n)
 音声データA
 クライアントB
 音声データC
 クライアントB用の
 合成音声データ
 音声データD
 コラボの参加者それぞれに
 この処理が行われる
 コラボ配信の構成だと、クライアントが接続するサーバが別れており
 計算量 O(n2) の処理を行う必要があったが…


Slide 38

Slide 38 text

リアルタイム通信サーバ
 「参加者ごとに音声合成」問題の解決
 38
 音声データA
 クライアントA
 音声データB
 音声データN
 ・・・
 音声減算処理 
 音声減算処理 
 音声減算処理 
 全合成音声データ
 ・・・
 クライアントB
 クライアントN
 クライアントA
 合成音声データ
 クライアントB
 合成音声データ
 クライアントN
 合成音声データ
 1つのサーバに
 全参加者が接続しているので、
 
 音声合成の処理を効率化して
 計算量 O(n) に減らすことができる
 全音声加算処理


Slide 39

Slide 39 text

リアルタイム通信サーバ
 新しい音声合成処理
 39
 全音声加算処理
 音声データA
 クライアントA
 音声データB
 音声データN
 ・・・
 全合成音声データ
 ・・・
 クライアントB
 クライアントN
 クライアントA
 合成音声データ
 クライアントB
 合成音声データ
 クライアントN
 合成音声データ
 新しい音声合成処理では、
 
 まず全参加者の音声を合成した
 全合成音声データを作成
 音声減算処理 
 音声減算処理 
 音声減算処理 


Slide 40

Slide 40 text

全音声加算処理 O(n)
 全合成音声データを作るには
 
 参加者それぞれの音声データを
 順番に空音声データに加算していく
 
 1つ1つの加算処理の計算量は O(1)
 
 なので、全音声加算処理の計算量は
 O(1×n) = O(n)
 全音声加算処理
 40
 空音声データ
 音声データA
 音声加算処理 O(1) 
 全合成音声データ
 音声データB
 ・ ・ ・
 ・ ・ ・
 音声加算処理 O(1) 


Slide 41

Slide 41 text

リアルタイム通信サーバ
 「参加者ごとに音声合成」問題の解決
 41
 音声データA
 クライアントA
 音声データB
 音声データN
 ・・・
 音声減算処理 
 音声減算処理 
 音声減算処理 
 全合成音声データ
 ・・・
 クライアントB
 クライアントN
 クライアントA
 合成音声データ
 クライアントB
 合成音声データ
 クライアントN
 合成音声データ
 そして、全合成音声データから
 各参加者の音声を減算して、
 各クライアント用の合成音声を作成
 
 この減算処理1つ1つは計算量O(1)
 
 よって、
 減算処理全体の計算量は O(n)
 全音声加算処理 O(n)


Slide 42

Slide 42 text

音声減算処理 O(1)
 クライアントA用の
 合成音声データを作るには
 
 全合成音声データから
 クライアントAの音声を減算する
 音声減算処理
 42
 クライアントA
 全合成音声データ
 音声データA
 反転処理
 (-1を掛けるだけ)
 音声加算処理
 クライアントA用
 合成音声データ


Slide 43

Slide 43 text

この処理は、音声データを反転させて
 全合成音声データに加算するだけ
 
 なので、1つの減算処理の
 計算量は O(1)
 音声減算処理
 43
 クライアントA
 全合成音声データ
 音声減算処理 O(1)
 音声データA
 反転処理
 (-1を掛けるだけ)
 音声加算処理
 クライアントA用
 合成音声データ


Slide 44

Slide 44 text

リアルタイム通信サーバ
 音声減算処理全体の計算量
 44
 音声データA
 クライアントA
 音声データB
 音声データN
 ・・・
 全合成音声データ
 ・・・
 クライアントB
 クライアントN
 クライアントA
 合成音声データ
 クライアントB
 合成音声データ
 クライアントN
 合成音声データ
 音声減算処理は、
 各クライアントに対して
 1回ずつ走るので
 
 減算処理全体の計算量は
 
 O(1×n) = O(n)
 全音声加算処理 O(n)
 音声減算処理 
 O(1)
 音声減算処理 
 O(1)
 音声減算処理 
 O(1)


Slide 45

Slide 45 text

リアルタイム通信サーバ
 「参加者ごとに音声合成」問題の解決
 45
 音声データA
 クライアントA
 音声データB
 音声データN
 ・・・
 音声減算処理 
 O(1)
 音声減算処理 
 O(1)
 音声減算処理 
 O(1)
 全合成音声データ
 ・・・
 クライアントB
 クライアントN
 クライアントA
 合成音声データ
 クライアントB
 合成音声データ
 クライアントN
 合成音声データ
 よって、参加者n人に対する
 音声合成の計算量は
 
 O(n+n) = O(n)
 全音声加算処理 O(n)


Slide 46

Slide 46 text

専用サーバの作り方
 46
 というわけで、専用サーバを立てれば
 より効率的にリアルタイム通信を処理できることがわかった


Slide 47

Slide 47 text

サービス紹介
 ビデオ通話機能
 REALITYのリアルタイムコミュニケーション基盤
 専用サーバの課題
 Agonesとは
 全体構成
 まとめ
 47


Slide 48

Slide 48 text

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


Slide 49

Slide 49 text

専用サーバの作り方
 49
 ・クライアントからの接続のルーティング
 ・スケールイン時の稼働中サーバの保護
 解決しなければいけない課題は以下の2つ


Slide 50

Slide 50 text

クライアントからの接続のルーティング
 50
 専用サーバでは、Kubernetesクラスタ上に
 同じ機能を持った個別のサーバがいくつも立ち上がることになる
 専用サーバ 専用サーバ 専用サーバ
 Kubernetes クラスタ 


Slide 51

Slide 51 text

Kubernetes クラスタ 
 クライアントからの接続のルーティング
 51
 ビデオ通話に参加しているクライアントからの接続で、
 正しい専用サーバーに適切にルーティングする必要がある
 通話枠1
 参加者 1-A 参加者 1-B 参加者 1-C 専用サーバ 通話枠2
 参加者 2-A 参加者 2-B 参加者 2-C 専用サーバ その他の
 専用サーバ
 どれに接続すれば?
 IPアドレスは?
 ポートは?
 >へ<


Slide 52

Slide 52 text

Kubernetes クラスタ 
 クライアントからの接続のルーティング
 52
 ビデオ通話に参加しているクライアントからの接続で、
 正しい専用サーバーに適切にルーティングする必要がある
 通話枠1
 参加者 1-A 参加者 1-B 参加者 1-C 専用サーバ 通話枠2
 参加者 2-A 参加者 2-B 参加者 2-C 専用サーバ その他の
 専用サーバ
 適当に繋いじゃえ!
 !?
 !?
 !?


Slide 53

Slide 53 text

Kubernetes クラスタ 
 クライアントからの接続のルーティング
 53
 ビデオ通話に参加しているクライアントからの接続で、
 正しい専用サーバーに適切にルーティングする必要がある
 通話枠1
 参加者 1-A 参加者 1-B 参加者 1-C 専用サーバ 通話枠2
 参加者 2-A 参加者 2-B 参加者 2-C 専用サーバ
 その他の
 専用サーバ
 適当に繋いじゃえ!
 !?
 !?
 !?
 爆発四散!


Slide 54

Slide 54 text

スケールイン時の稼働中サーバの保護
 54
 また、開催中のビデオ通話で使われている専用サーバが
 Kubernetesのスケールインで削除されないように保護する必要がある
 通話枠
 参加者 A 参加者 B 参加者 C 専用サーバ それでね…
 へぇ…
 でもさぁ…


Slide 55

Slide 55 text

スケールイン時の稼働中サーバの保護
 55
 また、開催中のビデオ通話で使われている専用サーバが
 Kubernetesのスケールインで削除されないように保護する必要がある
 通話枠
 参加者 A 参加者 B 参加者 C 専用サーバ Kubernetes シャットダウン
 してくれ
 それでね…
 へぇ…
 でもさぁ…


Slide 56

Slide 56 text

スケールイン時の稼働中サーバの保護
 56
 また、開催中のビデオ通話で使われている専用サーバが
 Kubernetesのスケールインで削除されないように保護する必要がある
 通話枠
 参加者 A 参加者 B 参加者 C 専用サーバ Kubernetes シャットダウン
 してくれ
 シャットダウンします
 !?
 !?
 !?


Slide 57

Slide 57 text

スケールイン時の稼働中サーバの保護
 57
 また、開催中のビデオ通話で使われている専用サーバが
 Kubernetesのスケールインで削除されないように保護する必要がある
 通話枠
 参加者 A 参加者 B 参加者 C Kubernetes シャットダウン
 してくれ
 !?
 !?
 !?


Slide 58

Slide 58 text

スケールイン時の稼働中サーバの保護
 58
 また、開催中のビデオ通話で使われている専用サーバが
 Kubernetesのスケールインで削除されないように保護する必要がある
 通話枠
 参加者 A 参加者 B 参加者 C Kubernetes シャットダウン
 してくれ
 !?
 !?
 !?
 爆発四散!


Slide 59

Slide 59 text

この2つの課題を解決する必要がある
 そうならないように
 59
 ・クライアントからの接続のルーティング
 ・スケールイン時の稼働中サーバの保護


Slide 60

Slide 60 text

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


Slide 61

Slide 61 text

61
 そう、Agones ならね!


Slide 62

Slide 62 text

サービス紹介
 ビデオ通話機能
 REALITYのリアルタイムコミュニケーション基盤
 専用サーバの課題
 Agonesとは
 全体構成
 まとめ
 62


Slide 63

Slide 63 text

Agones とは
 Ubisoft と Google が共同開発している
 オープンソースのKubernetesライブラリ
 63


Slide 64

Slide 64 text

Fleet Agones とは
 Agones System 専用サーバ GameServer 専用サーバ GameServer 専用サーバ GameServer ・
 ・
 ・
 クライアントは各専用サーバに 
 個別アクセス可能
 agonesは各Podを管理 
 Kubernetes クラスタ 64
 Kubernetesクラスタに導入することで専用サーバの
 スケーリングとルーティングが提供される


Slide 65

Slide 65 text

ビデオ通話でのAgonesの動き
 65
 Agonesはビデオ通話がはじまった時に、
 専用サーバの一つを、その通話専用のサーバとして割り当てる
 通話枠1
 参加者 1-A 専用サーバ 専用サーバ その他の
 専用サーバ
 通話を始めます!
 ※実際はクライアントとAgonesは直接通信せず、 
  APIサーバを通してやりとりが行われます 


Slide 66

Slide 66 text

ビデオ通話でのAgonesの動き
 66
 Agonesはビデオ通話がはじまった時に、
 専用サーバの一つを、その通話専用のサーバとして割り当てる
 通話枠1
 参加者 1-A 通話枠1用の
 専用サーバ 専用サーバ その他の
 専用サーバ
 通話を始めます!
 君は通話枠1専用ね
 了解
 ※実際はクライアントとAgonesは直接通信せず、 
  APIサーバを通してやりとりが行われます 


Slide 67

Slide 67 text

ビデオ通話でのAgonesの動き
 67
 そして、ビデオ通話の参加者に
 その通話専用のサーバのIPアドレスとポートを教えてくれる
 通話枠1
 参加者 1-A 通話枠1用の
 専用サーバ 専用サーバ その他の
 専用サーバ
 君がつなぐサーバの
 IPとポートはね…
 参加者 1-B 参加者 1-C ※実際はクライアントとAgonesは直接通信せず、 
  APIサーバを通してやりとりが行われます 


Slide 68

Slide 68 text

Agonesによるルーティング
 68
 これにより、同じ通話の参加者は
 割り当てられた同じ専用サーバに正しく接続できる
 通話枠1
 参加者 1-A 参加者 1-B 参加者 1-C 通話枠1用の
 専用サーバ 通話枠2
 参加者 2-A 参加者 2-B 参加者 2-C 通話枠2用の
 専用サーバ その他の
 専用サーバ


Slide 69

Slide 69 text

Agonesによるスケールインからの保護
 69
 さらにAgonesは一度通話に割り当てたサーバを、
 通話終了までスケールインによる削除から保護してくれる
 通話枠1
 参加者 A 参加者 B 参加者 C 通話枠1用の
 専用サーバ シャットダウン
 してくれ
 Kubernetes それでね…
 へぇ…
 でもさぁ…


Slide 70

Slide 70 text

Agonesによるスケールインからの保護
 70
 さらにAgonesは一度通話に割り当てたサーバを、
 通話終了までスケールインによる削除から保護してくれる
 通話枠1
 参加者 A 参加者 B 参加者 C !!
 Kubernetes それでね…
 へぇ…
 でもさぁ…
 そのサーバは使用中なので
 消しちゃダメ!
 通話枠1用の
 専用サーバ

Slide 71

Slide 71 text

Agonesによるスケールインからの保護
 71
 さらにAgonesは一度通話に割り当てたサーバを、
 通話終了までスケールインによる削除から保護してくれる
 通話枠1
 参加者 A 参加者 B 参加者 C 別の使ってない
 サーバを消すか…
 Kubernetes それでね…
 へぇ…
 でもさぁ…
 安心してビデオ通話を
 続けてね!
 通話枠1用の
 専用サーバ

Slide 72

Slide 72 text

Agonesのまとめ
 72
 ・クライアントからの接続のルーティング
 ・スケールイン時の稼働中サーバの保護
 Agonesは専用サーバを作る時に発生する
 という2つの課題を簡単に解決!


Slide 73

Slide 73 text

サービス紹介
 ビデオ通話機能
 REALITYのリアルタイムコミュニケーション基盤
 専用サーバの課題
 Agonesとは
 全体構成
 まとめ
 73


Slide 74

Slide 74 text

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
 アプリケーションサーバ層 全体構成
 ここまでを踏まえた、ビデオ通話のサーバ構成は以下の通り


Slide 75

Slide 75 text

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つのサーバについて詳しく説明


Slide 76

Slide 76 text

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


Slide 77

Slide 77 text

WebAPI Server
 GKE (Kubernetes) Node Node Service Realtime backend Server Pod (GameServer) WebAPI Server Pod Agones HTTPS Load Balancer ビデオ通話の参加者は、ビデオ通話開始・参加時に
 このサーバ経由で Agones に専用サーバを割り当ててもらう
 77


Slide 78

Slide 78 text

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


Slide 79

Slide 79 text

ここまで説明したビデオ通話用の専用MCUサーバ
 Agonesによって管理されている
 Realtime Backend Server
 GKE (Kubernetes) Node Node Service Realtime backend Server Pod (GameServer) WebSocket Frontend Server Pod Agones HTTPS Load Balancer 79


Slide 80

Slide 80 text

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


Slide 81

Slide 81 text

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


Slide 82

Slide 82 text

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


Slide 83

Slide 83 text

WebSocket Frontend Server を経由するメリット
 83
 通話枠1
 参加者 1-A 通話枠1用の
 専用サーバ その他の
 専用サーバ
 君がつなぐサーバの
 IPとポートはね…
 参加者 1-B 参加者 1-C ※実際はクライアントとAgonesは直接通信せず、 
  APIサーバを通してやりとりが行われます 
 Agonesはビデオ通話の参加者に
 その通話専用サーバのIPアドレスとポートを教えてくれるが…


Slide 84

Slide 84 text

WebSocket Frontend Server を経由するメリット
 84
 通話枠1
 参加者 1-A その他の
 専用サーバ
 参加者 1-B 参加者 1-C XXX.XXX.XXX.XXX:7000
 これをそのまま使って通信を行うと
 専用サーバ側でIPv6シングルスタック環境に対応した
 SSL終端処理を実装する必要があり大変
 通話枠1用の
 専用サーバ IPv6にしか
 対応してないよ!
 IPv6用の
 処理が必要・・・


Slide 85

Slide 85 text

WebSocket Frontend Server を経由するメリット
 85
 しかし、通信を一度中継サーバを経由させて、
 中継サーバにドメインを付与することによって
 通話枠1
 参加者 1-A その他の
 専用サーバ
 参加者 1-B 参加者 1-C XXX.XXX.XXX.XXX:7000
 通話枠1用の
 専用サーバ 中継サーバ tantan-websocket-outer.reality.app 
 Agonesは専用サーバのIPとポートを 
 参加者ではなく中継サーバ に渡す


Slide 86

Slide 86 text

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

Slide 87

Slide 87 text

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
 アプリケーションサーバ層 全体構成


Slide 88

Slide 88 text

サービス紹介
 ビデオ通話機能
 REALITYのリアルタイムコミュニケーション基盤
 専用サーバの課題
 Agonesとは
 全体構成
 まとめ
 88


Slide 89

Slide 89 text

まとめ
 ・既存の機能を流用して、ビデオ通話機能を作成した
 
 ・そのままだと、処理が重くなるため、専用サーバにすることに
 
 ・専用サーバを作るためにAgonesを導入
 
 ・専用サーバとクライアントの間に中継サーバをおくことで
  セキュリティを担保
 89


Slide 90

Slide 90 text

No content