O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

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

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio

Confira estes a seguir

1 de 62 Anúncio

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

Baixar para ler offline

CEDEC+KYUSHU2022の登壇資料です。
http://cedec-kyushu.jp/2022/session/12.html

CEDEC+KYUSHU2022の登壇資料です。
http://cedec-kyushu.jp/2022/session/12.html

Anúncio
Anúncio

Mais Conteúdo rRelacionado

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

Mais de KLab Inc. / Tech (20)

Anúncio

Mais recentes (20)

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

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

×