Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ポケラボ内製リアルタイム通信エンジンの昇華

gree_tech
October 25, 2022

 ポケラボ内製リアルタイム通信エンジンの昇華

GREE Tech Conference 2022で発表された資料です。
https://techcon.gree.jp/2022/session/TrackB-5

gree_tech

October 25, 2022
Tweet

More Decks by gree_tech

Other Decks in Technology

Transcript

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

    View full-size slide

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


    View full-size slide

  3. 3

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

    View full-size slide

  4. 現在運用タイトルは2本で
    ● SINoALICE ーシノアリスー ..2022年6月で5周年
    ● アサルトリリィ Last Bullet ..2022年7月で1.5周年
    を迎えています
    ポケラボの紹介
    4

    © SQEX ©AZONE INTERNATIONAL・acus/アサルトリリィプロジェクト ©Pokelabo, Inc. ©SHAFT

    View full-size slide

  5. シノアリス、アサルトリリィともにインゲーム(GvG)で使用
    本講演では、この内製リアルタイム通信エンジンについてご紹介します
    この2タイトルで内製リアルタイム通信エンジンを使用
    5

    SINoALICE ーシノアリスーのインゲーム「コロシアム」
    アサルトリリィ Last Bulletのインゲーム「レギオンマッチ」
    ©AZONE INTERNATIONAL・acus/アサルトリリィプロジェクト ©Pokelabo, Inc. ©SHAFT
    © P/SQEX

    View full-size slide

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


    View full-size slide

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


    View full-size slide

  8. 通称:Reflector
    8

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

    View full-size slide

  9. Reflectorにおけるバトルシステム紹介(構成)
    9

     client
    Android iOS
    Windows
    ALB Reflector
    Hazelcast
    App
    ALB
    Amazon
    Aurora
    Memcached

    View full-size slide

  10. Reflectorにおけるバトルシステム紹介(構成)
    10

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

    View full-size slide

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

    View full-size slide

  12. Reflectorにおけるバトルシステム紹介(ルーム参加)
    12

     client
    Android iOS
    Windows
    ALB Reflector
    Hazelcast
    App
    ALB
    Amazon
    Aurora
    Memcached
    1. ルーム参加通信を送信
    1

    View full-size slide

  13. Reflectorにおけるバトルシステム紹介(ルーム参加)
    13

     client
    Android iOS
    Windows
    ALB Reflector
    Hazelcast
    App
    ALB
    Amazon
    Aurora
    Memcached
    1. ルーム参加通信を送信
    2. Hazelcast にメンバー登録
    1
    2

    View full-size slide

  14. Reflectorにおけるバトルシステム紹介(ルーム参加)
    14

     client
    Android iOS
    Windows
    ALB Reflector
    Hazelcast
    App
    ALB
    Amazon
    Aurora
    Memcached
    1. ルーム参加通信を送信
    2. Hazelcast にメンバー登録
    3. 参加メンバーの情報を
    App サーバから取得
    1
    3
    2

    View full-size slide

  15. 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

    View full-size slide

  16. 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

    View full-size slide

  17. 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

    View full-size slide

  18. Reflectorにおけるバトルシステム紹介(状態同期)
    18

     client
    Android iOS
    Windows
    ALB Reflector
    Hazelcast
    App
    ALB
    Amazon
    Aurora
    Memcached
    1. App サーバへ現在の状態を取得する
    HTTP サービスを実行
    1

    View full-size slide

  19. Reflectorにおけるバトルシステム紹介(状態同期)
    19

     client
    Android iOS
    Windows
    ALB Reflector
    Hazelcast
    App
    ALB
    Amazon
    Aurora
    Memcached
    1. App サーバへ現在の状態を取得する
    HTTP サービスを実行
    2. 現在の状態を DB から取得し
    定期処理を実行
    1
    2

    View full-size slide

  20. Reflectorにおけるバトルシステム紹介(状態同期)
    20

     client
    Android iOS
    Windows
    ALB Reflector
    Hazelcast
    App
    ALB
    Amazon
    Aurora
    Memcached
    1. App サーバへ現在の状態を取得する
    HTTP サービスを実行
    2. 現在の状態を DB から取得し
    定期処理を実行
    3. 処理の実行結果を Reflector に返却
    1
    2
    3

    View full-size slide

  21. 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

    View full-size slide

  22. Reflectorにおけるバトルシステム紹介(ユーザー行動)
    22

     client
    Android iOS
    Windows
    ALB Reflector
    Hazelcast
    App
    ALB
    Amazon
    Aurora
    Memcached
    1. スキル使用などのユーザーの
    行動メッセージを送信
    1

    View full-size slide

  23. Reflectorにおけるバトルシステム紹介(ユーザー行動)
    23

     client
    Android iOS
    Windows
    ALB Reflector
    Hazelcast
    App
    ALB
    Amazon
    Aurora
    Memcached
    1. スキル使用などのユーザーの
    行動メッセージを送信
    2. App サーバへユーザーの行動を
    登録する HTTP サービスを実行
    1
    2

    View full-size slide

  24. Reflectorにおけるバトルシステム紹介(ユーザー行動)
    24

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

    View full-size slide

  25. 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

    View full-size slide

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


    View full-size slide

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


    View full-size slide

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


    View full-size slide

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


    View full-size slide

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


    View full-size slide

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

     ゲームサーバ  
    バトルロジック(マルチ)
     Reflector  
       
    バトルロジック(ソロ)
    アプリ

    View full-size slide

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


    View full-size slide

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

           ゲームサーバ
     Reflector  
     
           RDS
    Amazon
    Aurora

    View full-size slide

  34. Reflectorの課題点の解決策
    中長期で開発効率向上、及び運用コスト削減の観点から
    • Reflectorの改修
    • 外部のリアルタイム通信エンジンの採用
    の2パターンから解決策を検討
    34

    Reflectorをそのまま使い続けると
    • Reflecotr の保守性の低下
    • 運用コスト(開発工数・サーバ費)も高い状態が継続してしまう

    View full-size slide

  35. Reflectorの課題点の解決策
    35

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

    View full-size slide

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


    View full-size slide

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

    Reflector Next

    View full-size slide

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


    View full-size slide

  39. • インゲームを記述するLogicModuleを新たに追加
    ReflectorNextとは
    39

    Logic
    Module
    ソロバトル
    Logic
    Module
    マルチバトル
    ReflectorNext

    View full-size slide

  40. ReflectorNext バトルシステム紹介(構成)
    40

     client
    Android iOS
    Windows
    Cloud Load
    Balancing
    ReflectorNext
    Hazelcast
    App
    Cloud
    Spanner
    Memcached
    Cloud Load
    Balancing

    View full-size slide

  41. ReflectorNext バトルシステム紹介(構成)
    41

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

    View full-size slide

  42. ReflectorNext バトルシステム紹介(ルーム参加)
    42

     client
    Android iOS
    Windows
    Cloud Load
    Balancing
    Hazelcast
    App
    Cloud
    Spanner
    Memcached
    Cloud Load
    Balancing
    1
    ReflectorNext
    ① ルーム参加通信を送信

    View full-size slide

  43. ReflectorNext バトルシステム紹介(ルーム参加)
    43

     client
    Android iOS
    Windows
    Cloud Load
    Balancing
    Hazelcast
    App
    Cloud
    Spanner
    Memcached
    Cloud Load
    Balancing
    1
    ① ルーム参加通信を送信
    ② Hazelcast にメンバー登録
    2
    ReflectorNext

    View full-size slide

  44. ReflectorNext バトルシステム紹介(ルーム参加)
    44

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

    View full-size slide

  45. 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

    View full-size slide

  46. 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

    View full-size slide

  47. 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

    View full-size slide

  48. ReflectorNext バトルシステム紹介(状態同期)
    48

     client
    Android iOS
    Windows
    Cloud Load
    Balancing
    Hazelcast
    App
    Cloud
    Spanner
    Memcached
    Cloud Load
    Balancing
    1
    ① 現在の状態を hazelcast から取得し
      定期処理を実行
    ReflectorNext

    View full-size slide

  49. ReflectorNext バトルシステム紹介(状態同期)
    49

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

    View full-size slide

  50. ReflectorNext バトルシステム紹介(状態同期)
    50

     client
    Android iOS
    Windows
    Cloud Load
    Balancing
    Hazelcast
    App
    Cloud
    Spanner
    Memcached
    Cloud Load
    Balancing
    2
    1
    ReflectorNext

    View full-size slide

  51. ReflectorNext バトルシステム紹介(プレイヤー行動)
    51

     client
    Android iOS
    Windows
    Cloud Load
    Balancing
    Hazelcast
    App
    Cloud
    Spanner
    Memcached
    Cloud Load
    Balancing
    ① スキル使用などのプレイヤー行動
    メッセージを送信
    1
    ReflectorNext

    View full-size slide

  52. ReflectorNext バトルシステム紹介(プレイヤー行動)
    52

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

    View full-size slide

  53. ReflectorNext バトルシステム紹介(プレイヤー行動)
    53

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

    View full-size slide

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


    View full-size slide

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


    View full-size slide

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


    View full-size slide

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


    View full-size slide

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


    View full-size slide

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


    View full-size slide

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


    View full-size slide

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


    View full-size slide

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


    View full-size slide

  63. ReflectorNext におけるメトリクスの検討
    63

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

    View full-size slide

  64. ReflectorNext におけるメトリクスの検討
    64

    例1
    Client ReflectorNext Hazelcast
    Logic
    Module
    app
    send
    message
    exec
    logic function
    exec API
    exec
    broadcast

    View full-size slide

  65. ReflectorNext におけるメトリクスの検討
    65

    例1
    Client ReflectorNext Hazelcast
    Logic
    Module
    app
    send
    message
    exec
    logic function
    exec API
    exec
    broadcast

    View full-size slide

  66. ReflectorNext におけるメトリクスの検討
    66

    例1
    Client ReflectorNext Hazelcast
    Logic
    Module
    app
    send
    message
    exec
    logic function
    exec API
    exec
    broadcast

    View full-size slide

  67. ReflectorNext におけるメトリクスの検討
    67

    Client ReflectorNext Hazelcast
    Logic
    Module
    app
    send
    message
    exec
    logic function
    exec API
    exec
    broadcast
    Message
    Duration
    例1

    View full-size slide

  68. ReflectorNext におけるメトリクスの検討
    68

    Client ReflectorNext Hazelcast
    Logic
    Module
    app
    send
    message
    exec
    logic function
    exec API
    exec
    broadcast
    logic
    Duration
    例1

    View full-size slide

  69. ReflectorNext におけるメトリクスの検討
    69

    Client ReflectorNext Hazelcast
    Logic
    Module
    app
    send
    message
    exec
    logic function
    exec API
    exec
    broadcast
    http
    Duration
    例1

    View full-size slide

  70. ReflectorNext におけるメトリクスの検討
    70

    Client ReflectorNext Hazelcast
    Logic
    Module
    app
    send
    message
    exec
    logic function
    exec API
    exec
    broadcast
    broadcast
    Duration
    例1

    View full-size slide

  71. ReflectorNext におけるメトリクスの検討
    71

    例2
    以下の実行回数/実行時間を 成功/失敗時 それぞれ別に 取得
    • message event
    • http event
    • room event
    • broadcast event

    View full-size slide

  72. Reflector Next まとめ
    72

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

    View full-size slide

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

    解決
    解決
    解決

    View full-size slide

  74. Reflector Next まとめ
    74

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

    View full-size slide

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


    View full-size slide

  76. 今後の展望
    76

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

    View full-size slide

  77. 現在の進捗
    77

    ReflectorNext 本体の実装 

    マスタデータの取り扱い 

    負荷テスト準備(モニタリングシステム、テストシナリオなど) 

    負荷テスト実施、及び不具合修正とリスクの洗い出し 

    開発を支援するデバッグ機能の作成 













    View full-size slide

  78.  Reflector Next
    こんなことも将来的にはやっていきたい
    78

     ゲームサーバ  
    バトルロジック
     
       
    アプリ
    ● 機械学習の導入
    ○ バトルバランスの調整サポート
    ○ 賢いAIの創出
    ● バックオフィス上でバトルシミュレーション機能
    ○ 実機無しでバトルのバランス調整や
    動作確認ができる

    View full-size slide