Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
SINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機...
Search
gree_tech
PRO
November 11, 2021
Technology
860
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現について
GREE Tech Conference 2021 で発表された資料です。
https://techcon.gree.jp/2021/session/Session-8
gree_tech
PRO
November 11, 2021
More Decks by gree_tech
See All by gree_tech
多彩なデータに負けないデータ分析パイプライン構築
gree_tech
PRO
0
120
AI駆動で挑むプロダクト刷新 ── アーキテクチャ設計とワークフロー最適化の実践事例 ──
gree_tech
PRO
0
110
『ヘブンバーンズレッド』のリグレッションテストにおけるストーリーの自動プレイ
gree_tech
PRO
0
130
REALITYにTAチームができるまでの軌跡〜ミッション:ガチャ本数5倍に対応せよ!〜
gree_tech
PRO
0
71
イベント続きでもミスらないライブサービスゲーム公式サイト運用システム開発
gree_tech
PRO
0
84
20年間 SNS サービス「GREE」 を支えた技術の刷新と、長期運用サービスの Kubernetes へのリアーキテクト
gree_tech
PRO
0
180
グラフ基盤ワークフローで実現するLLMによる自動ゲームプレイ
gree_tech
PRO
0
130
AIエージェントに脆弱性診断の仕事を奪われかけた ークローリングからコード全診断までの限界突破ー
gree_tech
PRO
0
110
アバター使っておもろいものを作り続けたい
gree_tech
PRO
0
100
Other Decks in Technology
See All in Technology
AX時代の自治体支援リソース再配分と役割分担の再構成:戦略とロードマップ(概要)
sishi2026
0
200
re:Invent の去年のスケジュールを公開します!
miu_crescent
PRO
0
280
[JAWS Festa 2026]一番いい仕事は、請求書に現れない / jawsfesta2026
sh_fk2
2
160
公共分野での生成AI活用
toru_kubota
1
190
Copilot Coworkで「みのるん式」やってみた
minorun365
PRO
2
1.5k
Kiro Crew の Bot (続く役目を任せる窓口) | 目指せ Kiro マスター 12
inariku
PRO
0
200
慶應義塾大学 AI実践05 論文執筆の仕組み化
keio_smilab
PRO
6
3.6k
Lint の層を組み直した話
bengo4com
3
310
増え続けるプロダクトの品質をどう担保するか。ProductSpecとTypeScriptによる取り組み
joere
3
390
FinOpsを導入してマルチプロダクトのコスト最適化を実現する
kworkdev
PRO
0
130
Content Mapper APIの応用例~CSS Modules、言語ファイル~
uhyo
2
600
AWSを利用する上で知っておきたい名前解決の話 2026
nagisa53
4
2.4k
Featured
See All Featured
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1.1k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Odyssey Design
rkendrick25
PRO
2
920
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.2k
Practical Orchestrator
shlominoach
192
12k
Skip the Path - Find Your Career Trail
mkilby
1
280
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.7k
How to Ace a Technical Interview
jacobian
280
24k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
290
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Transcript
SINoALICE -シノアリス- Google Cloud Firestoreを 用いた観戦機能の実現について 株式会社ポケラボ サーバーエンジニア 山口 拓郎
• 本公演のターゲット • Google Cloud Firestoreに興味がある方 • シノアリスのリアルタイムバトルのシステムに興味がある方 はじめに 2
• 山口 拓郎(Takuro Yamaguchi) • 2016年新卒エンジニアとしてポケラボに入社 • AKB48ステージファイター2 バトルフェスティバル •
SINoALICE -シノアリス- • 新卒から現在に至るまでサーバーサイドエンジニアとして従事 自己紹介 3
本日の流れ 4 1.シノアリスとは 2.観戦機能とは 3.コロシアムのシステム紹介 4.発生した課題と解決方法について
1.シノアリスとは 5
シノアリスとは 6
シノアリスとは 7 • リアルタイム通信対戦『コロシアム』 について • シノアリスのメインコンテンツである、 ギルド対抗バトル • 最大15人のギルドメンバーと協力し、
対戦ギルドの”イノチ”を奪い合う • 1回20分間の対戦で、より多くの”イノ チ”を獲得した方の勝利
2. 観戦機能とは 8
観戦機能について(始まり) 9 • コロシアムで世界1位のギルドを決める 「WORLD GRAN COLOSSEUM」を開催
観戦機能について(始まり) 10 • コロシアムで世界1位のギルドを決める 「WORLD GRAN COLOSSEUM」を開催 • 実際に出場するお客様だけでなく •
出場されないお客様にも一緒になって楽しんでもらえるよう 様々な検討を重ねた結果 • 世界一を決める激戦をみんなで観戦・応援できる仕組みを導入 することとなりました
観戦機能について(始まり) 11 • コロシアムで世界1位のギルドを決める 「WORLD GRAN COLOSSEUM」を開催 • 実際に出場するお客様だけでなく •
出場されないお客様にも一緒になって楽しんでもらえるよう 様々な検討を重ねた結果 • 世界一を決める激戦をみんなで観戦・応援できる仕組みを導入 することとなりました ※開発画面
観戦機能について(始まり) 12 • コロシアムで世界1位のギルドを決める 「WORLD GRAN COLOSSEUM」を開催 • 実際に出場するお客様だけでなく •
出場されないお客様にも一緒になって楽しんでもらえるよう 様々な検討を重ねた結果 • 世界一を決める激戦をみんなで観戦・応援できる仕組みを導入 することとなりました
観戦機能について(技術方針) 13
観戦機能について(技術方針) 14
観戦機能について(技術方針) 15
Cloud Firestore 観戦機能について(技術方針) 16 • 柔軟な階層型データ構造に対応 • リアルタイムアップデート • Firebase
Unity SDK から扱える • シノアリスのアプリには既に導入済みだった
3. コロシアムのシステム紹介 17
コロシアムのシステム紹介(構成) 18
コロシアムのシステム紹介(構成) 19 • Unity 2018.4.2f1 • Apache / PHP(7.0) •
Amazon Aurora MySQL • Memcached • CDN(Akamai)
コロシアムのシステム紹介(構成) 20 • ポケラボ謹製 リアルタイム通信サーバ (通称「Reflector」) ◦ Java ◦ クライアントと常時接続
◦ Appサーバが提供する HTTPサービスを定期的に 実行 ◦ データストアとして Hazelcastを利用
コロシアムのシステム紹介(状態同期) 21 1 1. App サーバへ現在の状態を取得す る HTTP サービスを実行
コロシアムのシステム紹介(状態同期) 22 1 1. App サーバへ現在の状態を取得す る HTTP サービスを実行 2.
現在の状態を Reflector に返却 2
コロシアムのシステム紹介(状態同期) 23 1 1. App サーバへ現在の状態を取得す る HTTP サービスを実行 2.
現在の状態を Reflector に返却 3. App サーバから返却された状態を Client に転送 2 3
コロシアムのシステム紹介(状態同期) 24 1 1. App サーバへ現在の状態を取得す る HTTP サービスを実行 2.
現在の状態を Reflector に返却 3. App サーバから返却された状態を Client に転送 4. 転送された状態を元に画面同期 2 3 4
コロシアムのシステム紹介(ユーザー行動) 25 1. 武器使用などのユーザーの行動メ ッセージを送信 1
コロシアムのシステム紹介(ユーザー行動) 26 2 1. 武器使用などのユーザーの行動メ ッセージを送信 2. App サーバへユーザーの行動を 登録する
HTTP サービスを実行 1
コロシアムのシステム紹介(ユーザー行動) 27 2 1. 武器使用などのユーザーの行動メ ッセージを送信 2. App サーバへユーザーの行動を 登録する
HTTP サービスを実行 3. 行動に基づいた処理を実行、結果 を Reflector に返却 3 1
コロシアムのシステム紹介(ユーザー行動) 28 2 1. 武器使用などのユーザーの行動メ ッセージを送信 2. App サーバへユーザーの行動を 登録する
HTTP サービスを実行 3. 行動に基づいた処理を実行、結果 を Reflector に返却 4. 返却された結果を Client に転送 3 4 1
コロシアムのシステム紹介(Firestore導入:戦況) 29
コロシアムのシステム紹介(Firestore導入:戦況) 30 1. Reflector から App サーバへ HTTP サービスを実行 1
コロシアムのシステム紹介(Firestore導入:戦況) 31 1. Reflector から App サーバへ HTTP サービスを実行 2.
結果を Reflector に返却すると共 に Firestore へ書き込み 1 2
コロシアムのシステム紹介(Firestore導入:戦況) 32 1. Reflector から App サーバへ HTTP サービスを実行 2.
結果を Reflector に返却すると共 に Firestore へ書き込み 3. Firestore 上のデータ読み取り 1 2 3
コロシアムのシステム紹介(Firestore導入:チャット) 33
コロシアムのシステム紹介(Firestore導入:チャット) 34 1. Client から App サーバへ メッセージ送信 1
コロシアムのシステム紹介(Firestore導入:チャット) 35 1. Client から App サーバへ メッセージ送信 2. 結果を
Firestore へ書き込み 2 1
コロシアムのシステム紹介(Firestore導入:チャット) 36 1. Client から App サーバへ メッセージ送信 2. 結果を
Firestore へ書き込み 3. Firestore 上のデータ読み取り 2 3 1
Firesto 上のデータ構造(仕様) 37 • Cloud Firestore はNoSQL ドキュメント指向データベース • データは「ドキュメント」に格納し
それが「コレクション」にまとめられる
Firesto 上のデータ構造 38 collection1 コロシアムの 基本情報 対戦開始時 ギルド情報 メンバー情報 イベント情報
など collection2 ユーザーの 行動履歴 ユーザー1行動毎 ユーザーID 攻撃対象 ダメージ量 など collection3 戦況状態履歴 約1秒毎 全ユーザーのHP イノチ獲得量 イベント状態 など collection4 チャット 発言毎 ユーザーアイコン 発言内容 など
Firesto 上のデータ構造 39 collection1 コロシアムの 基本情報 対戦開始時 ギルド情報 メンバー情報 イベント情報
など collection2 ユーザーの 行動履歴 ユーザー1行動毎 ユーザーID 攻撃対象 ダメージ量 など collection3 戦況状態履歴 約1秒毎 全ユーザーのHP イノチ獲得量 イベント状態 など collection4 チャット 発言毎 ユーザーアイコン 発言内容 など
Firesto 上のデータ構造 40 collection1 コロシアムの 基本情報 対戦開始時 ギルド情報 メンバー情報 イベント情報
など collection2 ユーザーの 行動履歴 ユーザー1行動毎 ユーザーID 攻撃対象 ダメージ量 など collection3 戦況状態履歴 約1秒毎 全ユーザーのHP イノチ獲得量 イベント状態 など collection4 チャット 発言毎 ユーザーアイコン 発言内容 など
Firesto 上のデータ構造 41 collection1 コロシアムの 基本情報 対戦開始時 ギルド情報 メンバー情報 イベント情報
など collection2 ユーザーの 行動履歴 ユーザー1行動毎 ユーザーID 攻撃対象 ダメージ量 など collection3 戦況状態履歴 約1秒毎 全ユーザーのHP イノチ獲得量 イベント状態 など collection4 チャット 発言毎 ユーザーアイコン 発言内容 など
Firesto 上のデータ構造 42 collection1 コロシアムの 基本情報 対戦開始時 ギルド情報 メンバー情報 イベント情報
など collection2 ユーザーの 行動履歴 ユーザー1行動毎 ユーザーID 攻撃対象 ダメージ量 など collection3 戦況状態履歴 約1秒毎 全ユーザーのHP イノチ獲得量 イベント状態 など collection4 チャット 発言毎 ユーザーアイコン 発言内容 など
4. 発生した課題と解決方法について 43
発生した課題と解決方法について 44 • PHP から Firestore への write時、一定のコストがかかっており • 結果
Response Time の悪化が見られた
発生した課題と解決方法について 45 • Firestore への write が遅延するケースがあった • PHP と
Firestore を切り離すために Cloud functions を使用
発生した課題と解決方法について 46 • Firestore への write にかかる時間が安定しなかった • PHP と
Firestore を切り離すために、下記を実施 app サーバ 戦況書き込み app サーバ 戦況書き込み • Cloud functions ◦ PHP → Firestore への書き込み遅延を回避するために使用 PHP から write するのではなく、Cloud Functions から write する • Cloud Pub/Sub ◦ Cloud functions のトリガーとして使用
発生した課題と解決方法について 47 • Firestore への write が遅延するケースがあった • PHP と
Firestore を切り離すために Cloud functions を使用 app サーバ 戦況書き込み app サーバ 戦況書き込み
発生した課題と解決方法について 48 • Cloud functions からの write に切り替えた結果 Response Time
は安定
発生した課題と解決方法について 49 • Cloud functions からの write に切り替えた結果 Response Time
は安定 • 依然として Cloud Pub/Sub への書き込みコストがあった
発生した課題と解決方法について 50 • 依然として Cloud Pub/Sub への書き込みコストがあった • google-cloud-batch daemon
を使用
発生した課題と解決方法について 51 • 依然として Cloud Pub/Sub への書き込みコストがあった • google-cloud-batch daemon
を使用 Request pub/sub 書き込み daemon 未使用
発生した課題と解決方法について 52 • 依然として Cloud Pub/Sub への書き込みコストがあった • google-cloud-batch daemon
を使用 Request pub/sub 書き込み daemon pub/sub 書き込み queueに書き込み Request daemon 未使用 daemon 使用
発生した課題と解決方法について 53 • google-cloud-batch daemon で Cloud Pub/Sub への write
を行うようにした結果 • Response Time が、Firestore導入前と同等まで改善
まとめ 54 • Cloud Firestore は以下の特徴がある • 柔軟な階層型データ構造に対応 • リアルタイムアップデート
• Firebase Unity SDK から扱える • Firestore への書き込み時に一定のコストが発生したが Cloud functions, batch daemon を使用することで 書き込み時のコストを抑えることが出来た
55