Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ポケラボ内製リアルタイム通信エンジンの昇華
Search
gree_tech
PRO
October 25, 2022
Technology
1
2.2k
ポケラボ内製リアルタイム通信エンジンの昇華
GREE Tech Conference 2022で発表された資料です。
https://techcon.gree.jp/2022/session/TrackB-5
gree_tech
PRO
October 25, 2022
Tweet
Share
More Decks by gree_tech
See All by gree_tech
REALITY株式会社における開発生産性向上の取り組み: 失敗と成功から学んだこと
gree_tech
PRO
2
190
『ヘブンバーンズレッド』におけるフィールドギミックの裏側
gree_tech
PRO
2
150
セキュリティインシデント対応の体制・運用の試行錯誤 / greetechcon2024-session-a1
gree_tech
PRO
1
140
『アナザーエデン 時空を超える猫』国内海外同時運営実現への道のり ~別々で開発されたアプリを安定して同時リリースするまでの取り組み~
gree_tech
PRO
1
120
『アサルトリリィ Last Bullet』におけるクラウドストリーミング技術を用いたブラウザゲーム化の紹介
gree_tech
PRO
1
150
UnityによるPCアプリの新しい選択肢。「PC版 Google Play Games」への対応について
gree_tech
PRO
1
240
実機ビルドのエラーによる検証ブロッカーを0に!『ヘブンバーンズレッド』のスモークテスト自動化の取り組み
gree_tech
PRO
1
180
"ゲームQA業界の技術向上を目指す! 会社を超えた研究会の取り組み"
gree_tech
PRO
1
230
Jamstack でリニューアルするグリーグループのメディア
gree_tech
PRO
2
390
Other Decks in Technology
See All in Technology
Storage Browser for Amazon S3
miu_crescent
1
130
なぜCodeceptJSを選んだか
goataka
0
150
AWS re:Invent 2024 ふりかえり
kongmingstrap
0
130
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
どちらを使う?GitHub or Azure DevOps Ver. 24H2
kkamegawa
0
620
Turing × atmaCup #18 - 1st Place Solution
hakubishin3
0
470
NilAway による静的解析で「10 億ドル」を節約する #kyotogo / Kyoto Go 56th
ytaka23
3
370
非機能品質を作り込むための実践アーキテクチャ
knih
2
660
NW-JAWS #14 re:Invent 2024(予選落ち含)で 発表された推しアップデートについて
nagisa53
0
250
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
420
.NET 9 のパフォーマンス改善
nenonaninu
0
440
AIのコンプラは何故しんどい?
shujisado
1
190
Featured
See All Featured
Navigating Team Friction
lara
183
15k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
GitHub's CSS Performance
jonrohan
1030
460k
How to Think Like a Performance Engineer
csswizardry
22
1.2k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
160
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
A Philosophy of Restraint
colly
203
16k
What's in a price? How to price your products and services
michaelherold
243
12k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
2
290
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
Transcript
ポケラボ内製 リアルタイム通信エンジンの 昇華 株式会社ポケラボ エンジニアマネージャー 齋藤冬斗 株式会社ポケラボ サーバサイドエンジニア 山口拓郎
• リアルタイム通信エンジンに興味がある方 • 自社製エンジンの replace に興味がある方 • ポケラボ、そしてポケラボがどんなことをやっているか興味がある方 本講演のターゲットについて 2
3 自己紹介 齋藤 冬斗 (Fuyuto Saito) • モバイルゲーム会社にてモバイルゲーム、コンシューマゲーム、 リアルタイム通信エンジンの開発を経て2015年10月にポケラボに入社 戦姫絶唱シンフォギアXD
UNLIMITED の開発などを担当 山口 拓郎 (Takuro Yamaguchi) • 2016年新卒エンジニアとしてポケラボに入社 • 『AKB48ステージファイター2 バトルフェスティバル』 • 『SINoALICE -シノアリス-』 などを担当
現在運用タイトルは2本で • SINoALICE ーシノアリスー ..2022年6月で5周年 • アサルトリリィ Last Bullet ..2022年7月で1.5周年
を迎えています ポケラボの紹介 4 © SQEX ©AZONE INTERNATIONAL・acus/アサルトリリィプロジェクト ©Pokelabo, Inc. ©SHAFT
シノアリス、アサルトリリィともにインゲーム(GvG)で使用 本講演では、この内製リアルタイム通信エンジンについてご紹介します この2タイトルで内製リアルタイム通信エンジンを使用 5 SINoALICE ーシノアリスーのインゲーム「コロシアム」 アサルトリリィ Last Bulletのインゲーム「レギオンマッチ」 ©AZONE
INTERNATIONAL・acus/アサルトリリィプロジェクト ©Pokelabo, Inc. ©SHAFT © P/SQEX
本日のアジェンダ 1. 現行のポケラボ内製リアルタイム通信エンジンの紹介 2. 運用における課題点について 3. 新たなポケラボ内製リアルタイム通信エンジンの紹介 4. 今後の展望 6
本日のアジェンダ 1. 現行のポケラボ内製リアルタイム通信エンジンの紹介 2. 運用における課題点について 3. 新たなポケラボ内製リアルタイム通信エンジンの紹介 4. 今後の展望 7
通称:Reflector 8 長きにわたってポケラボのGvGエンジンの一翼を担う ポケラボ内製リアルタイム通信エンジン 過去のポケラボタイトルから シノアリス そして アサルトリリィ と ©
SQEX ©AZONE INTERNATIONAL・acus/アサルトリリィプロジェクト ©Pokelabo, Inc. ©SHAFT 2012年リリースタイ トルA 2012年リリースタイ トルB 2018年リリースタイ トルC
Reflectorにおけるバトルシステム紹介(構成) 9 client Android iOS Windows ALB Reflector Hazelcast App
ALB Amazon Aurora Memcached
Reflectorにおけるバトルシステム紹介(構成) 10 client Android iOS Windows ALB Reflector Hazelcast App
ALB Amazon Aurora Memcached • Reflector ◦ コードはJavaで記載 ◦ クライアントと常時接続 ◦ App サーバが提供する HTTP サービスを定期的に実行 ◦ データストアとして Hazelcast を 使用 • Hazelcast ◦ 以下のデータを管理 ▪ ルームのメンバー情報
Reflectorにおけるバトルシステム紹介(構成) 11 client Android iOS Windows ALB Reflector Hazelcast App
ALB Amazon Aurora Memcached • App ◦ Apache / PHP(7.3) ◦ Reflector からの HTTP 通信を 受け、バトルの処理を実行 • Amazon Aurora ◦ 以下のデータを管理 ▪ ルームの状態 ▪ メンバーのHP, バフなどの ステータス状態 • Memcached ◦ 分散型キャッシュシステム ◦ DB の読み込み負担を軽減
Reflectorにおけるバトルシステム紹介(ルーム参加) 12 client Android iOS Windows ALB Reflector Hazelcast App
ALB Amazon Aurora Memcached 1. ルーム参加通信を送信 1
Reflectorにおけるバトルシステム紹介(ルーム参加) 13 client Android iOS Windows ALB Reflector Hazelcast App
ALB Amazon Aurora Memcached 1. ルーム参加通信を送信 2. Hazelcast にメンバー登録 1 2
Reflectorにおけるバトルシステム紹介(ルーム参加) 14 client Android iOS Windows ALB Reflector Hazelcast App
ALB Amazon Aurora Memcached 1. ルーム参加通信を送信 2. Hazelcast にメンバー登録 3. 参加メンバーの情報を App サーバから取得 1 3 2
Reflectorにおけるバトルシステム紹介(ルーム参加) 15 client Android iOS Windows ALB Reflector Hazelcast App
ALB Amazon Aurora Memcached 1. ルーム参加通信を送信 2. Hazelcast にメンバー登録 3. 参加メンバーの情報を App サーバから取得 4. 参加メンバーの情報を DB から取得 1 3 4 2
Reflectorにおけるバトルシステム紹介(ルーム参加) 16 client Android iOS Windows ALB Reflector Hazelcast App
ALB Amazon Aurora Memcached 1. ルーム参加通信を送信 2. Hazelcast にメンバー登録 3. 参加メンバーの情報を App サーバから取得 4. 参加メンバーの情報を DB から取得 5. 参加メンバーの情報を返却 1 3 4 5 2
Reflectorにおけるバトルシステム紹介(ルーム参加) 17 client Android iOS Windows ALB Reflector Hazelcast App
ALB Amazon Aurora Memcached 1. ルーム参加通信を送信 2. Hazelcast にメンバー登録 3. 参加メンバーの情報を App サーバから取得 4. 参加メンバーの情報を DB から取得 5. 参加メンバーの情報を返却 6. 返却された結果を 同バトルの ルームに所属する client に broadcast 1 3 4 5 6 2
Reflectorにおけるバトルシステム紹介(状態同期) 18 client Android iOS Windows ALB Reflector Hazelcast App
ALB Amazon Aurora Memcached 1. App サーバへ現在の状態を取得する HTTP サービスを実行 1
Reflectorにおけるバトルシステム紹介(状態同期) 19 client Android iOS Windows ALB Reflector Hazelcast App
ALB Amazon Aurora Memcached 1. App サーバへ現在の状態を取得する HTTP サービスを実行 2. 現在の状態を DB から取得し 定期処理を実行 1 2
Reflectorにおけるバトルシステム紹介(状態同期) 20 client Android iOS Windows ALB Reflector Hazelcast App
ALB Amazon Aurora Memcached 1. App サーバへ現在の状態を取得する HTTP サービスを実行 2. 現在の状態を DB から取得し 定期処理を実行 3. 処理の実行結果を Reflector に返却 1 2 3
Reflectorにおけるバトルシステム紹介(状態同期) 21 client Android iOS Windows ALB Reflector Hazelcast App
ALB Amazon Aurora Memcached 1. App サーバへ現在の状態を取得する HTTP サービスを実行 2. 現在の状態を DB から取得し 定期処理を実行 3. 処理の実行結果を Reflector に返却 4. App サーバから返却された結果を client に転送 1 2 3 4
Reflectorにおけるバトルシステム紹介(ユーザー行動) 22 client Android iOS Windows ALB Reflector Hazelcast App
ALB Amazon Aurora Memcached 1. スキル使用などのユーザーの 行動メッセージを送信 1
Reflectorにおけるバトルシステム紹介(ユーザー行動) 23 client Android iOS Windows ALB Reflector Hazelcast App
ALB Amazon Aurora Memcached 1. スキル使用などのユーザーの 行動メッセージを送信 2. App サーバへユーザーの行動を 登録する HTTP サービスを実行 1 2
Reflectorにおけるバトルシステム紹介(ユーザー行動) 24 client Android iOS Windows ALB Reflector Hazelcast App
ALB Amazon Aurora Memcached 1. スキル使用などのユーザーの 行動メッセージを送信 2. App サーバへユーザーの行動を 登録する HTTP サービスを実行 3. 行動に基づいた処理を実行しDB に 結果を保存、 Reflector に返却 1 2 3
Reflectorにおけるバトルシステム紹介(ユーザー行動) 25 client Android iOS Windows ALB Reflector Hazelcast App
ALB Amazon Aurora Memcached 1. スキル使用などのユーザーの 行動メッセージを送信 2. App サーバへユーザーの行動を 登録する HTTP サービスを実行 3. 行動に基づいた処理を実行しDB に 結果を保存、 Reflector に返却 4. 返却された結果を Client に転送 1 2 3 4
本日のアジェンダ 1. 現行のポケラボ内製リアルタイム通信エンジンの紹介 2. 運用における課題点について 3. 新たなポケラボ内製リアルタイム通信エンジンの紹介 4. 今後の展望 26
Reflectorの課題点 ① 現在はJavaを使えるエンジニアが社内で少ないためメンテナンスしづらい ② ソロとマルチが同じインゲームでも、別途PHPでロジックを書く必要がある ③ Appサーバで処理を実行している仕組み上、サーバ費が大幅に増加してしまう 27
Reflectorの課題点 ① 現在はJavaを使えるエンジニアが社内で少ないためメンテナンスしづらい ② ソロとマルチが同じインゲームでも、別途PHPでロジックを書く必要がある ③ Appサーバで処理を実行している仕組み上、サーバ費が大幅に増加してしまう 28
Reflectorの課題点① 現在はJavaを使えるエンジニアが社内で少ないためメンテナンスしづらい 現在のポケラボにおける基本的な開発言語は • クライアント:C#(Unity) • サーバ:PHP(LAMP環境) のため、Javaは必須とされていない。 採用に関してもJavaは歓迎要件としている。 今まではJavaを扱えるエンジニアが各プロダクトにおり、それぞれメンテナンスを行っていたが、
直近では各プロダクトにJavaを扱えるエンジニアを置くのが難しくなってきた 29
Reflectorの課題点 ① 現在はJavaを使えるエンジニアが社内で少ないためメンテナンスしづらい ② ソロとマルチが同じインゲームでも、別途PHPでロジックを書く必要がある ③ Appサーバで処理を実行している仕組み上、サーバ費が大幅に増加してしまう 30
Reflectorの課題点② ソロとマルチが同じインゲームでも、別途PHPでロジックを書く必要がある • 処理をPHP Ingame Logicで実行するため • ソロ(Reflector接続なし) ..C#で記述 •
マルチ(Reflector接続あり) ..PHPで記述 と、仮にソロとマルチが全く同じインゲームであっても 別途PHP用に実装が必要 • そのため、実装工数も確認工数も倍になってしまう • プロダクトによっては • C# ..クライアントエンジニア領域 • PHP ..サーバエンジニア領域 必要なスキルセットが異なるので担当者も分かれてしまい、 不具合発生のリスクも増えてしまっている 31 ゲームサーバ バトルロジック(マルチ) Reflector バトルロジック(ソロ) アプリ
Reflectorの課題点 ① 現在はJavaを使えるエンジニアが社内で少ないためメンテナンスしづらい ② ソロとマルチが同じインゲームでも、別途PHPでロジックを書く必要がある ③ Appサーバで処理を実行している仕組み上、サーバ費が大幅に増加してしまう 32
Reflectorの課題点③ Appサーバで処理を実行している仕組み上、サーバ費が大幅に増加してしまう • 状態同期はReflector→Appサーバに毎秒APIを実行しており、 これにより膨大な通信量になっている • プレイヤー行動、状態同期ともにAppサーバ内で処理を 行っているためユーザー数に応じたインスタンス数が常に必要 •
状態同期ではRDSから都度最新の情報を取得しており、 RDSもこれに耐えられるような規模の台数が必要 33 ゲームサーバ Reflector RDS Amazon Aurora
Reflectorの課題点の解決策 中長期で開発効率向上、及び運用コスト削減の観点から • Reflectorの改修 • 外部のリアルタイム通信エンジンの採用 の2パターンから解決策を検討 34 Reflectorをそのまま使い続けると •
Reflecotr の保守性の低下 • 運用コスト(開発工数・サーバ費)も高い状態が継続してしまう
Reflectorの課題点の解決策 35 大項目 言語 (課題①) 開発工数減 (課題②) DB削減 (課題③) リアルタイム性
発生コスト サポート 拡張性 Reflectorの改修 自由 〇 〇 〇 なし(人的コストのみ) 不要 〇 外部有料サービスを採用 サービスで 固定 △ 〇 〇 高(固定費 + 従量課金) 〇 △(制限あり) 課題の解決可能性、その他項目の観点で比較し、 自社でReflectorを改修することが最善と判断。 その上でポケラボ内製リアルタイムエンジンを昇華させた 「新しい内製リアルタイム通信エンジン」を開発する方針に決定
本日のアジェンダ 1. 現行のポケラボ内製リアルタイム通信エンジンの紹介 2. 運用における課題点について 3. 新たなポケラボ内製リアルタイム通信エンジンの紹介 4. 今後の展望 36
新たなポケラボ内製リアルタイム通信エンジンの紹介 その名も・・・ 37 Reflector Next
ReflectorNextとは ポケラボの次世代リアルタイム通信エンジン • 既存のReflector機能は基本的に維持 • MessageのPub/Sub、Appサーバーとの通信、監視機能など • 使用言語はC# • インゲームを記述するLogicModuleを新たに追加
• 新しい機能モジュールで、受け入れ側の開発者による機能拡張ができる • PHPではなくC#で記載できるため、クライアント側のインゲームのロジックを そのまま移植し、動作させることができる ※ただし、クライアント側はVector3といった Unity標準のスクリプトを使用することはできない 38
• インゲームを記述するLogicModuleを新たに追加 ReflectorNextとは 39 Logic Module ソロバトル Logic Module マルチバトル
ReflectorNext
ReflectorNext バトルシステム紹介(構成) 40 client Android iOS Windows Cloud Load Balancing
ReflectorNext Hazelcast App Cloud Spanner Memcached Cloud Load Balancing
ReflectorNext バトルシステム紹介(構成) 41 client Android iOS Windows Cloud Load Balancing
ReflectorNext Hazelcast App Cloud Spanner Memcached Cloud Load Balancing • ReflectorNext ◦ クライアントと常時接続 ◦ データストアは引き続き Hazelcast を使用 • Hazelcast ◦ 以下のデータを管理 ▪ ルームのメンバー情報 ▪ ルームの状態 ▪ メンバーのHP, バフなど のステータス状態 • DB に Spanner を採用
ReflectorNext バトルシステム紹介(ルーム参加) 42 client Android iOS Windows Cloud Load Balancing
Hazelcast App Cloud Spanner Memcached Cloud Load Balancing 1 ReflectorNext ① ルーム参加通信を送信
ReflectorNext バトルシステム紹介(ルーム参加) 43 client Android iOS Windows Cloud Load Balancing
Hazelcast App Cloud Spanner Memcached Cloud Load Balancing 1 ① ルーム参加通信を送信 ② Hazelcast にメンバー登録 2 ReflectorNext
ReflectorNext バトルシステム紹介(ルーム参加) 44 client Android iOS Windows Cloud Load Balancing
Hazelcast App Cloud Spanner Memcached Cloud Load Balancing 1 3 ① ルーム参加通信を送信 ② Hazelcast にメンバー登録 ③ 参加メンバーの情報を App サーバから取得 2 ReflectorNext
ReflectorNext バトルシステム紹介(ルーム参加) 45 client Android iOS Windows Cloud Load Balancing
Hazelcast App Cloud Spanner Memcached Cloud Load Balancing 1 3 ① ルーム参加通信を送信 ② Hazelcast にメンバー登録 ③ 参加メンバーの情報を App サーバから取得 ④ 参加メンバーの情報を DB から取得 4 2 ReflectorNext
ReflectorNext バトルシステム紹介(ルーム参加) 46 client Android iOS Windows Cloud Load Balancing
Hazelcast App Cloud Spanner Memcached Cloud Load Balancing 1 3 ① ルーム参加通信を送信 ② Hazelcast にメンバー登録 ③ 参加メンバーの情報を App サーバから取得 ④ 参加メンバーの情報を DB から取得 ⑤ 参加メンバーの情報を返却 4 5 2 ReflectorNext
ReflectorNext バトルシステム紹介(ルーム参加) 47 client Android iOS Windows Cloud Load Balancing
Hazelcast App Cloud Spanner Memcached Cloud Load Balancing 1 3 ① ルーム参加通信を送信 ② Hazelcast にメンバー登録 ③ 参加メンバーの情報を App サーバから取得 ④ 参加メンバーの情報を DB から取得 ⑤ 参加メンバーの情報を返却 ⑥ 返却された結果を 同バトルの ルームに所属する client に broadcast 4 5 6 2 ReflectorNext
ReflectorNext バトルシステム紹介(状態同期) 48 client Android iOS Windows Cloud Load Balancing
Hazelcast App Cloud Spanner Memcached Cloud Load Balancing 1 ① 現在の状態を hazelcast から取得し 定期処理を実行 ReflectorNext
ReflectorNext バトルシステム紹介(状態同期) 49 client Android iOS Windows Cloud Load Balancing
Hazelcast App Cloud Spanner Memcached Cloud Load Balancing 2 1 ① 現在の状態を hazelcast から取得し 定期処理を実行 ② 定期処理の実行結果を同バトルの ルームに所属する client に broadcast ReflectorNext
ReflectorNext バトルシステム紹介(状態同期) 50 client Android iOS Windows Cloud Load Balancing
Hazelcast App Cloud Spanner Memcached Cloud Load Balancing 2 1 ReflectorNext
ReflectorNext バトルシステム紹介(プレイヤー行動) 51 client Android iOS Windows Cloud Load Balancing
Hazelcast App Cloud Spanner Memcached Cloud Load Balancing ① スキル使用などのプレイヤー行動 メッセージを送信 1 ReflectorNext
ReflectorNext バトルシステム紹介(プレイヤー行動) 52 client Android iOS Windows Cloud Load Balancing
Hazelcast App Cloud Spanner Memcached Cloud Load Balancing ① スキル使用などのプレイヤー行動 メッセージを送信 ② バトル状況を Hazelcast から取得し、 プレイヤー行動処理を実行 1 2 ReflectorNext
ReflectorNext バトルシステム紹介(プレイヤー行動) 53 client Android iOS Windows Cloud Load Balancing
Hazelcast App Cloud Spanner Memcached Cloud Load Balancing ① スキル使用などのプレイヤー行動 メッセージを送信 ② バトル状況を Hazelcast から取得し、 プレイヤー行動処理を実行 ③ 処理の実行結果を同バトルの ルームに所属する client に broadcast 1 2 3 ReflectorNext
• Socket.IO ◦ SocketIOSharp • http client ◦ .NET HttpClient
• Hazelcast ◦ Hazelcast .NET Client • 監視 ◦ Prometheus .NET、 Prometheus .NET dotnet Runtime ReflectorNext 使用ライブラリ一覧 54
• Socket.IO ◦ SocketIOSharp • http client ◦ .NET HttpClient
• Hazelcast ◦ Hazelcast .NET Client • 監視 ◦ Prometheus .NET、 Prometheus .NET dotnet Runtime ReflectorNext 使用ライブラリ一覧 55
使用しているライブラリ:SocketIOSharp ReflectorNext 使用ライブラリ • Socket.IOプロトコルを処理するレイヤー • Reflector では Java の
Socket.IO ライブラリを使用しており、 これのC#対応版として使用 56
• Socket.IO ◦ SocketIOSharp • http client ◦ .NET HttpClient
• Hazelcast ◦ Hazelcast .NET Client • 監視 ◦ Prometheus .NET、 Prometheus .NET dotnet Runtime ReflectorNext 使用ライブラリ一覧 57
使用しているライブラリ:.NET HttpClient ReflectorNext 使用ライブラリ • HTTPクライアントで、非同期型でHTTPリクエストを送信できる • レスポンスはコールバックで処理 • HTTPコネクションプールの機能を持ち、利用する側はリクエストの完了を待たずに
次のリクエストを送ることができる • ReflectorではJavaのApache http async clientを使用しており、 これのC#対応版として使用 58
• Socket.IO ◦ SocketIOSharp • http client ◦ .NET HttpClient
• Hazelcast ◦ Hazelcast .NET Client • 監視 ◦ Prometheus .NET、 Prometheus .NET dotnet Runtime ReflectorNext 使用ライブラリ一覧 59
使用しているライブラリ:.Hazelcast .NET Client ReflectorNext 使用ライブラリ • Hazelcast を利用するために使用 • Java
や .NETなど様々な言語の接続用クライアントライブラリがある • ReflectorではJavaのHazelcast Java Clientを使用しており、 これのC#対応版として使用 60
• Socket.IO ◦ SocketIOSharp • http client ◦ .NET HttpClient
• Hazelcast ◦ Hazelcast .NET Client • 監視 ◦ Prometheus .NET、 Prometheus .NET dotnet Runtime ReflectorNext 使用ライブラリ一覧 61
使用しているライブラリ:Prometheus .NET、 Prometheus .NET dotnet Runtime ReflectorNext 使用ライブラリ • 内部の状況を確認するために使用
• Counter/Gauge/Histogramなどの基本メトリクス収集機能SDK • dotnet Runtime で dotnet アプリケーションの runtime メトリクスを収集 • ex) GC, Thread, Network • .NET の既知の EventCounter も組み合わせて使用 62
ReflectorNext におけるメトリクスの検討 63 • 既存Reflector は稼働状況を正確に把握するための メトリクスが少なかったため、メトリクスの拡充を実施 • 取得するメトリクスで注視したポイント •
処理のボトルネックを検知しやすくするために duration を細かく計測 • 異常検知を容易に行うために duration, rate を sucess / error 別に計測
ReflectorNext におけるメトリクスの検討 64 例1 Client ReflectorNext Hazelcast Logic Module app
send message exec logic function exec API exec broadcast
ReflectorNext におけるメトリクスの検討 65 例1 Client ReflectorNext Hazelcast Logic Module app
send message exec logic function exec API exec broadcast
ReflectorNext におけるメトリクスの検討 66 例1 Client ReflectorNext Hazelcast Logic Module app
send message exec logic function exec API exec broadcast
ReflectorNext におけるメトリクスの検討 67 Client ReflectorNext Hazelcast Logic Module app send
message exec logic function exec API exec broadcast Message Duration 例1
ReflectorNext におけるメトリクスの検討 68 Client ReflectorNext Hazelcast Logic Module app send
message exec logic function exec API exec broadcast logic Duration 例1
ReflectorNext におけるメトリクスの検討 69 Client ReflectorNext Hazelcast Logic Module app send
message exec logic function exec API exec broadcast http Duration 例1
ReflectorNext におけるメトリクスの検討 70 Client ReflectorNext Hazelcast Logic Module app send
message exec logic function exec API exec broadcast broadcast Duration 例1
ReflectorNext におけるメトリクスの検討 71 例2 以下の実行回数/実行時間を 成功/失敗時 それぞれ別に 取得 • message
event • http event • room event • broadcast event
Reflector Next まとめ 72 課題① 現在はJavaを使えるENが少ないためメンテナンスしづらい 課題② ソロとマルチが同じインゲームでも、別途PHPでロジックを書く必要がある 課題③ Appサーバで処理を実行している仕組み上、サーバ費が大幅に増加してしまう
Reflector Next まとめ 課題① 現在はJavaを使えるENが少ないためメンテナンスしづらい ⇒Unity で馴染みのある C# に変更することでメンテナンスがしやすくなる 課題②
ソロとマルチが同じインゲームでも、別途PHPでロジックを書く必要がある ⇒ソロとマルチでインゲームが同じであれば、使用プログラム言語が同じため開発効率が上がる 課題③ Appサーバで処理を実行している仕組み上、サーバ費が大幅に増加してしまう ⇒ バトル中にDBを利用しないため、サーバコスト削減が見込める(コストの約20%カット) 73 解決 解決 解決
Reflector Next まとめ 74 従来のポケラボ内製リアルタイム通信エンジンの 課題全てを解決できるのが Reflector Next
本日のアジェンダ 1. 現行のポケラボ内製リアルタイム通信エンジンの紹介 2. 運用における課題点について 3. 新たなポケラボ内製リアルタイム通信エンジンの紹介 4. 今後の展望 75
今後の展望 76 ReflectorNextを ポケラボの新たな内製リアルタイム通信エンジンとし て運用できるよう準備中
現在の進捗 77 ReflectorNext 本体の実装 マスタデータの取り扱い 負荷テスト準備(モニタリングシステム、テストシナリオなど) 負荷テスト実施、及び不具合修正とリスクの洗い出し
開発を支援するデバッグ機能の作成 完 了 完 了 完 了 着 手 中 着 手 中
Reflector Next こんなことも将来的にはやっていきたい 78 ゲームサーバ バトルロジック
アプリ • 機械学習の導入 ◦ バトルバランスの調整サポート ◦ 賢いAIの創出 • バックオフィス上でバトルシミュレーション機能 ◦ 実機無しでバトルのバランス調整や 動作確認ができる
None
80