SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
REALITY低遅延モード配信を支えるリアルタイムサーバとデータパイプライン
Report
gree_tech
Follow
gree_tech
Sep. 23, 2020
•
0 likes
•
2,669 views
1
of
36
REALITY低遅延モード配信を支えるリアルタイムサーバとデータパイプライン
Sep. 23, 2020
•
0 likes
•
2,669 views
Download Now
Download to read offline
Report
Engineering
GREE Tech Conference 2020 で発表された資料です。 https://techcon.gree.jp/2020/session/Session-11
gree_tech
Follow
gree_tech
Recommended
分割と整合性と戦う
Yugo Shimizu
29.2K views
•
102 slides
ロボット・ソフトウェア開発環境ROSとは何か? (in Japanese)
Toshihiko Yamakami
4.3K views
•
16 slides
トランクベース開発を活用して爆速に開発した話
Tier_IV
1.1K views
•
20 slides
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。
ROBOTIS Japan
7.6K views
•
26 slides
ドメイン駆動設計 基本を理解する
増田 亨
117.3K views
•
134 slides
Marp Tutorial
Rui Watanabe
3K views
•
15 slides
More Related Content
What's hot
OpenVRやOpenXRの基本的なことを調べてみた
Takahiro Miyaura
1.8K views
•
29 slides
ROS を用いた自律移動ロボットのシステム構築
Yoshitaka HARA
41.3K views
•
84 slides
ゲームアプリの数学@GREE GameDevelopers' Meetup
gree_tech
8K views
•
45 slides
FPGAをロボット(ROS)で「やわらかく」使うには
Hideki Takase
1.3K views
•
39 slides
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
121.5K views
•
99 slides
【Unity】 Behavior TreeでAIを作る
torisoup
19.3K views
•
49 slides
What's hot
(20)
OpenVRやOpenXRの基本的なことを調べてみた
Takahiro Miyaura
•
1.8K views
ROS を用いた自律移動ロボットのシステム構築
Yoshitaka HARA
•
41.3K views
ゲームアプリの数学@GREE GameDevelopers' Meetup
gree_tech
•
8K views
FPGAをロボット(ROS)で「やわらかく」使うには
Hideki Takase
•
1.3K views
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
•
121.5K views
【Unity】 Behavior TreeでAIを作る
torisoup
•
19.3K views
【Unite Tokyo 2019】トヨタのxR活用事例ご紹介
UnityTechnologiesJapan002
•
4K views
大規模Node.jsを支える ロードバランスとオートスケールの独自実装
kidach1
•
25.3K views
ROS の活用による屋外の歩行者空間に適応した自律移動ロボットの開発
Yoshitaka HARA
•
36.6K views
Immersal を活用した AR クラウドなシステム開発とハンズオン!
NishoMatsusita
•
1.2K views
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
Kitsukawa Yuki
•
11.1K views
DockerコンテナでGitを使う
Kazuhiro Suga
•
18.3K views
忙しい人の5分で分かるDocker 2017年春Ver
Masahito Zembutsu
•
29.3K views
【Unity道場 建築スペシャル2】点群ビジュアライゼーション
UnityTechnologiesJapan002
•
5.3K views
Unityでオニオンアーキテクチャ
torisoup
•
9.7K views
RICOH THETA プラグイン開発 ワークショップ #1
RICOHTHETAPluginDevloperCommunity
•
2.9K views
はじめようARCore:自己位置推定・平面検出・FaceTracking
Takashi Yoshinaga
•
33.9K views
ChatGPTは思ったほど賢くない
Carnot Inc.
•
4.4K views
リンク機構を有するロボットをGazeboで動かす
tomohiro kuwano
•
2.9K views
UnityとROSの連携について
UnityTechnologiesJapan002
•
5.8K views
Similar to REALITY低遅延モード配信を支えるリアルタイムサーバとデータパイプライン
20180612 AWS Black Belt Online Seminar AWS で実現するライブ動画配信とリアルタイムチャットのアーキテクチャパターン
Amazon Web Services Japan
11.5K views
•
104 slides
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
Amazon Web Services Japan
5.9K views
•
55 slides
AWSの様々なアーキテクチャ
Kameda Harunobu
1.1K views
•
70 slides
大手ゲーム会社のプラットフォームにハイブリッドクラウドを採用した理由とは
Kentaro Kamata
1.1K views
•
29 slides
CData API Server ハンズオン
CData Software Japan
459 views
•
23 slides
Realm platform2019
昌桓 李
1.2K views
•
36 slides
Similar to REALITY低遅延モード配信を支えるリアルタイムサーバとデータパイプライン
(20)
20180612 AWS Black Belt Online Seminar AWS で実現するライブ動画配信とリアルタイムチャットのアーキテクチャパターン
Amazon Web Services Japan
•
11.5K views
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
Amazon Web Services Japan
•
5.9K views
AWSの様々なアーキテクチャ
Kameda Harunobu
•
1.1K views
大手ゲーム会社のプラットフォームにハイブリッドクラウドを採用した理由とは
Kentaro Kamata
•
1.1K views
CData API Server ハンズオン
CData Software Japan
•
459 views
Realm platform2019
昌桓 李
•
1.2K views
【Webサイト構築】「HTML5とは何か?-企業のウエブ戦略の視点から-」(20120530メンバーズセミナー)
Members_corp
•
1.6K views
20130313 OSCA Hadoopセミナー
Ichiro Fukuda
•
3.8K views
IoT@Loft #4 - IoT製品の量産化および運用を効率化させるためのAWS サービスの使い方
Amazon Web Services Japan
•
2K views
Leading the way to W3C TPAC 2015 『HTML5 関連の API の現状とこれから』
Futomi Hatano
•
3K views
CData Sync Hand-on 資料
CData Software Japan
•
272 views
Wagby で100+ のクラウドデータに連携するアプリを開発(CData JDBC Drivers)
CData Software Japan
•
368 views
[CTO Night & Day 2019] グローバルのサービス展開に向けたマルチリージョンアーキテクチャ- #ctonight
Amazon Web Services Japan
•
1.8K views
20201125 EC Solution Seminar Live Commerce
Amazon Web Services Japan
•
1.8K views
AWSを用いた番組連動Webコンテンツ処理基盤の構築
Eiji KOMINAMI
•
628 views
AWS All Stars ~Lightning Talks x 13~
Amazon Web Services Japan
•
5.7K views
クラウドサービスを使って作る動画サイト?
Daichi Isami
•
4.8K views
20180319 ccon sync kintone
CData Software Japan
•
232 views
APIに関するセッション資料
CData Software Japan
•
120 views
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
Amazon Web Services Japan
•
1.8K views
More from gree_tech
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
gree_tech
698 views
•
36 slides
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介
gree_tech
222 views
•
13 slides
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表
gree_tech
1K views
•
18 slides
アプリ起動時間高速化 ~推測するな、計測せよ~
gree_tech
1.8K views
•
84 slides
長寿なゲーム事業におけるアプリビルドの効率化
gree_tech
341 views
•
116 slides
Cloud Spanner をより便利にする運用支援ツールの紹介
gree_tech
558 views
•
31 slides
More from gree_tech
(20)
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
gree_tech
•
698 views
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介
gree_tech
•
222 views
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表
gree_tech
•
1K views
アプリ起動時間高速化 ~推測するな、計測せよ~
gree_tech
•
1.8K views
長寿なゲーム事業におけるアプリビルドの効率化
gree_tech
•
341 views
Cloud Spanner をより便利にする運用支援ツールの紹介
gree_tech
•
558 views
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介
gree_tech
•
585 views
SINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現について
gree_tech
•
612 views
海外展開と負荷試験
gree_tech
•
586 views
翻訳QAでのテスト自動化の取り組み
gree_tech
•
294 views
組み込み開発のテストとゲーム開発のテストの違い
gree_tech
•
544 views
サーバーフレームワークに潜んでる脆弱性検知ツール紹介
gree_tech
•
206 views
データエンジニアとアナリストチーム兼務になった件について
gree_tech
•
297 views
シェアドサービスとしてのデータテクノロジー
gree_tech
•
424 views
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
gree_tech
•
956 views
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
gree_tech
•
1K views
比較サイトの検索改善(SPA から SSR に変換)
gree_tech
•
664 views
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
gree_tech
•
2.6K views
「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜
gree_tech
•
385 views
法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)
gree_tech
•
743 views
REALITY低遅延モード配信を支えるリアルタイムサーバとデータパイプライン
1.
REALITY低遅延モード配信を支える リアルタイムサーバと データパイプライン 株式会社 Wright Flyer
Live Entertainment 増住 啓吾
2.
2 自己紹介 増住 啓吾 株式会社Wright Flyer
Live Entertainment - 2017年にGlossom株式会社に入社 - iOS/Android向けアプリの開発やデータ分析基盤 の構築、広告ログ集計システムの開発・運用などを 担当 - グループ内公募制度を利用し、2019年に株式会社 Wright Flyer Live Entertainmentにジョイン - Kubernates・Apache Beamなどを用いた REALITYプラットフォームのライブ配信基盤の開発 を担当
3.
3 REALITYとは?
4.
4 2020/01/08 REALITY低遅延モードリリース
5.
5 ラグなし、ギガ安、高画質
6.
6 低遅延モード配信のフォーマット • REALITYの現行のメイン配信方式 • 配信・視聴ユーザーがそれぞれWebSocketサーバへ接続 •
WebSocketサーバを通してデータを送受信する • 配信データの中身はモーション・音声などのデータをProtobuf形式 でシリアライズしたもの
7.
7 解決すべき問題点 • 配信データのボリュームが大きい • チャット等に比べデータ量が非常に多い •
128〜256kbs程度 • パトロール・監査のため、配信データを参照可能な方式で保存して おく必要がある • 配信音声やラベル付き配信データなどのフォーマット
8.
8 ライブ配信・視聴サーバ
9.
9 全体像 Kubernetes Android iOS Ingress HTTPS Streamer Kubernetes Engine Redis (StatefulSet) Kubernetes
Engine Listener Kubernetes Engine Cloud Pub/Sub Archiver Cloud Dataflow Archive Cloud Storage Stats BigQuery
10.
10 解決すべき問題点 • 配信データのボリュームが大きい • チャット等に比べデータ量が非常に多い •
128〜256kbs程度 • パトロール・監査のため、配信データを参照可能な方式で保存して おく必要がある • 配信音声やラベル付き配信データなどのフォーマット
11.
11 ライブ配信 / 視聴サーバ
- 課題 ● WebSocketサーバ ( Node.js ) を通して配信データの送 受信を行う ● WebSocketサーバの冗長化はRedis Pub/Subを用いる ● ただし、一般的なWebSocket + Redis Pub/Subのパ ターンでは配信・視聴の負荷に耐えきれなくなる
12.
12 WebSocketサーバの負荷分散方式 (1)
13.
13 課題 Redis Pub/Subがボトルネックになる ○ スケールアウトができない ○
スケールアップができない ○ クラスタ化しても無意味 スケーラビリティに限界がある
14.
14 WebSocketサーバの負荷分散方式 (2)
15.
15 課題 1.エンドポイントレベルのシャー ディング 2.WebSocketサーバ * N
+ Redis * 1 の単位でスケール 運用コストが高い
16.
16 REALITYの構成
17.
17 2.配信側サーバは全ての Redisインスタ ンスに対して分散してデータを Publishす る
3.視聴側サーバは全ての Redisインスタ ンスに対し必要なRedis Pub/Sub ChannelをSubscribeし、来たデータを視 聴者へbroadcast Redisをスケールアウト可能 1.Redis (Pub/Sub専用) をスタンドアロ ンでN基立ち上げる
18.
18 1.Redisはk8sのStatefulSet + Headless Serviceとして立ち上げる 2.各WebSocketサーバはk8sのサービ スディスカバリでRedisの各hostを認識・ 接続 運用コストが低い 3.各WebSocketサーバやRedisは単一 のk8sワークロードとなるため、
k8sのス ケーリングの仕組みをそのまま活用でき る
19.
19 ライブ配信 / 視聴サーバ
- 構成 ● k8sのサービスディスカバリを利用したRedisのスケーリング ● Redisはk8sのStatefulSet + Headless Serviceを利用 => kube-proxyを通らないのでパフォーマンスも落ちない ● Redisのスケールアウトが可能なので、構成全体のスケーラ ビリティを担保できる ● k8sのオートスケーリングの仕組みに乗ったスケーリングが 可能なので運用工数も低い
20.
20 ライブ配信 / 視聴サーバ
- まとめ • 当該方式の配信・視聴サーバのリリース後7ヶ月経過 • 同時配信数・視聴者数ともに右肩上がりだが、障害なしで安定して動 作 • 基本的にはk8sのオートスケーリングに任せられるので、運用コストも 非常に低い • Redis Pub/Subによる遅延は、アプリ - 配信・視聴サーバ間の通信 に比べて無視できる程度で安定
21.
21 ライブ配信 / 視聴サーバ
- その他 • シンプルな構成なので横展開が楽 • 事例1: コラボ配信サーバ • 「アバタービデオチャット」的な機能を提供するコンポーネント • ボイスチャット用の音声のミキシングも行う • 事例2: ゲーム配信サーバ • ゲームサーバ + ゲーム配信の視聴サーバの機能を提供する
22.
22 解決すべき問題点 (再掲) • 配信データのボリュームが大きい •
チャット等に比べデータ量が非常に多い • 128〜256kbs程度 • パトロール・監査のため、配信データを参照可能な方式で保 存しておく必要がある • 配信音声やラベル付き配信データなどのフォーマット
23.
23 ライブ配信データパイプライン
24.
24 ライブ配信データパイプライン - 構成 Cloud Pub/Sub Archiver Cloud
Dataflow Archive Cloud Storage Stats BigQuery Kubernetes Streamer Kubernetes Engine Ingress HTTPS Redis (StatefulSet) Kubernetes Engine Listener Kubernetes Engine
25.
25 ライブ配信データパイプライン - 構成 Cloud Pub/Sub Archiver Cloud
Dataflow Archive Cloud Storage Stats BigQuery Kubernetes Streamer Kubernetes Engine Ingress HTTPS Redis (StatefulSet) Kubernetes Engine Listener Kubernetes Engine 1.配信データをCloud Pub/Sub TopicへPublish 2.Cloud Dataflow Jobが Cloud Pub/Sub Subscription 経由で配信データを読み出す 3.配信データを Streaming処理で集計・ 加工して保存
26.
26 ライブ配信データパイプライン - 概要 ●
配信サーバはCloud Pub/Sub Topicへラベル付き配信データ をPublish ● Cloud DataFlow Job ( Apache Beam Java ) がCloud Pub/Sub Subscription経由でデータを読み出す ● 読み出した配信データをApache Beam Pipelineで処理 ● ラベル付き配信データ、監査用音声アーカイブファイル、分 析用統計情報などを生成 ● 生成したデータをCloud Storageへ書き込む
27.
27 ライブ配信データパイプライン - インフラ ●
Cloud DataFlow Streaming Engineを使用 ● Streaming処理とオートスケーリングを両立 ● Worker Machineの分だけ自動でスケールしていく ● キャパシティプランニングもほぼ不要 ● deployもJavaのビルドだけで完結するので楽
28.
28 Apache Beam??
29.
29 ライブ配信データパイプライン - Apache
Beam ● バッチ・ストリーミング処理を統合して実行できる分散処理 フレームワーク ● REALITYではApache Beam Javaを使用 ● 基本的にはJavaアプリケーションなのでできることの範囲が 広い ● 当然JNIも使えるのでネイティブコードも利用可能 ● その上でさらに分散処理のメリットを享受できる ● Apache Sparkなどと比較すると、Cloud DataFlowとの連携 のメリットが非常に大きい
30.
30 ライブ配信データパイプライン - 処理グラフ
31.
31 ライブ配信データパイプライン - データ保存 ●
Streaming Pipelineにラベル付き配信デー タが流れてくる ● 取り出したデータを10秒単位でWindow化 ● データをPOJOに変換 ● データとそのタイムスタンプから、1時間 ごとのディレクトリに分割した一意なファ イルパスを生成 ● 生成したファイルパスへデータをAvro フォーマットで書き出す
32.
32 ライブ配信データパイプライン - 音声アーカイブ ●
Streaming Pipelineにラベル付き配信 データが流れてくる ● データを配信ごとにグルーピング し、時系列に並びかえ音声データ (Opus圧縮) を抽出 ● その音声データをOggコンテナに格 納する ● 生成したOggコンテナをバイナリ ファイルとして配信IDごとの時系列 順にCloud Storageに書き出す
33.
33 ライブ配信データパイプライン - まとめ •
同時配信数の増加に伴い比例して処理データ量も増えていったが、全て Cloud Dataflow側で吸収してくれるので特に追加のオペレーションの必要 はなかった • データロストの発生もなし • サーバ費用の面では当然それなりのコストは発生するものの、想定通りにお さまる
34.
34 結果
35.
35 解決された問題点 • 配信データのボリュームが大きい • チャット等に比べデータ量が非常に多い •
128〜256kbs程度 • パトロール・監査のため、配信データを参照可能な方式で保存して おく必要がある • 配信音声やラベル付き配信データなどのフォーマット
36.
36 おわりに