Slide 1

Slide 1 text

ポケラボ内製 リアルタイム通信エンジンの 昇華 株式会社ポケラボ エンジニアマネージャー 齋藤冬斗 株式会社ポケラボ サーバサイドエンジニア 山口拓郎

Slide 2

Slide 2 text

• リアルタイム通信エンジンに興味がある方 • 自社製エンジンの replace に興味がある方 • ポケラボ、そしてポケラボがどんなことをやっているか興味がある方 本講演のターゲットについて 2


Slide 3

Slide 3 text

3
 自己紹介 齋藤 冬斗 (Fuyuto Saito) • モバイルゲーム会社にてモバイルゲーム、コンシューマゲーム、 リアルタイム通信エンジンの開発を経て2015年10月にポケラボに入社 戦姫絶唱シンフォギアXD UNLIMITED の開発などを担当 山口 拓郎 (Takuro Yamaguchi) • 2016年新卒エンジニアとしてポケラボに入社 • 『AKB48ステージファイター2 バトルフェスティバル』 • 『SINoALICE -シノアリス-』 などを担当

Slide 4

Slide 4 text

現在運用タイトルは2本で ● SINoALICE ーシノアリスー ..2022年6月で5周年 ● アサルトリリィ Last Bullet ..2022年7月で1.5周年 を迎えています ポケラボの紹介 4
 © SQEX ©AZONE INTERNATIONAL・acus/アサルトリリィプロジェクト ©Pokelabo, Inc. ©SHAFT

Slide 5

Slide 5 text

シノアリス、アサルトリリィともにインゲーム(GvG)で使用 本講演では、この内製リアルタイム通信エンジンについてご紹介します この2タイトルで内製リアルタイム通信エンジンを使用 5
 SINoALICE ーシノアリスーのインゲーム「コロシアム」 アサルトリリィ Last Bulletのインゲーム「レギオンマッチ」 ©AZONE INTERNATIONAL・acus/アサルトリリィプロジェクト ©Pokelabo, Inc. ©SHAFT © P/SQEX

Slide 6

Slide 6 text

本日のアジェンダ 1. 現行のポケラボ内製リアルタイム通信エンジンの紹介 2. 運用における課題点について 3. 新たなポケラボ内製リアルタイム通信エンジンの紹介 4. 今後の展望 6


Slide 7

Slide 7 text

本日のアジェンダ 1. 現行のポケラボ内製リアルタイム通信エンジンの紹介 2. 運用における課題点について 3. 新たなポケラボ内製リアルタイム通信エンジンの紹介 4. 今後の展望 7


Slide 8

Slide 8 text

通称:Reflector 8
 長きにわたってポケラボのGvGエンジンの一翼を担う ポケラボ内製リアルタイム通信エンジン 過去のポケラボタイトルから シノアリス そして アサルトリリィ と © SQEX ©AZONE INTERNATIONAL・acus/アサルトリリィプロジェクト ©Pokelabo, Inc. ©SHAFT 2012年リリースタイ トルA 2012年リリースタイ トルB 2018年リリースタイ トルC

Slide 9

Slide 9 text

Reflectorにおけるバトルシステム紹介(構成) 9
  client Android iOS Windows ALB Reflector Hazelcast App ALB Amazon Aurora Memcached

Slide 10

Slide 10 text

Reflectorにおけるバトルシステム紹介(構成) 10
  client Android iOS Windows ALB Reflector Hazelcast App ALB Amazon Aurora Memcached ● Reflector ○ コードはJavaで記載 ○ クライアントと常時接続 ○ App サーバが提供する HTTP サービスを定期的に実行 ○ データストアとして Hazelcast を 使用 ● Hazelcast ○ 以下のデータを管理 ■ ルームのメンバー情報

Slide 11

Slide 11 text

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 の読み込み負担を軽減

Slide 12

Slide 12 text

Reflectorにおけるバトルシステム紹介(ルーム参加) 12
  client Android iOS Windows ALB Reflector Hazelcast App ALB Amazon Aurora Memcached 1. ルーム参加通信を送信 1

