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
COLOPL Inc.
November 28, 2024
Technology
8.7k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
大規模トラフィックを支える ゲームバックエンドの課題と構成の変遷 ~安定したゲーム体験を実現するために~
COLOPL Inc.
November 28, 2024
More Decks by COLOPL Inc.
See All by COLOPL Inc.
実務で動くAIエージェントを作ろう!MCP×Mastraをライブコーディングで実践
colopl
0
350
Cloud Runでコロプラが挑む 生成AI×ゲーム『神魔狩りのツクヨミ』の裏側
colopl
0
2.3k
PHPStan をできる限り高速化してみる
colopl
1
850
コロプラ最新作インフラ構成について
colopl
0
320
Cloud Spanner 導入で実現した快適な開発と運用について
colopl
1
2.4k
コロプラのオンボーディングを採用から語りたい
colopl
7
2.8k
怖くない!ゼロから始めるPHPソースコードコンパイル入門
colopl
1
910
長期運用プロジェクトでのMySQLからTiDB移行の検証
colopl
3
2k
ゲームを支えるバックエンドエンジニアのリアルを公開!
colopl
1
1.9k
Other Decks in Technology
See All in Technology
20260619 私の日常業務での生成 AI 活用
masaruogura
1
230
LayerX コーポレートエンジニアリング室におけるサプライチェーンセキュリティへの取り組み / Supply Chain Security at LayerX Corporate Engineering
yuyatakeyama
2
690
Chainlitで作るお手軽チャットUI
ynt0485
0
280
2026TECHFRESH畢業分享會 - Lightning Talk - 資料也要 CI/CD? 用 Airbyte 自動化資料同步
line_developers_tw
PRO
0
1.3k
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
320
SONiCのLinuxベースを活かしたZabbix監視
sonic
0
230
SONiC Scale-Up Working Group から探る Scale-UpやUltraEthernet機能の実装方法
ebiken
PRO
2
420
入門!AWS Blocks
ysuzuki
1
160
SONiCで構築・運用する生成AI向けパブリッククラウドネットワーク ~実装編~
sonic
0
290
徹底討論!ECS vs EKS!
daitak
2
830
自宅LLMの話
jacopen
1
670
ロボティクスの技術 / Robotics Technology
ks91
PRO
0
110
Featured
See All Featured
Information Architects: The Missing Link in Design Systems
soysaucechin
0
970
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
230
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
290
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.5k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.4k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
200
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Transcript
株式会社コロプラ 大規模トラフィックを支える ゲームバックエンドの課題と構成の変遷 ~安定したゲーム体験を実現するために~ 2024.11.26
仲山 悠也 株式会社コロプラ サーバー基盤グループ LCEチーム バックエンドエンジニア 自己紹介
コロプラについて
コロプラについて Vision 行動指針 エンターテインメントで日常をより楽しく、より素晴らしく Mission
コロプラについて
最新作
本題
アジェンダ 1 スマートフォンゲームの構成について 2 昔のアーキテクチャのお話 3 少し昔のアーキテクチャのお話 4 最近のアーキテクチャのお話
スマートフォンゲームとは スマホやタブレットなどのモバイル端末上で動作するゲーム ▶ 特徴 ► 高い携帯性 ► いつでもどこでも手軽にプレイ可能 ► ソーシャル要素
► 他のプレイヤーとの協力、対戦、交流が可能 ► 継続的なコンテンツ配信 ► インターネット接続を活かして新しいコンテンツを提供
Web アプリケーションとほとんど同じ構造 スマートフォンゲームの主要コンポーネント API サーバー Request Response クライアント 言語:C#
より楽しいゲーム体験を実現するために リアルタイムな通信を実現するための専用のサーバーが存在する場合がある リアルタイムサーバー クライアント 言語:C#
より楽しいゲーム体験を実現するために
より楽しいゲーム体験を実現するために
より楽しいゲーム体験を実現するために ・移動したよ! ・敵を倒した! ・ターンエンド!
より楽しいゲーム体験を実現するために
より楽しいゲーム体験を実現するために
より楽しいゲーム体験を実現するために 専用ゲームサーバー(DGS)
スマートフォンゲームの主要コンポーネント API サーバー Request Response クライアント 言語:C# リアルタイムサーバー(DGS)
具体例
年表 2014 2016 2018 2020 2022 2024 指一本で本格的な アクションゲーム! 現実が
ドラゴンクエストの世界に! シンプル操作で リアルなゴルフ体験! 5分でサクッと チームバトル! モバイルでの リアルタイム対戦!
約10年前のアーキテクチャ
事件発生
スマートフォンゲームのアクセスパターン 新作ローンチ時やイベントリリース時は急激にアクセスが増加
当時よく発生した問題 急激に伸びるユーザー数 データ量及びクエリの増加によるデータベースの負荷の急上昇 データベースが詰まって接続が不安定に...
当時の対応 ▶ 全く同じスキーマの DB インスタンスを後から追加することで対応 ► 時間がない中で、とにかく対応に追われて実施した苦肉の策 ► 本来不要なゲームの設定データなどもまとめて追加
当時の対応 ▶ 全く同じスキーマの DB インスタンスを後から追加することで対応 ► 時間がない中で、とにかく対応に追われて実施した苦肉の策 ► 本来不要なゲームの設定データなどもまとめて追加 ?
API サーバー
当時の対応 ▶ 全く同じスキーマの DB インスタンスを後から追加することで対応 ► 時間がない中で、とにかく対応に追われて実施した苦肉の策 ► 本来不要なゲームの設定データなどもまとめて追加 ▶
シャーディングによる負荷分散 ► 分割数の事前の試算が難しい ► アプリケーションコードの複雑化を招く ► オペレーションコスト増大 後発のゲームタイトルでは...
当時の課題 データベースをなんとかして 運用コストを下げたい!
年表 2018 2020 2014 2016 2022 2024 指一本で本格的な アクションゲーム! 現実が
ドラゴンクエストの世界に! シンプル操作で リアルなゴルフ体験! 5分でサクッと チームバトル! モバイルでの リアルタイム対戦!
約5年前のアーキテクチャ Google Cloud Kubernetes Cluster Monitoring Prometheus Queue Workers GKE
Pods Queue RabbitMQ (VM) Master Data MySQL (VM) Multiple Replicas Cache Memory Store API Gateway Load Balancer KPI Analytics BigQuery Logs Cloud Logging LB Phone Google認証 Cloud IAP Admin Server GKE Pods Visualization Grafana User Search Elasticsearch API Servers GKE Pods Twemproxy LB 管理者 Admin Pubsub Redis User Data Cloud Spanner
実質的に無制限のスケーリング 変更: ユーザーデータに Spanner を採用 ※ Spanner については別のカンファレンスで詳しく話したものがあります Google Cloud
の分散型データベース ▶ ボタンひとつでスケールイン・スケールアウト ► オペレーション、運用にかかるコストの削減 ▶ コード側でシャーディングを意識する必要性が少ない ► アプリケーションコードのメンテナンス性の向上 ▶ ゼロダウンタイム ► コロプラの運用ポリシーと相性良し
変更: ワークロードの実行基盤に GKE を採用 コンテナ型仮想化の台頭 Kubernetes の仕組みに乗ることで • ホストエラー発生時の対応 •
自前のデプロイスクリプトの管理 • 自前のサーバー台数管理システム などから解放され、運用コストがおよそ半分に! また、 Infrastructure as Code を推進することでインフラ構成を文章化し、 運用・管理・オンボーディングなどのコスト削減!
効果 最大規模のタイトルの 安定運用に成功! ここ5年間で大きな サービスダウンはなし!
この頃の社内におけるアーキテクチャ選定の考え Google Cloud + GKE + Spanner は大成功! 今後の新作もこの組み合わせでやっていく!
一方その頃に開発中の新作タイトルは... 対戦! 対戦! 2018 2020 2014 2016 2022 2024 指一本で本格的な
アクションゲーム! 現実が ドラゴンクエストの世界に! シンプル操作で リアルなゴルフ体験! 5分でサクッと チームバトル! モバイルでの リアルタイム対戦!
社内で高まる気運 社内のニーズ 対戦型のゲームをうまく効率よく作っていきたい! 対戦型ゲームの要件 プレイヤーの操作をリアルタイムにゲーム内に反映 帰結 リアルタイムサーバーの活用が重要!
当時リアルタイムサーバーで抱えていた課題 ▶ デプロイが大変 ► プロトコルが常時接続 ► 更新起因で切断されるとゲームがプレイできなくなる ► 何か工夫が必要 ►
サーバー管理が手動 ► 事前にサーバーを用意し、接続先を登録 ► キャパシティプランニングが難しい ▶ なるべくデプロイをしない ► 「リアルタイムサーバーにロジックを入れない」となりがち
当時リアルタイムサーバーで抱えていた課題 ▶ 属人化 ► 高度な専門性を必要とするので、対応者が偏りがち ► チーム内の有識者が都度対応 ▶ 組織としての柔軟性が欠如 ►
個人に知識が集中 ► 進捗が個人の課題解決能力に依存
組織的なアーキテクチャの変更 Realtime Platform Engineering (RTPE) チームが誕生! ▶ リアルタイム通信基盤を支える中心となるチーム ► 高度な専門性でマルチプレイヤーゲームの開発をリード
► 初期からマルチの開発に関わり、ノウハウを蓄積 ► ベストプラクティスの共有などの情報発信 ► 基盤ライブラリの整備 ► ゲームの性質に応じて複数の選択肢を提供 ► 新技術研究 ► PoC(Proof of Concept:概念実証) ► プロトタイピング ※ 気になった方はぜひブースにも遊びに来てください!
年表 指一本で本格的な アクションゲーム! 現実が ドラゴンクエストの世界に! シンプル操作で リアルなゴルフ体験! 5分でサクッと チームバトル! 2022
2024 2014 2016 2018 2020 モバイルでの リアルタイム対戦!
最新のアーキテクチャ
変更: DGS の管理に Agones を採用 • GoogleForGames に含まれるオープンソースプロジェクト • Kubernetes
の拡張で、DGS の管理機能を追加 • カスタムリソース / コントローラー / SDK などを提供 What is Agones? オープンソースで、必要なものがすべて揃った、マルチプレイヤー専用ゲー ムサーバーのスケーリングとオーケストレーションプラットフォームであり、 Kubernetes が動作する場所ならどこでも実行できます。 ※ https://agones.dev/site/
変更: DGS の管理に Agones を採用 クライアント API サーバー リアルタイムサーバー (DGS)
A B C 従来までの動き
変更: DGS の管理に Agones を採用 クライアント API サーバー リアルタイムサーバー (DGS)
A B C ふたりで遊びたい! 従来までの動き
変更: DGS の管理に Agones を採用 クライアント API サーバー リアルタイムサーバー (DGS)
A B C ・稼働中の DGS がある? ・ルールに適している? ・キャパ的に大丈夫? 従来までの動き
変更: DGS の管理に Agones を採用 クライアント API サーバー リアルタイムサーバー (DGS)
A B C C を使って! 従来までの動き
変更: DGS の管理に Agones を採用 クライアント API サーバー リアルタイムサーバー (DGS)
A B C 従来までの動き
変更: DGS の管理に Agones を採用 クライアント API サーバー リアルタイムサーバー (DGS)
A B C ・稼働中の DGS がある? ・ルールに適している? ・キャパ的に大丈夫? 従来までの動き
変更: DGS の管理に Agones を採用 クライアント API サーバー リアルタイムサーバー (DGS)
A B C ・稼働中の DGS がある? ・ルールに適している? ・キャパ的に大丈夫? 従来までの動き 実装が大変!
変更: DGS の管理に Agones を採用 クライアント API サーバー リアルタイムサーバー (DGS)
A B C 従来までの動き
変更: DGS の管理に Agones を採用 クライアント API サーバー リアルタイムサーバー (DGS)
A B C 従来までの動き DGS の管理を肩代わり
変更: DGS の管理に Agones を採用 クライアント API サーバー リアルタイムサーバー (DGS)
A B C Agones 導入後の動き
変更: DGS の管理に Agones を採用 クライアント API サーバー リアルタイムサーバー (DGS)
A B C ふたりで遊びたい! Agones 導入後の動き
変更: DGS の管理に Agones を採用 クライアント API サーバー リアルタイムサーバー (DGS)
A B C DGS ください Agones 導入後の動き
変更: DGS の管理に Agones を採用 クライアント API サーバー リアルタイムサーバー (DGS)
A B C C を割り当てました Agones 導入後の動き
変更: DGS の管理に Agones を採用 クライアント API サーバー リアルタイムサーバー (DGS)
A B C C を使って! Agones 導入後の動き
▶ 自前でサーバーを管理する必要がなくなる ► 用意された API 経由で DGS が確保されて接続先を返してくれる ► 利用された分は自動でプロビジョニング
► 常に一定のサーバーを自動で確保 変更: DGS の管理に Agones を採用 ▶ 運用オペレーションが減る ► Kubernetes の恩恵を丸ごと受けられる ▶ サーバーの状態を管理して柔軟に動作 ► 状態 (Creating, Ready, Allocated...)を管理 ► デプロイ時に使用中の DGS は影響を受けない ► ゲームを楽しんでくれているユーザー様への悪影響を心配しなくて良い
変更: DGS の管理に Agones を採用 クライアント API サーバー リアルタイムサーバー (DGS)
A B C ❓
▶ 対戦型のゲームでは、一緒に遊ぶプレイヤーをどうやって見つけてくるかと いう問題は非常に重要 ► 全然レベル感の違うプレイヤー同士で対戦させられると双方にとって不都合 ► 適切な相手をずっと探し続けて全然遊べないのは困る ▶ マッチングロジックは非常に複雑化しがち ►
レベル、ランク、レーティング、ルール的な制約...etc ▶ これまでは API サーバー(PHP)に実装 ► 仕組み作りから入らないといけないのが辛い ► 密結合な実装により、運用が進むにつれて保守が大変に マッチメイキングの課題
変更: マッチメイキングに Open Match を採用 • こちらも GoogleForGames のオープンソースプロジェクト •
Google と Unity が中心となって発足 • クラウドネイティブなマッチメイキングフレームワーク ◦ Kubernetes 上で動かすことが前提 ◦ マイクロサービスアーキテクチャを採用 ◦ 高い柔軟性を備え、マッチングロジックの実装に集中できる What is Open Match? Open Match は、ゲームに合わせてスケーリング可能な 柔軟なマッチメイキングシステムです。 ※ https://open-match.dev/site/
変更: マッチメイキングに Open Match を採用
変更: マッチメイキングに Open Match を採用 試合したい
変更: マッチメイキングに Open Match を採用 チケット作成
変更: マッチメイキングに Open Match を採用 マッチング対象チケット登録
変更: マッチメイキングに Open Match を採用 定期的にマッチ要求
変更: マッチメイキングに Open Match を採用 トリガー
変更: マッチメイキングに Open Match を採用 チケット要求
変更: マッチメイキングに Open Match を採用 チケット取得
変更: マッチメイキングに Open Match を採用 チケット返却
変更: マッチメイキングに Open Match を採用 マッチ候補リストアップ
変更: マッチメイキングに Open Match を採用 マッチ候補返却
変更: マッチメイキングに Open Match を採用 マッチ候補提出
変更: マッチメイキングに Open Match を採用 評価依頼
変更: マッチメイキングに Open Match を採用 評価結果
変更: マッチメイキングに Open Match を採用 マッチ結果
変更: マッチメイキングに Open Match を採用 マッチ結果返却
変更: マッチメイキングに Open Match を採用 DGS 割り当て
変更: マッチメイキングに Open Match を採用 チケット更新依頼
変更: マッチメイキングに Open Match を採用 チケット更新
変更: マッチメイキングに Open Match を採用 次のリクエストで マッチしたチケットを返却
変更: マッチメイキングに Open Match を採用
変更: マッチメイキングに Open Match を採用 Match Profile の定義 マッチングロジック
変更: マッチメイキングに Open Match を採用 ❓
変更: マッチメイキングに Open Match を採用
変更: マッチメイキングに Open Match を採用 Application (PHP) 5年前
変更: マッチメイキングに Open Match を採用 今
変更: マッチメイキングに Open Match を採用 今 仕組み作りから始める必 要がなくなり、ゲームロ ジックの調整に集中でき るように!
変更: マッチメイキングに Open Match を採用 今 最近の DGS について 仕組み作りから始める必
要がなくなり、ゲームロ ジックの調整に集中でき るように!
変更: リアルタイムサーバーの積極的な活用 ▶ 従来のリアルタイムサーバー ► 受信したメッセージをそのまま他のユーザーに送信 ► リレーサーバー ► なるべくデプロイしたくない
► Agones で解決!
変更: リアルタイムサーバーの積極的な活用 ▶ 最近のリアルタイムサーバー ► 必要に応じてサーバー側でもロジックを持つ ► 一貫性の担保 / 不正検知
/ データ保護などの面でメリットあり 計算
変更: リアルタイムサーバーの積極的な活用 ▶ 最近のリアルタイムサーバー ► 必要に応じてサーバー側でもロジックを持つ ► 一貫性の担保 / 不正検知
/ データ保護などの面でメリットあり ► 用途によって複数の種類の DGS を使い分け
効果 DGS / マッチング の基盤作りから解放! API サーバー DGS DGS 対戦リクエストなど
マッチ依頼 DGS 要求 DGS 割り当て ゲームロジックに 注力できるように!
年表 指一本で本格的な アクションゲーム! 現実が ドラゴンクエストの世界に! シンプル操作で リアルなゴルフ体験! 5分でサクッと チームバトル! 2022
2024 2014 2016 2018 2020 モバイルでの リアルタイム対戦!
今のアーキテクチャの課題と今後の展望 ▶ GKE のアップグレードが大変問題 ► 数ヶ月に一度コントロールプレーンとノードのバージョン更新 ► 本来であれば特に何も起こらないはずだが... ► 謎の
IO 負荷の上昇によりサービス影響 ► GKE 側のコンポーネントが謎のエラー ► なんでも GKE とすると運用中のものを全て上げて回るのも大変 ▶ Cloud Run などのより軽量な実行基盤を検証中 ► 周辺サービスで試験的に導入 ► 運用ノウハウを蓄積し、選択肢の拡大へ
今のアーキテクチャの課題と今後の展望 ▶ Agones ► Kubernetes のバージョンに依存している ► GKE アップグレードに追従しないといけない ►
Counters and Lists 機能を使用してリソース効率の改善 ► モバイルゲームのインフラアーキテクチャ特集にて詳しく紹介 ▶ Open Match ► open-match2 というリポジトリが作られている ► 今後の動きについて要チェック
まとめ 2014 2019 2024 データベースが詰まってしまう... Google Cloud + GKE +
Spanner 構成へ 対戦型ゲームの開発の盛り上がりを受けて... Agones + Open Match + DGS によるマルチ開発 これからも挑戦は続く...
ブースにも遊びにきてね! 共に「新体験」を創る仲間、募集中!