狠狠撸

狠狠撸Share a Scribd company logo
? KLab Inc. 2022
モバイルオンラインゲームでの大規模観
戦とチート対策
? KLab Inc. 2022
自社製リアルタイム通信システム
「WSNet2」
OSSとして公開しました
https://github.com/KLab/wsnet2
告知
? KLab Inc. 2022
今日のお話
● 自己紹介?会社紹介
● WSNet2の紹介
● なぜ自社開発したか
● 数万人規模の観戦への対応
● チート対策の工夫
? KLab Inc. 2022
自己紹介
牧内大輔
KLab株式会社 エンジニアリング本部サーバサイドG
対外発表
● Go Conference
? 「型パラメータが使えるようになったのでLINQを実装してみた」 他
OSS
● EMLauncher (https://github.com/KLab/emlauncher)
● gozxing (https://github.com/makiuchi-d/gozixing) 他
? KLab Inc. 2022
ミッション:「世界と自分をワクワクさせろ」
ビジョン:「エンターテインメントで、世界中のユーザーをひとつにつなげる」
社会に感動と喜びを提供できるような、サービス?技術を創造しています。
設立 2000年8月1日
資本金 53億6364万円(2022年10月末現在)
株式公開市場 東京証券取引所?プライム市場(3656)
代表者
代表取締役社長CEO 森田 英克
代表取締役副会長 五十嵐洋介
所在地
本社(東京都港区、六本木ヒルズ森タワー)
大阪事業所、福岡事業所、仙台事業所
主要関連会社 株式会社BLOCKSMITH&Co. 株式会社グローバルギア
海外拠点 可来软件开发(上海)有限公司 (KLab China Inc.)
グループ従業員数 正社員 553名(2022年9月末時点)
主力:ゲーム事業
アニメ、コミック、ゲームなど、世界中で
人気の高いIPを原作とした
モバイルオンラインゲームを国内外に展開。
現在155の国と地域で配信
その他:
スマートフォン関連のアプリケーション、
サービス及びサーバーインフラの企画、
開発、提供、新規事業開拓など
会社紹介:KLab株式会社(クラブ)
? KLab Inc. 2022
WSNet2の紹介
? KLab Inc. 2022
● 常時接続、クライアント同士が双方向通信
● 同じステージ(部屋)を同時に遊ぶ
? オンライン対戦、協力プレイなど
リアルタイム通信とは
ステージ
? KLab Inc. 2022
※PhotonはExit Gamesの製品です
?久保帯人/集英社?テレビ東京?dentsu?ぴえろ ?高橋陽一/集英社 ?高橋陽一/集英社?テレビ東京?エノキフィルム ?KLabGames
リアルタイム通信の利用
Photon (PUN)※
その他自社製
WSNet
(WSNet2の前身)
? KLab Inc. 2022
● サーバを介してメッセージを同期
● 特徴
○ WebSocketベース
○ C#クライアントライブラリ
■ (Unity/.NET)
○ 自動再接続、メッセージ再送
○ 柔軟な部屋検索
○ 数十万人規模の観戦
WSNet2について
? KLab Inc. 2022
● 向いているゲーム
○ パズルゲーム、戦略ゲームなど
■ メッセージの順序や整合性を重視するもの
● 向いていないゲーム
○ アクションゲームなど
■ 処理順序よりもリアルタイム性を重視するもの
WSNet2について
? KLab Inc. 2022
なぜ自社開発したか
? KLab Inc. 2022
なぜ自社開発したか
● 技術的な挑戦
? 自社でも技術をもっておきたい
● モバイルオンラインゲームでの課題
? 一時的な切断への対応
? 複雑な検索条件での入室
? KLab Inc. 2022
● モバイル端末では一時的な切断がよくある
○ WiFi?モバイル回線の切り替わり
○ トンネル?地下鉄などの一時的な圏外
課題:一時的な切断
? KLab Inc. 2022
● モバイル端末では一時的な切断がよくある
○ WiFi?モバイル回線の切り替わり
○ トンネル?地下鉄などの一時的な圏外
課題:一時的な切断
ネットワークから切断しました
この試合は敗北になります
通信エラー
OK
? KLab Inc. 2022
接続で入室、切断したら退室
● サーバの実装がシンプル
● 一時的な切断で退室してしまう
? 再入室できたとしても退室中のメッセージが欠落
よくある実装
入室 退室 再入室 退室
? KLab Inc. 2022
● 入室状態と接続状態を別々に管理
? 切断しても退室にしない
? 切断中のメッセージは再接続時に再送
? ゲームアプリは切断?再接続を感知しない
WSNet2の実装
接続 切断 再接続 切断
入室 退室
再送
退室リクエスト
入室成功
? KLab Inc. 2022
● 柔軟なマッチメイキング
? ゲーム仕様に合わせた条件指定
○ 例:パラメータが近い(範囲指定)
○ 例:募集開始1分以内はフレンドのみ、以降は誰でも
● 観戦のための検索
? すでにマッチング済みの部屋の検索
課題:複雑な検索条件での入室
? KLab Inc. 2022
部屋一覧を取得してクライアント側で選択
● クライアントの負荷が高い
● 通信量が多い
● 2回リクエストが必要
よくある実装その1
Real
time
Room 入室
? KLab Inc. 2022
部屋の状態をAPIサーバに同期
APIサーバで部屋を決定
● 構成が複雑
● 同期のタイムラグ
● 2回リクエストが必要
よくある実装その2
API
Room 入室
Real
time
Room
? KLab Inc. 2022
回線速度?端末スペックによる有利不利
● 椅子取りゲームなマッチング
? 報酬の良いステージなど
● 早い端末が埋めてしまう
? 遅い端末は入れない
2回リクエストの弊害
Room
Room
Room
Room
? KLab Inc. 2022
回線速度?端末スペックによる有利不利
● 椅子取りゲームなマッチング
? 報酬の良いステージなど
● 早い端末が埋めてしまう
? 遅い端末は入れない
2回リクエストの弊害
Room
Room
Room
Room
? KLab Inc. 2022
回線速度?端末スペックによる有利不利
● 椅子取りゲームなマッチング
? 報酬の良いステージなど
● 早い端末が埋めてしまう
? 遅い端末は入れない
2回リクエストの弊害
Room
Room
Room
? KLab Inc. 2022
回線速度?端末スペックによる有利不利
● 椅子取りゲームなマッチング
? 報酬の良いステージなど
● 早い端末が埋めてしまう
? 遅い端末は入れない
2回リクエストの弊害
Room
? KLab Inc. 2022
● なぜ2回必要だったか
? 複雑な検索条件を実現するため
● 複雑な検索と入室を1リクエストで完結したい
? 公平なマッチメイキング
2回リクエストの弊害
? KLab Inc. 2022
● 1リクエストで検索から入室まで可能に
? 接続を待たずに入室確定
? 複雑な条件での検索に対応
○ 「KLabTechBook Vol.9」で少し紹介
○ https://www.klab.com/jp/blog/tech/2022/tbf12.html
○ 電子版無料頒布中
WSNet2の実装
? KLab Inc. 2022
モバイルオンラインゲームでの課題
● 一時的な切断への対応
? 自動再接続とメッセージの再送
● 複雑な検索条件での入室
? 複雑な条件の指定に対応
? 1リクエストで検索から入室まで可能に
まとめ:なぜ自社開発したか
? KLab Inc. 2022
大規模観戦への対応
? KLab Inc. 2022
eスポーツへの取り組み
キャプテン翼?たたかえドリームチーム?
世界大会「Dream Championship」
● 2019年より毎年開催
● 2022年
? 12/10(土)?11(日)
? 決勝トーナメント開催予定
?高橋陽一/集英社 ?高橋陽一/集英社?テレビ東京?エノキフィルム ?KLabGames
? KLab Inc. 2022
● eスポーツでは観戦も重要
● 数万?数十万人規模の観戦を実現したい
よくある実現方法
● 動画配信サービスの利用
● 観戦クライアントも部屋に接続
大規模観戦
? KLab Inc. 2022
● メリット
? 百万人を越える同時視聴が可能
? 様々な環境で観戦できる
● デメリット
? 遅延がある
? 一方向の配信
動画配信サービスの利用
Room
? KLab Inc. 2022
● メリット
? 双方向通信
? 遅延なし
● デメリット
? 接続数が限られる
○ 数百人が限度
? アプリからしか接続できない
観戦クライアントも部屋に接続
Room
? KLab Inc. 2022
● 観戦クライアントも部屋に接続
● Hubサーバ経由の接続もサポート
? 部屋への接続数を抑制
? 双方向通信
WSNet2での大規模観戦
Hub
Hub
Room
? KLab Inc. 2022
部屋とクライアントで特別処理なし
● 部屋サーバとの接続
? 観戦クライアントとして入室
● クライアントとの接続
? 部屋サーバのように待ち受け
? クライアントは部屋同様に観戦入室
Hubサーバの仕組み
Hub
観戦入室
観戦入室 観戦入室
Room
? KLab Inc. 2022
● 同時1万部屋20万観戦を達成
? 部屋サーバ
○ c5.xlarge 5台 (vCPU 4論理コア@3GHz、メモリ 8GiB)
? 約2000部屋/台 (3クライアント/部屋)
? 約6000クライアント/台
? Hubサーバ
○ c5.xlarge 35台
? 約5800クライアント/台
負荷試験結果
? KLab Inc. 2022
Hubサーバ経由の接続もサポート
● 双方向通信を維持
● 数十万人規模にも対応
● 部屋とクライアントはシンプルなまま
まとめ:大規模観戦への対応
? KLab Inc. 2022
チート対策の工夫
? KLab Inc. 2022
今日紹介する工夫
● ユーザ認証
● サーバサイドゲームロジック
チート対策の工夫
? KLab Inc. 2022
● 防ぎたいチート
? 他ユーザへのなりすまし
? botによる接続
● 実装の課題
? WSNet2は独立したシステム
? APIサーバと同じユーザ認証をしたい
ユーザ認証
? KLab Inc. 2022
APIサーバからユーザ情報を同期
1. ログインAPI呼び出し
? ユーザ情報を伝える
2. 入室リクエスト
? ユーザ情報を使って認証
よくある実装その1
API
Real
time
Login
User
? KLab Inc. 2022
APIサーバからユーザ情報を同期
1. ログインAPI呼び出し
? ユーザ情報を伝える
2. 入室リクエスト
? ユーザ情報を使って認証
よくある実装その1
API
入室
Real
time
User
? KLab Inc. 2022
APIサーバからユーザ情報を同期
● 問題点
? ユーザ情報の保存が必要
よくある実装その1
API
入室
Real
time
User
? KLab Inc. 2022
アクセス時にAPIサーバに問い合わせ
1. 入室リクエスト
2. APIサーバに問い合わせ
? APIサーバが認証
よくある実装その2
API
Real
time
入室
問い合わせ
? KLab Inc. 2022
アクセス時にAPIサーバに問い合わせ
● 問題点
? 入室に時間がかかる
よくある実装その2
API
Real
time
入室
問い合わせ
? KLab Inc. 2022
APIサーバと通信しない方法
1. 事前に共通鍵を配置
2. 認証情報要求
? 鍵でハッシュを付加
3. 認証情報を付けて入室
? 鍵で認証情報を検証
WSNet2での実装
API
Real
time
? KLab Inc. 2022
APIサーバと通信しない方法
1. 事前に共通鍵を配置
2. 認証情報要求
? 鍵でハッシュを付加
3. 認証情報を付けて入室
? 鍵で認証情報を検証
WSNet2での実装
API
Real
time
Auth
Data
? KLab Inc. 2022
APIサーバと通信しない方法
1. 事前に共通鍵を配置
2. 認証情報要求
? 鍵でハッシュを付加
3. 認証情報を付けて入室
? 鍵で認証情報を検証
WSNet2での実装
API
Real
time
入室
Auth
Data
? KLab Inc. 2022
APIサーバと通信しない方法
● 認証情報が正しいかで判定
? APIサーバで生成したもの
? APIサーバで認証済み
WSNet2での実装
API
Real
time
入室
Auth
Data
? KLab Inc. 2022
● ユーザ情報の保存が不要
● 入室時にAPI通信も不要
● APIサーバで認証されたことを確認できる
WSNet2での認証
? KLab Inc. 2022
今日紹介する工夫
● ユーザ認証
● サーバサイドゲームロジック
チート対策の工夫
? KLab Inc. 2022
● クライアントのロジック改ざん
? 他のプレイヤーにも影響
● サーバサイドは改ざんされない
アプリ改ざんによるチート
Logic
? KLab Inc. 2022
● クライアントのロジック改ざん
? 他のプレイヤーにも影響
● サーバサイドは改ざんされない
アプリ改ざんによるチート
Logic
?
? KLab Inc. 2022
● 防ぎたいチート
? アプリ改ざんによるゲームロジック改ざん
● 実装の課題
? ロジックコードの二重管理を避けたい
○ オフラインプレイと同じ実装を使いたい
? 独自サーバの実装は大変
サーバサイドゲームロジック
? KLab Inc. 2022
● ロジックプログラムが直接接続を受け付ける
課題
● 実装が大変
? 接続管理を自前実装
○ WSNet2等が解決している部分
よくある実装:独自サーバ
Logic
? KLab Inc. 2022
● ロジックプログラムもクライアント
? ゲームマスター役のクライアント
? プレイヤーと同様に入室
処理の流れ
1. プレイヤーは入力をマスターに送信
2. 処理結果を全プレイヤーに送信
マスタークライアント方式
Master
Room
? KLab Inc. 2022
● ロジックプログラムもクライアント
? ゲームマスター役のクライアント
? プレイヤーと同様に入室
処理の流れ
1. プレイヤーは入力をマスターに送信
2. 処理結果を全プレイヤーに送信
マスタークライアント方式
Master
Room
? KLab Inc. 2022
● ロジックプログラムもクライアント
? ゲームマスター役のクライアント
? プレイヤーと同様に入室
処理の流れ
1. プレイヤーは入力をマスターに送信
2. 処理結果を全プレイヤーに送信
マスタークライアント方式
Master
Room
? KLab Inc. 2022
● リアルタイム通信システムを利用できる
? 接続管理?通信まわりを任せられる
● クライアントアプリと同じコードを使いやすい
? 通信の実装方法はクライアントアプリと同じ
? 同じ言語、同じライブラリが使える
マスタークライアント方式の利点
? KLab Inc. 2022
● .NETアプリとして実装できる
○ Unityヘッドレスモードより省オーバーヘッド
○ C#なのでUnityと同一のコードを利用できる
● 通信遅延を減らせる
○ WSNet2と近い場所で実行できる
■ AWSの同一リージョンなど
WSNet2での利点
? KLab Inc. 2022
● ユーザ認証
? APIサーバと通信しない方法
● サーバサイドゲームロジック
? マスタークライアント方式
まとめ:チート対策の工夫
? KLab Inc. 2022
まとめ
? KLab Inc. 2022
● なぜ自社開発したか
? 自動再接続による一時的な切断への対応
? 複雑な検索条件でも1リクエストで入室
● 大規模観戦への対応
? Hubサーバ経由の接続のサポート
● チート対策の工夫
? APIサーバと通信しないユーザ認証
? マスタークライアント方式のサーバサイドゲームロジック
まとめ
? KLab Inc. 2022
● 話せなかったこと
○ WSNet2サーバの内部実装、負荷対策
○ C#クライアントライブラリの工夫
○ 独自シリアライズフォーマット
○ 通信改ざん対策
○ ロギング
○ 部屋情報閲覧ツール
まとめ

More Related Content

モバイルオンラインゲームでの大規模観戦とチート対策 ?自社製リアルタイム通信システム「WSNet2」の事例?

  • 1. ? KLab Inc. 2022 モバイルオンラインゲームでの大規模観 戦とチート対策
  • 2. ? KLab Inc. 2022 自社製リアルタイム通信システム 「WSNet2」 OSSとして公開しました https://github.com/KLab/wsnet2 告知
  • 3. ? KLab Inc. 2022 今日のお話 ● 自己紹介?会社紹介 ● WSNet2の紹介 ● なぜ自社開発したか ● 数万人規模の観戦への対応 ● チート対策の工夫
  • 4. ? KLab Inc. 2022 自己紹介 牧内大輔 KLab株式会社 エンジニアリング本部サーバサイドG 対外発表 ● Go Conference ? 「型パラメータが使えるようになったのでLINQを実装してみた」 他 OSS ● EMLauncher (https://github.com/KLab/emlauncher) ● gozxing (https://github.com/makiuchi-d/gozixing) 他
  • 5. ? KLab Inc. 2022 ミッション:「世界と自分をワクワクさせろ」 ビジョン:「エンターテインメントで、世界中のユーザーをひとつにつなげる」 社会に感動と喜びを提供できるような、サービス?技術を創造しています。 設立 2000年8月1日 資本金 53億6364万円(2022年10月末現在) 株式公開市場 東京証券取引所?プライム市場(3656) 代表者 代表取締役社長CEO 森田 英克 代表取締役副会長 五十嵐洋介 所在地 本社(東京都港区、六本木ヒルズ森タワー) 大阪事業所、福岡事業所、仙台事業所 主要関連会社 株式会社BLOCKSMITH&Co. 株式会社グローバルギア 海外拠点 可来软件开发(上海)有限公司 (KLab China Inc.) グループ従業員数 正社員 553名(2022年9月末時点) 主力:ゲーム事業 アニメ、コミック、ゲームなど、世界中で 人気の高いIPを原作とした モバイルオンラインゲームを国内外に展開。 現在155の国と地域で配信 その他: スマートフォン関連のアプリケーション、 サービス及びサーバーインフラの企画、 開発、提供、新規事業開拓など 会社紹介:KLab株式会社(クラブ)
  • 6. ? KLab Inc. 2022 WSNet2の紹介
  • 7. ? KLab Inc. 2022 ● 常時接続、クライアント同士が双方向通信 ● 同じステージ(部屋)を同時に遊ぶ ? オンライン対戦、協力プレイなど リアルタイム通信とは ステージ
  • 8. ? KLab Inc. 2022 ※PhotonはExit Gamesの製品です ?久保帯人/集英社?テレビ東京?dentsu?ぴえろ ?高橋陽一/集英社 ?高橋陽一/集英社?テレビ東京?エノキフィルム ?KLabGames リアルタイム通信の利用 Photon (PUN)※ その他自社製 WSNet (WSNet2の前身)
  • 9. ? KLab Inc. 2022 ● サーバを介してメッセージを同期 ● 特徴 ○ WebSocketベース ○ C#クライアントライブラリ ■ (Unity/.NET) ○ 自動再接続、メッセージ再送 ○ 柔軟な部屋検索 ○ 数十万人規模の観戦 WSNet2について
  • 10. ? KLab Inc. 2022 ● 向いているゲーム ○ パズルゲーム、戦略ゲームなど ■ メッセージの順序や整合性を重視するもの ● 向いていないゲーム ○ アクションゲームなど ■ 処理順序よりもリアルタイム性を重視するもの WSNet2について
  • 11. ? KLab Inc. 2022 なぜ自社開発したか
  • 12. ? KLab Inc. 2022 なぜ自社開発したか ● 技術的な挑戦 ? 自社でも技術をもっておきたい ● モバイルオンラインゲームでの課題 ? 一時的な切断への対応 ? 複雑な検索条件での入室
  • 13. ? KLab Inc. 2022 ● モバイル端末では一時的な切断がよくある ○ WiFi?モバイル回線の切り替わり ○ トンネル?地下鉄などの一時的な圏外 課題:一時的な切断
  • 14. ? KLab Inc. 2022 ● モバイル端末では一時的な切断がよくある ○ WiFi?モバイル回線の切り替わり ○ トンネル?地下鉄などの一時的な圏外 課題:一時的な切断 ネットワークから切断しました この試合は敗北になります 通信エラー OK
  • 15. ? KLab Inc. 2022 接続で入室、切断したら退室 ● サーバの実装がシンプル ● 一時的な切断で退室してしまう ? 再入室できたとしても退室中のメッセージが欠落 よくある実装 入室 退室 再入室 退室
  • 16. ? KLab Inc. 2022 ● 入室状態と接続状態を別々に管理 ? 切断しても退室にしない ? 切断中のメッセージは再接続時に再送 ? ゲームアプリは切断?再接続を感知しない WSNet2の実装 接続 切断 再接続 切断 入室 退室 再送 退室リクエスト 入室成功
  • 17. ? KLab Inc. 2022 ● 柔軟なマッチメイキング ? ゲーム仕様に合わせた条件指定 ○ 例:パラメータが近い(範囲指定) ○ 例:募集開始1分以内はフレンドのみ、以降は誰でも ● 観戦のための検索 ? すでにマッチング済みの部屋の検索 課題:複雑な検索条件での入室
  • 18. ? KLab Inc. 2022 部屋一覧を取得してクライアント側で選択 ● クライアントの負荷が高い ● 通信量が多い ● 2回リクエストが必要 よくある実装その1 Real time Room 入室
  • 19. ? KLab Inc. 2022 部屋の状態をAPIサーバに同期 APIサーバで部屋を決定 ● 構成が複雑 ● 同期のタイムラグ ● 2回リクエストが必要 よくある実装その2 API Room 入室 Real time Room
  • 20. ? KLab Inc. 2022 回線速度?端末スペックによる有利不利 ● 椅子取りゲームなマッチング ? 報酬の良いステージなど ● 早い端末が埋めてしまう ? 遅い端末は入れない 2回リクエストの弊害 Room Room Room Room
  • 21. ? KLab Inc. 2022 回線速度?端末スペックによる有利不利 ● 椅子取りゲームなマッチング ? 報酬の良いステージなど ● 早い端末が埋めてしまう ? 遅い端末は入れない 2回リクエストの弊害 Room Room Room Room
  • 22. ? KLab Inc. 2022 回線速度?端末スペックによる有利不利 ● 椅子取りゲームなマッチング ? 報酬の良いステージなど ● 早い端末が埋めてしまう ? 遅い端末は入れない 2回リクエストの弊害 Room Room Room
  • 23. ? KLab Inc. 2022 回線速度?端末スペックによる有利不利 ● 椅子取りゲームなマッチング ? 報酬の良いステージなど ● 早い端末が埋めてしまう ? 遅い端末は入れない 2回リクエストの弊害 Room
  • 24. ? KLab Inc. 2022 ● なぜ2回必要だったか ? 複雑な検索条件を実現するため ● 複雑な検索と入室を1リクエストで完結したい ? 公平なマッチメイキング 2回リクエストの弊害
  • 25. ? KLab Inc. 2022 ● 1リクエストで検索から入室まで可能に ? 接続を待たずに入室確定 ? 複雑な条件での検索に対応 ○ 「KLabTechBook Vol.9」で少し紹介 ○ https://www.klab.com/jp/blog/tech/2022/tbf12.html ○ 電子版無料頒布中 WSNet2の実装
  • 26. ? KLab Inc. 2022 モバイルオンラインゲームでの課題 ● 一時的な切断への対応 ? 自動再接続とメッセージの再送 ● 複雑な検索条件での入室 ? 複雑な条件の指定に対応 ? 1リクエストで検索から入室まで可能に まとめ:なぜ自社開発したか
  • 27. ? KLab Inc. 2022 大規模観戦への対応
  • 28. ? KLab Inc. 2022 eスポーツへの取り組み キャプテン翼?たたかえドリームチーム? 世界大会「Dream Championship」 ● 2019年より毎年開催 ● 2022年 ? 12/10(土)?11(日) ? 決勝トーナメント開催予定 ?高橋陽一/集英社 ?高橋陽一/集英社?テレビ東京?エノキフィルム ?KLabGames
  • 29. ? KLab Inc. 2022 ● eスポーツでは観戦も重要 ● 数万?数十万人規模の観戦を実現したい よくある実現方法 ● 動画配信サービスの利用 ● 観戦クライアントも部屋に接続 大規模観戦
  • 30. ? KLab Inc. 2022 ● メリット ? 百万人を越える同時視聴が可能 ? 様々な環境で観戦できる ● デメリット ? 遅延がある ? 一方向の配信 動画配信サービスの利用 Room
  • 31. ? KLab Inc. 2022 ● メリット ? 双方向通信 ? 遅延なし ● デメリット ? 接続数が限られる ○ 数百人が限度 ? アプリからしか接続できない 観戦クライアントも部屋に接続 Room
  • 32. ? KLab Inc. 2022 ● 観戦クライアントも部屋に接続 ● Hubサーバ経由の接続もサポート ? 部屋への接続数を抑制 ? 双方向通信 WSNet2での大規模観戦 Hub Hub Room
  • 33. ? KLab Inc. 2022 部屋とクライアントで特別処理なし ● 部屋サーバとの接続 ? 観戦クライアントとして入室 ● クライアントとの接続 ? 部屋サーバのように待ち受け ? クライアントは部屋同様に観戦入室 Hubサーバの仕組み Hub 観戦入室 観戦入室 観戦入室 Room
  • 34. ? KLab Inc. 2022 ● 同時1万部屋20万観戦を達成 ? 部屋サーバ ○ c5.xlarge 5台 (vCPU 4論理コア@3GHz、メモリ 8GiB) ? 約2000部屋/台 (3クライアント/部屋) ? 約6000クライアント/台 ? Hubサーバ ○ c5.xlarge 35台 ? 約5800クライアント/台 負荷試験結果
  • 35. ? KLab Inc. 2022 Hubサーバ経由の接続もサポート ● 双方向通信を維持 ● 数十万人規模にも対応 ● 部屋とクライアントはシンプルなまま まとめ:大規模観戦への対応
  • 36. ? KLab Inc. 2022 チート対策の工夫
  • 37. ? KLab Inc. 2022 今日紹介する工夫 ● ユーザ認証 ● サーバサイドゲームロジック チート対策の工夫
  • 38. ? KLab Inc. 2022 ● 防ぎたいチート ? 他ユーザへのなりすまし ? botによる接続 ● 実装の課題 ? WSNet2は独立したシステム ? APIサーバと同じユーザ認証をしたい ユーザ認証
  • 39. ? KLab Inc. 2022 APIサーバからユーザ情報を同期 1. ログインAPI呼び出し ? ユーザ情報を伝える 2. 入室リクエスト ? ユーザ情報を使って認証 よくある実装その1 API Real time Login User
  • 40. ? KLab Inc. 2022 APIサーバからユーザ情報を同期 1. ログインAPI呼び出し ? ユーザ情報を伝える 2. 入室リクエスト ? ユーザ情報を使って認証 よくある実装その1 API 入室 Real time User
  • 41. ? KLab Inc. 2022 APIサーバからユーザ情報を同期 ● 問題点 ? ユーザ情報の保存が必要 よくある実装その1 API 入室 Real time User
  • 42. ? KLab Inc. 2022 アクセス時にAPIサーバに問い合わせ 1. 入室リクエスト 2. APIサーバに問い合わせ ? APIサーバが認証 よくある実装その2 API Real time 入室 問い合わせ
  • 43. ? KLab Inc. 2022 アクセス時にAPIサーバに問い合わせ ● 問題点 ? 入室に時間がかかる よくある実装その2 API Real time 入室 問い合わせ
  • 44. ? KLab Inc. 2022 APIサーバと通信しない方法 1. 事前に共通鍵を配置 2. 認証情報要求 ? 鍵でハッシュを付加 3. 認証情報を付けて入室 ? 鍵で認証情報を検証 WSNet2での実装 API Real time
  • 45. ? KLab Inc. 2022 APIサーバと通信しない方法 1. 事前に共通鍵を配置 2. 認証情報要求 ? 鍵でハッシュを付加 3. 認証情報を付けて入室 ? 鍵で認証情報を検証 WSNet2での実装 API Real time Auth Data
  • 46. ? KLab Inc. 2022 APIサーバと通信しない方法 1. 事前に共通鍵を配置 2. 認証情報要求 ? 鍵でハッシュを付加 3. 認証情報を付けて入室 ? 鍵で認証情報を検証 WSNet2での実装 API Real time 入室 Auth Data
  • 47. ? KLab Inc. 2022 APIサーバと通信しない方法 ● 認証情報が正しいかで判定 ? APIサーバで生成したもの ? APIサーバで認証済み WSNet2での実装 API Real time 入室 Auth Data
  • 48. ? KLab Inc. 2022 ● ユーザ情報の保存が不要 ● 入室時にAPI通信も不要 ● APIサーバで認証されたことを確認できる WSNet2での認証
  • 49. ? KLab Inc. 2022 今日紹介する工夫 ● ユーザ認証 ● サーバサイドゲームロジック チート対策の工夫
  • 50. ? KLab Inc. 2022 ● クライアントのロジック改ざん ? 他のプレイヤーにも影響 ● サーバサイドは改ざんされない アプリ改ざんによるチート Logic
  • 51. ? KLab Inc. 2022 ● クライアントのロジック改ざん ? 他のプレイヤーにも影響 ● サーバサイドは改ざんされない アプリ改ざんによるチート Logic ?
  • 52. ? KLab Inc. 2022 ● 防ぎたいチート ? アプリ改ざんによるゲームロジック改ざん ● 実装の課題 ? ロジックコードの二重管理を避けたい ○ オフラインプレイと同じ実装を使いたい ? 独自サーバの実装は大変 サーバサイドゲームロジック
  • 53. ? KLab Inc. 2022 ● ロジックプログラムが直接接続を受け付ける 課題 ● 実装が大変 ? 接続管理を自前実装 ○ WSNet2等が解決している部分 よくある実装:独自サーバ Logic
  • 54. ? KLab Inc. 2022 ● ロジックプログラムもクライアント ? ゲームマスター役のクライアント ? プレイヤーと同様に入室 処理の流れ 1. プレイヤーは入力をマスターに送信 2. 処理結果を全プレイヤーに送信 マスタークライアント方式 Master Room
  • 55. ? KLab Inc. 2022 ● ロジックプログラムもクライアント ? ゲームマスター役のクライアント ? プレイヤーと同様に入室 処理の流れ 1. プレイヤーは入力をマスターに送信 2. 処理結果を全プレイヤーに送信 マスタークライアント方式 Master Room
  • 56. ? KLab Inc. 2022 ● ロジックプログラムもクライアント ? ゲームマスター役のクライアント ? プレイヤーと同様に入室 処理の流れ 1. プレイヤーは入力をマスターに送信 2. 処理結果を全プレイヤーに送信 マスタークライアント方式 Master Room
  • 57. ? KLab Inc. 2022 ● リアルタイム通信システムを利用できる ? 接続管理?通信まわりを任せられる ● クライアントアプリと同じコードを使いやすい ? 通信の実装方法はクライアントアプリと同じ ? 同じ言語、同じライブラリが使える マスタークライアント方式の利点
  • 58. ? KLab Inc. 2022 ● .NETアプリとして実装できる ○ Unityヘッドレスモードより省オーバーヘッド ○ C#なのでUnityと同一のコードを利用できる ● 通信遅延を減らせる ○ WSNet2と近い場所で実行できる ■ AWSの同一リージョンなど WSNet2での利点
  • 59. ? KLab Inc. 2022 ● ユーザ認証 ? APIサーバと通信しない方法 ● サーバサイドゲームロジック ? マスタークライアント方式 まとめ:チート対策の工夫
  • 60. ? KLab Inc. 2022 まとめ
  • 61. ? KLab Inc. 2022 ● なぜ自社開発したか ? 自動再接続による一時的な切断への対応 ? 複雑な検索条件でも1リクエストで入室 ● 大規模観戦への対応 ? Hubサーバ経由の接続のサポート ● チート対策の工夫 ? APIサーバと通信しないユーザ認証 ? マスタークライアント方式のサーバサイドゲームロジック まとめ
  • 62. ? KLab Inc. 2022 ● 話せなかったこと ○ WSNet2サーバの内部実装、負荷対策 ○ C#クライアントライブラリの工夫 ○ 独自シリアライズフォーマット ○ 通信改ざん対策 ○ ロギング ○ 部屋情報閲覧ツール まとめ