Slide 13

Slide 13 text

Reflectorにおけるバトルシステム紹介(ルーム参加) 13
  client Android iOS Windows ALB Reflector Hazelcast App ALB Amazon Aurora Memcached 1. ルーム参加通信を送信 2. Hazelcast にメンバー登録 1 2

Slide 14

Slide 14 text

Reflectorにおけるバトルシステム紹介(ルーム参加) 14
  client Android iOS Windows ALB Reflector Hazelcast App ALB Amazon Aurora Memcached 1. ルーム参加通信を送信 2. Hazelcast にメンバー登録 3. 参加メンバーの情報を App サーバから取得 1 3 2

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Reflectorにおけるバトルシステム紹介(状態同期) 18
  client Android iOS Windows ALB Reflector Hazelcast App ALB Amazon Aurora Memcached 1. App サーバへ現在の状態を取得する HTTP サービスを実行 1

Slide 19

Slide 19 text

Reflectorにおけるバトルシステム紹介(状態同期) 19
  client Android iOS Windows ALB Reflector Hazelcast App ALB Amazon Aurora Memcached 1. App サーバへ現在の状態を取得する HTTP サービスを実行 2. 現在の状態を DB から取得し 定期処理を実行 1 2

Slide 20

Slide 20 text

Reflectorにおけるバトルシステム紹介(状態同期) 20
  client Android iOS Windows ALB Reflector Hazelcast App ALB Amazon Aurora Memcached 1. App サーバへ現在の状態を取得する HTTP サービスを実行 2. 現在の状態を DB から取得し 定期処理を実行 3. 処理の実行結果を Reflector に返却 1 2 3

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

Reflectorにおけるバトルシステム紹介(ユーザー行動) 22
  client Android iOS Windows ALB Reflector Hazelcast App ALB Amazon Aurora Memcached 1. スキル使用などのユーザーの 行動メッセージを送信 1

Slide 23

Slide 23 text

Reflectorにおけるバトルシステム紹介(ユーザー行動) 23
  client Android iOS Windows ALB Reflector Hazelcast App ALB Amazon Aurora Memcached 1. スキル使用などのユーザーの 行動メッセージを送信 2. App サーバへユーザーの行動を 登録する HTTP サービスを実行 1 2

Slide 24

Slide 24 text

Reflectorにおけるバトルシステム紹介(ユーザー行動) 24
  client Android iOS Windows ALB Reflector Hazelcast App ALB Amazon Aurora Memcached 1. スキル使用などのユーザーの 行動メッセージを送信 2. App サーバへユーザーの行動を 登録する HTTP サービスを実行 3. 行動に基づいた処理を実行しDB に 結果を保存、 Reflector に返却 1 2 3

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

本日のアジェンダ 1. 現行のポケラボ内製リアルタイム通信エンジンの紹介 2. 運用における課題点について 3. 新たなポケラボ内製リアルタイム通信エンジンの紹介 4. 今後の展望 26


Slide 27

Slide 27 text

Reflectorの課題点 ① 現在はJavaを使えるエンジニアが社内で少ないためメンテナンスしづらい ② ソロとマルチが同じインゲームでも、別途PHPでロジックを書く必要がある ③ Appサーバで処理を実行している仕組み上、サーバ費が大幅に増加してしまう 27


Slide 28

Slide 28 text

Reflectorの課題点 ① 現在はJavaを使えるエンジニアが社内で少ないためメンテナンスしづらい ② ソロとマルチが同じインゲームでも、別途PHPでロジックを書く必要がある ③ Appサーバで処理を実行している仕組み上、サーバ費が大幅に増加してしまう 28


Slide 29

Slide 29 text

Reflectorの課題点① 現在はJavaを使えるエンジニアが社内で少ないためメンテナンスしづらい 現在のポケラボにおける基本的な開発言語は • クライアント:C#(Unity) • サーバ:PHP(LAMP環境) のため、Javaは必須とされていない。 採用に関してもJavaは歓迎要件としている。 今まではJavaを扱えるエンジニアが各プロダクトにおり、それぞれメンテナンスを行っていたが、 直近では各プロダクトにJavaを扱えるエンジニアを置くのが難しくなってきた 29


