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

オンラインゲームのシステム全体像 - コロプラ 2026年度 新卒研修

オンラインゲームのシステム全体像 - コロプラ 2026年度 新卒研修

コロプラの2026年度新卒研修で、バックエンドエンジニア向けに実施した「オンラインゲームのシステム全体像」の資料です。
コロプラのゲームを構成するコンポーネントの名前と役割を、VM・GKE・Cloud Run の3つの実行基盤の変遷とあわせて紹介しています。

Avatar for COLOPL Inc.

COLOPL Inc.

October 02, 2026

More Decks by COLOPL Inc.

Other Decks in Technology

Transcript

  1. コロプラのゲームシステム構成 アプリケーションの実行基盤の違いによって3つに分けられる • • • VM ◦ 白猫プロジェクト ◦ 黒猫のウィズ

    Kubernetes (k8s / GKE) ◦ ドラゴンクエストウォーク ◦ フェスバ+ Cloud Run ◦ 神魔狩りのツクヨミ 一番代表的な GKE 環境を例にして説明します! 3
  2. 6

  3. 8

  4. 9

  5. Client • ゲームクライアント ◦ iOS app ◦ Android app ◦

    PC (Steam) ◦ ブラウザ • クライアントエンジニアが主に Unity で作成 • ネットワーク経由でサーバーにアクセス 10
  6. App • • • • • Game API Server バックエンドエンジニアの主戦場

    Client からのリクエストを受け取り、データの取得や更新を行う 開発言語は PHP を利用し、最近は主に Laravel フレームワークを利用 Nginx + PHP-FPM にて動作 12
  7. Img • • • • • Static File Server Unity

    のアセットデータやゲーム内で使用する画像ファイルを提供 /public/static 以下のファイルを返すだけの HTTP サーバーのようなイメージ 最近は Img サーバーは構築せず、AWS の Amazon S3 を利用 クライアントは CDN(後述)経由でデータを取得する 13
  8. CDN • • • • Content Delivery Network 低遅延で高速なコンテンツ配信を実現 Img

    が提供しているデータに対して適用 データ更新時に変更を反映させるための手順が必要になったりするので要注意 ◦ ◦ キャッシュパージ クエリパラメータによるバージョニング 14
  9. Queue • • Queue Worker / Dequeuer 即時性が求められない処理を非同期で処理するサーバー ◦ •

    例:プロフィール情報の更新、ランキング更新、プッシュ通知 「本当の Queue」は RabbitMQ や Cloud Tasks を利用 RabbitMQ 15
  10. KVS • • • • Key-Value 形式でデータを保存 シンプルなデータ構造かつインメモリにデータを保存するので高速 データが揮発することがあるので、主にキャッシュ用途で利用することが多い Redis

    を利用しており、Redis のデータ構造(Sets, Lists, Sorted Sets)など もよく使われる ◦ 例:キャッシュ、ランキング、マッチングの部屋管理 18
  11. GS • Game Server / Realtime Server / Dedicated Game

    Server / PvP Server ◦ • ユーザー間のリアルタイム通信用のサーバー ◦ • 社内だと pvp, dgs, gs と呼称されることが多い PvP や PvE などのリアルタイム通信が求められる場合に用いられる 一緒にプレイするプレイヤーは同じサーバーに接続する 20
  12. 21

  13. 23

  14. 24

  15. Builder • 踏み台サーバー / Bastion サーバー のこと ◦ • •

    コロプラでは歴史的経緯でこの呼び方となっている App や DB, KVS など各種サーバーにアクセスする際のハブとなるサーバー サーバーエンジニアの作業でかなりお世話になるはず 25
  16. Tool • • • Admin Server 管理用の Web アプリケーションが動作しているサーバー プロジェクトの人、CX

    の人、協力会社さんなど運営に携わる人が利用する ◦ ◦ ◦ ◦ • マスターデータの反映 ユーザーの状況確認 統計情報の表示 業務効率化のためのあれこれ 利用者は Google アカウントでログイン ◦ Identity-Aware Proxy 最初に対応するタスクはここかも! 26
  17. Monitoring • • • サービスの状態を常に監視するサービス群 サーバーやアプリケーションの稼働状況、リソース使用率、エラー発生状 況などを監視するためのシステム ◦ Prometheus ▪

    メトリクスの収集・保存 ◦ Grafana ▪ メトリクスの可視化 ◦ Datadog APM ▪ 分散トレースの可視化 異常を検知した際にはアラートを通知し、早期の問題解決に繋げる 28
  18. Logging • 開発環境や本番環境はアプリケーションやシステムのログが一元管理されている ◦ • 主に系統が2種類 ◦ ◦ • 昔は各サーバーに直接接続して確認するなどが必要だった

    Cloud Logging ▪ app のログやミドルウェアのログなど、アプリケーションのログはまずここを確認! ▪ デフォルトの設定では30日でログが消えてしまいます BigQuery ▪ 分析や監査用に保存するログを保存する ▪ 集計が必要なデータは BigQuery に流す アプリケーション開発においてログを確認するのは超重要! ◦ ◦ Logging をうまく使いこなせるようになりましょう! クエリライブラリなどを参考に使い方を学んでみることをお勧めします 29
  19. CI/CD(1/3) • Continuous Integration / Continuous Delivery ◦ ソフトウェア開発プロセスを自動化し、継続的にコードの変更を統合、テスト、デプ ロイするための仕組み

    各プロジェクトは主に GitLab + Spinnaker で運用 • GitLab ◦ ◦ ◦ • コード管理 テストや静的解析の実行 イメージビルド Spinnaker ◦ ◦ リリースプロセスのパイプライン化 GitLab CI と連携してブランチへの push をトリガーにデプロイ 30
  20. CI/CD(2/3) 1 2 3 約1分 デプロイ専用 ブランチ GitLab git push

    deploy/dev1 コンテナをアップロー ド Artifact Registry デプロイしたいマン プッシュトリガーで コンテナをビルド 変更がないか常に監視 6 5 開発: 約1分 本番: 約10分 ポッドの差し替えを指 示 デプロイ完了通知 デプロイしたマン 4 順次に差し替え実施 (注意:新旧混在します) 31
  21. User Search • • • • Full-Text Search Engine 主に

    Tool から利用される Spanner が全ユーザーを跨いだ検索が苦手なので、そこをカバーするためのコ ンポーネントだが、最近は Spanner にも Data Boost や Full Text Search と いった機能が追加されているため、今後場合によっては不要になっていくかも プロジェクトによって異なるが、主に Elasticsearch などが利用されている • • マスターデータ ユーザー一人の詳細情報 • • ユーザー一覧の取得 条件に合致するユーザーの検索 33
  22. 34

  23. 開発環境について みなさんが触る環境にはいくつか種類があって、それぞれ名前がついています。 • prd(本番環境) ◦ • stg(本番準拠) ◦ • 本番展開前にこちらに展開して動作確認をする

    dev(開発環境) ◦ • 運用中のゲームが動作する環境 機能開発中はこちらに展開して機能実装をする local(ローカル環境) ◦ 手元の PC の環境 37
  24. ローカル環境の構成 • • OrbStack ◦ Docker Desktop Alternative ◦ OrbStack

    上でコンテナを動かします Docker Compose ◦ 複数のコンテナを管理するコンテナオーケストレーションツール ◦ 開発に必要な各コンテナを起動します ▪ App ▪ DB ▪ KVS ▪ Queue ▪ User Search 38
  25. VM 環境とは • … GKE 導入(2018年)以前のプロジェクトのことをまとめて VM タイトルと呼んでいます 2014 2016

    2018 2020 2022 2024 © ARMOR PROJECT/BIRD STUDIO/SQUARE ENIX All Rights Reserved. ©COLOPL, Inc. ©MIXI 40
  26. VM 環境でのつらみ • • 運用中のオペレーションコストが高い ◦ 施策リリース時の App 台数の調整 ◦

    ホストエラー発生時の復旧対応 ◦ アプリケーション側での接続先設定の取り回し データベースの運用が大変 ◦ 自分たちで負荷分散の方法を考える必要がある ◦ 簡単にスペックを調整できない ◦ ダウンした時の影響がでかい上に復旧が大変 43
  27. VM 環境でのつらみ • 運用中のオペレーションコストが高い ◦ 施策リリース時の App 台数の調整 ◦ ホストエラー発生時の復旧対応

    ◦ アプリケーション側での接続先設定の取り回し → GKE でオペレーションを自動化! • データベースの運用が大変 ◦ 自分たちで負荷分散の方法を考える必要がある ◦ 簡単にスペックを調整できない ◦ ダウンした時の影響がでかい上に復旧が大変 → Spanner でスケールの悩みを解消! 44
  28. GKE 環境の課題と今後の展望 • GKE のアップグレードが大変問題 ◦ 数ヶ月に一度コントロールプレーンとノードのバージョン更新 ◦ 本来であれば特に何も起こらないはずだが... ◦

    • ▪ 謎の IO 負荷の上昇によりサービス影響 ▪ GKE 側のコンポーネントが謎のエラー なんでも GKE とすると運用中のものを全て上げて回るのも大変 Cloud Run などのより軽量な実行基盤も候補に! ◦ コンテナ化された Web アプリケーションを手軽に動かせるサーバーレス環境 ◦ 神魔狩りのツクヨミで導入 ▪ 外部サイトにアーキテクチャを掲載中! 46