Slide 30

Slide 30 text

Reflectorの課題点 ① 現在はJavaを使えるエンジニアが社内で少ないためメンテナンスしづらい ② ソロとマルチが同じインゲームでも、別途PHPでロジックを書く必要がある ③ Appサーバで処理を実行している仕組み上、サーバ費が大幅に増加してしまう 30


Slide 31

Slide 31 text

Reflectorの課題点② ソロとマルチが同じインゲームでも、別途PHPでロジックを書く必要がある • 処理をPHP Ingame Logicで実行するため • ソロ(Reflector接続なし) ..C#で記述 • マルチ(Reflector接続あり) ..PHPで記述 と、仮にソロとマルチが全く同じインゲームであっても 別途PHP用に実装が必要 • そのため、実装工数も確認工数も倍になってしまう • プロダクトによっては • C# ..クライアントエンジニア領域 • PHP ..サーバエンジニア領域 必要なスキルセットが異なるので担当者も分かれてしまい、   不具合発生のリスクも増えてしまっている 31
  ゲームサーバ   バトルロジック(マルチ)  Reflector       バトルロジック(ソロ) アプリ

Slide 32

Slide 32 text

Reflectorの課題点 ① 現在はJavaを使えるエンジニアが社内で少ないためメンテナンスしづらい ② ソロとマルチが同じインゲームでも、別途PHPでロジックを書く必要がある ③ Appサーバで処理を実行している仕組み上、サーバ費が大幅に増加してしまう 32


Slide 33

Slide 33 text

  Reflectorの課題点③ Appサーバで処理を実行している仕組み上、サーバ費が大幅に増加してしまう • 状態同期はReflector→Appサーバに毎秒APIを実行しており、   これにより膨大な通信量になっている • プレイヤー行動、状態同期ともにAppサーバ内で処理を 行っているためユーザー数に応じたインスタンス数が常に必要 • 状態同期ではRDSから都度最新の情報を取得しており、 RDSもこれに耐えられるような規模の台数が必要 33
        ゲームサーバ  Reflector            RDS Amazon Aurora

Slide 34

Slide 34 text

Reflectorの課題点の解決策 中長期で開発効率向上、及び運用コスト削減の観点から • Reflectorの改修 • 外部のリアルタイム通信エンジンの採用 の2パターンから解決策を検討 34
 Reflectorをそのまま使い続けると • Reflecotr の保守性の低下 • 運用コスト(開発工数・サーバ費)も高い状態が継続してしまう

Slide 35

Slide 35 text

Reflectorの課題点の解決策 35
 大項目 言語 (課題①) 開発工数減 (課題②) DB削減 (課題③) リアルタイム性 発生コスト サポート 拡張性 Reflectorの改修 自由 〇 〇 〇 なし(人的コストのみ) 不要 〇 外部有料サービスを採用 サービスで 固定 △ 〇 〇 高(固定費 + 従量課金) 〇 △(制限あり) 課題の解決可能性、その他項目の観点で比較し、 自社でReflectorを改修することが最善と判断。 その上でポケラボ内製リアルタイムエンジンを昇華させた 「新しい内製リアルタイム通信エンジン」を開発する方針に決定

Slide 36

Slide 36 text

本日のアジェンダ 1. 現行のポケラボ内製リアルタイム通信エンジンの紹介 2. 運用における課題点について 3. 新たなポケラボ内製リアルタイム通信エンジンの紹介 4. 今後の展望 36


Slide 37

Slide 37 text

新たなポケラボ内製リアルタイム通信エンジンの紹介 その名も・・・ 37
 Reflector Next

Slide 38

Slide 38 text

ReflectorNextとは ポケラボの次世代リアルタイム通信エンジン • 既存のReflector機能は基本的に維持 • MessageのPub/Sub、Appサーバーとの通信、監視機能など • 使用言語はC# • インゲームを記述するLogicModuleを新たに追加 • 新しい機能モジュールで、受け入れ側の開発者による機能拡張ができる • PHPではなくC#で記載できるため、クライアント側のインゲームのロジックを そのまま移植し、動作させることができる ※ただし、クライアント側はVector3といった  Unity標準のスクリプトを使用することはできない 38


Slide 39

Slide 39 text

• インゲームを記述するLogicModuleを新たに追加 ReflectorNextとは 39
 Logic Module ソロバトル Logic Module マルチバトル ReflectorNext

Slide 40

Slide 40 text

ReflectorNext バトルシステム紹介(構成) 40
  client Android iOS Windows Cloud Load Balancing ReflectorNext Hazelcast App Cloud Spanner Memcached Cloud Load Balancing

Slide 41

Slide 41 text

ReflectorNext バトルシステム紹介(構成) 41
  client Android iOS Windows Cloud Load Balancing ReflectorNext Hazelcast App Cloud Spanner Memcached Cloud Load Balancing ● ReflectorNext ○ クライアントと常時接続 ○ データストアは引き続き Hazelcast を使用 ● Hazelcast ○ 以下のデータを管理 ■ ルームのメンバー情報 ■ ルームの状態 ■ メンバーのHP, バフなど のステータス状態 ● DB に Spanner を採用

Slide 42

Slide 42 text

ReflectorNext バトルシステム紹介(ルーム参加) 42
  client Android iOS Windows Cloud Load Balancing Hazelcast App Cloud Spanner Memcached Cloud Load Balancing 1 ReflectorNext ① ルーム参加通信を送信

Slide 43

Slide 43 text

ReflectorNext バトルシステム紹介(ルーム参加) 43
  client Android iOS Windows Cloud Load Balancing Hazelcast App Cloud Spanner Memcached Cloud Load Balancing 1 ① ルーム参加通信を送信 ② Hazelcast にメンバー登録 2 ReflectorNext

Slide 44

Slide 44 text

ReflectorNext バトルシステム紹介(ルーム参加) 44
  client Android iOS Windows Cloud Load Balancing Hazelcast App Cloud Spanner Memcached Cloud Load Balancing 1 3 ① ルーム参加通信を送信 ② Hazelcast にメンバー登録 ③ 参加メンバーの情報を   App サーバから取得 2 ReflectorNext

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

ReflectorNext バトルシステム紹介(状態同期) 48
  client Android iOS Windows Cloud Load Balancing Hazelcast App Cloud Spanner Memcached Cloud Load Balancing 1 ① 現在の状態を hazelcast から取得し   定期処理を実行 ReflectorNext

Slide 49

Slide 49 text

ReflectorNext バトルシステム紹介(状態同期) 49
  client Android iOS Windows Cloud Load Balancing Hazelcast App Cloud Spanner Memcached Cloud Load Balancing 2 1 ① 現在の状態を hazelcast から取得し   定期処理を実行 ② 定期処理の実行結果を同バトルの ルームに所属する client に broadcast ReflectorNext

Slide 50

Slide 50 text

ReflectorNext バトルシステム紹介(状態同期) 50
  client Android iOS Windows Cloud Load Balancing Hazelcast App Cloud Spanner Memcached Cloud Load Balancing 2 1 ReflectorNext

Slide 51

Slide 51 text

ReflectorNext バトルシステム紹介(プレイヤー行動) 51
  client Android iOS Windows Cloud Load Balancing Hazelcast App Cloud Spanner Memcached Cloud Load Balancing ① スキル使用などのプレイヤー行動 メッセージを送信 1 ReflectorNext

Slide 52

Slide 52 text

ReflectorNext バトルシステム紹介(プレイヤー行動) 52
  client Android iOS Windows Cloud Load Balancing Hazelcast App Cloud Spanner Memcached Cloud Load Balancing ① スキル使用などのプレイヤー行動 メッセージを送信 ② バトル状況を Hazelcast から取得し、   プレイヤー行動処理を実行 1 2 ReflectorNext

Slide 53

Slide 53 text

ReflectorNext バトルシステム紹介(プレイヤー行動) 53
  client Android iOS Windows Cloud Load Balancing Hazelcast App Cloud Spanner Memcached Cloud Load Balancing ① スキル使用などのプレイヤー行動 メッセージを送信 ② バトル状況を Hazelcast から取得し、   プレイヤー行動処理を実行 ③ 処理の実行結果を同バトルの ルームに所属する client に broadcast 1 2 3 ReflectorNext

Slide 54

Slide 54 text

● Socket.IO ○ SocketIOSharp ● http client ○ .NET HttpClient ● Hazelcast ○ Hazelcast .NET Client ● 監視 ○ Prometheus .NET、 Prometheus .NET dotnet Runtime ReflectorNext 使用ライブラリ一覧 54


Slide 55

Slide 55 text

● Socket.IO ○ SocketIOSharp ● http client ○ .NET HttpClient ● Hazelcast ○ Hazelcast .NET Client ● 監視 ○ Prometheus .NET、 Prometheus .NET dotnet Runtime ReflectorNext 使用ライブラリ一覧 55


Slide 56

Slide 56 text

使用しているライブラリ:SocketIOSharp ReflectorNext 使用ライブラリ • Socket.IOプロトコルを処理するレイヤー • Reflector では Java の Socket.IO ライブラリを使用しており、 これのC#対応版として使用 56


Slide 57

Slide 57 text

● Socket.IO ○ SocketIOSharp ● http client ○ .NET HttpClient ● Hazelcast ○ Hazelcast .NET Client ● 監視 ○ Prometheus .NET、 Prometheus .NET dotnet Runtime ReflectorNext 使用ライブラリ一覧 57


Slide 58

Slide 58 text

使用しているライブラリ:.NET HttpClient ReflectorNext 使用ライブラリ • HTTPクライアントで、非同期型でHTTPリクエストを送信できる • レスポンスはコールバックで処理 • HTTPコネクションプールの機能を持ち、利用する側はリクエストの完了を待たずに 次のリクエストを送ることができる • ReflectorではJavaのApache http async clientを使用しており、 これのC#対応版として使用 58


Slide 59

Slide 59 text

● Socket.IO ○ SocketIOSharp ● http client ○ .NET HttpClient ● Hazelcast ○ Hazelcast .NET Client ● 監視 ○ Prometheus .NET、 Prometheus .NET dotnet Runtime ReflectorNext 使用ライブラリ一覧 59


Slide 60

Slide 60 text

使用しているライブラリ:.Hazelcast .NET Client ReflectorNext 使用ライブラリ • Hazelcast を利用するために使用 • Java や .NETなど様々な言語の接続用クライアントライブラリがある • ReflectorではJavaのHazelcast Java Clientを使用しており、 これのC#対応版として使用 60


Slide 61

Slide 61 text

● Socket.IO ○ SocketIOSharp ● http client ○ .NET HttpClient ● Hazelcast ○ Hazelcast .NET Client ● 監視 ○ Prometheus .NET、 Prometheus .NET dotnet Runtime ReflectorNext 使用ライブラリ一覧 61


Slide 62

Slide 62 text

使用しているライブラリ:Prometheus .NET、 Prometheus .NET dotnet Runtime ReflectorNext 使用ライブラリ • 内部の状況を確認するために使用 • Counter/Gauge/Histogramなどの基本メトリクス収集機能SDK • dotnet Runtime で dotnet アプリケーションの runtime メトリクスを収集 • ex) GC, Thread, Network • .NET の既知の EventCounter も組み合わせて使用 62


Slide 63

Slide 63 text

ReflectorNext におけるメトリクスの検討 63
 • 既存Reflector は稼働状況を正確に把握するための メトリクスが少なかったため、メトリクスの拡充を実施 • 取得するメトリクスで注視したポイント • 処理のボトルネックを検知しやすくするために duration を細かく計測 • 異常検知を容易に行うために duration, rate を sucess / error 別に計測

Slide 64

Slide 64 text

ReflectorNext におけるメトリクスの検討 64
 例1 Client ReflectorNext Hazelcast Logic Module app send message exec logic function exec API exec broadcast

Slide 65

Slide 65 text

ReflectorNext におけるメトリクスの検討 65
 例1 Client ReflectorNext Hazelcast Logic Module app send message exec logic function exec API exec broadcast

Slide 66

Slide 66 text

ReflectorNext におけるメトリクスの検討 66
 例1 Client ReflectorNext Hazelcast Logic Module app send message exec logic function exec API exec broadcast

Slide 67

Slide 67 text

ReflectorNext におけるメトリクスの検討 67
 Client ReflectorNext Hazelcast Logic Module app send message exec logic function exec API exec broadcast Message Duration 例1

Slide 68

Slide 68 text

ReflectorNext におけるメトリクスの検討 68
 Client ReflectorNext Hazelcast Logic Module app send message exec logic function exec API exec broadcast logic Duration 例1

Slide 69

Slide 69 text

ReflectorNext におけるメトリクスの検討 69
 Client ReflectorNext Hazelcast Logic Module app send message exec logic function exec API exec broadcast http Duration 例1

Slide 70

Slide 70 text

ReflectorNext におけるメトリクスの検討 70
 Client ReflectorNext Hazelcast Logic Module app send message exec logic function exec API exec broadcast broadcast Duration 例1

Slide 71

Slide 71 text

ReflectorNext におけるメトリクスの検討 71
 例2 以下の実行回数/実行時間を 成功/失敗時 それぞれ別に 取得 • message event • http event • room event • broadcast event

Slide 72

Slide 72 text

Reflector Next まとめ 72
 課題① 現在はJavaを使えるENが少ないためメンテナンスしづらい 課題② ソロとマルチが同じインゲームでも、別途PHPでロジックを書く必要がある 課題③ Appサーバで処理を実行している仕組み上、サーバ費が大幅に増加してしまう

Slide 73

Slide 73 text

Reflector Next まとめ 課題① 現在はJavaを使えるENが少ないためメンテナンスしづらい ⇒Unity で馴染みのある C# に変更することでメンテナンスがしやすくなる 課題② ソロとマルチが同じインゲームでも、別途PHPでロジックを書く必要がある ⇒ソロとマルチでインゲームが同じであれば、使用プログラム言語が同じため開発効率が上がる 課題③ Appサーバで処理を実行している仕組み上、サーバ費が大幅に増加してしまう ⇒ バトル中にDBを利用しないため、サーバコスト削減が見込める(コストの約20%カット) 73
 解決 解決 解決

Slide 74

Slide 74 text

Reflector Next まとめ 74
 従来のポケラボ内製リアルタイム通信エンジンの 課題全てを解決できるのが Reflector Next

Slide 75

Slide 75 text

本日のアジェンダ 1. 現行のポケラボ内製リアルタイム通信エンジンの紹介 2. 運用における課題点について 3. 新たなポケラボ内製リアルタイム通信エンジンの紹介 4. 今後の展望 75


Slide 76

Slide 76 text

今後の展望 76
 ReflectorNextを ポケラボの新たな内製リアルタイム通信エンジンとし て運用できるよう準備中

Slide 77

Slide 77 text

現在の進捗 77
 ReflectorNext 本体の実装 
 マスタデータの取り扱い 
 負荷テスト準備(モニタリングシステム、テストシナリオなど) 
 負荷テスト実施、及び不具合修正とリスクの洗い出し 
 開発を支援するデバッグ機能の作成 
 完 了 完 了 完 了 着 手 中 着 手 中

Slide 78

Slide 78 text

 Reflector Next こんなことも将来的にはやっていきたい 78
  ゲームサーバ   バトルロジック       アプリ ● 機械学習の導入 ○ バトルバランスの調整サポート ○ 賢いAIの創出 ● バックオフィス上でバトルシミュレーション機能 ○ 実機無しでバトルのバランス調整や 動作確認ができる

Slide 79

Slide 79 text

No content

Slide 80

Slide 80 text

80