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

【TiDB User Day2025】リリース時のアクセス急増をいかにしてノーメンテで乗り越え...

Avatar for Cygames Cygames PRO
October 09, 2025

【TiDB User Day2025】リリース時のアクセス急増をいかにしてノーメンテで乗り越えたか 〜『Shadowverse: Worlds Beyond』におけるTiDB採用のゲームサーバー設計〜

2025/10/03 TiDB User Day2025

Avatar for Cygames

Cygames PRO

October 09, 2025
Tweet

More Decks by Cygames

Other Decks in Technology

Transcript

  1. 1/59 TiDB User Day 2025 リリース時のアクセス急増をいかにしてノーメンテで乗り越えたか 〜『Shadowverse: Worlds Beyond』における TiDB

    採用のゲームサーバー設計 〜 株式会社Cygames サーバーサイド エンジニア/ 青木 淳
  2. 16/59 システム構成図 ALB 内部ALB Fargate (内部APIサーバー) Fargate (APIサーバー) APIサーバー 2種類に分けて運用

    ①クライアントからアクセス可能なAPIサーバー ②内部専用のAPIサーバー ALBを経由して通信 リアルタイム通信サーバー コンテンツ毎にクラスターを分けて運用 クライアントと直接通信 TiDB Cloud 永続性のあるデータを管理 ゲームサーバーとVPCピアリング接続 ElastiCache EC2 (リアルタイム通信 サーバー)
  3. 18/59 従来のRDBMSの問題点 負荷が高くなる → システムスケールが必要 スケールアウトする → メンテナンス時間が必要 メンテ中はサービス停止 →

    ユーザーに迷惑をかける ユーザー増加 → 単一DBでは限界 分割で対応 → システムが複雑化 複雑になる → 運用コストが跳ね上がる さらに負荷が増えたら → もっと複雑に 負荷増加の ジレンマ 複雑化の 悪循環 こんな問題点ありませんか?
  4. 20/59 計画通りにいかない… リリース時の課題点ありませんか? 事前準備もバッチリ!でも想定以上のユーザーが殺到 プロダクトとしては大成功! ...なのにシステムが悲鳴をあげてしまう システムを守るには → メンテナンスで一時停止が必要 嬉しい

    悲鳴の ジレンマ 初回訪問のユーザー → プレイできずに離脱 口コミで広まってる最中に → サービス停止で勢いストップ 一度離れたユーザー → 戻ってくるのは難しい... 機会損失 の連鎖
  5. 31/59 対応例 ①インデックスを使う前にPRIMARY Keyを検討する ②時系列にソートできるランダム文字列であるULIDを使う No カラム名 データ型 1 user_id

    bigint 2 gift_id bigint 3 create_at DateTime No インデックス カラム 1 INDEX user_id No カラム名 データ型 1 user_id bigint 2 ulid char(26) 3 gift_id bigint 4 create_at DateTime プレゼントBOXを管理するテーブル No インデックス カラム 1 PRIMARY KEY user_id, ulid
  6. 33/59 トランザクション分離レベルはREAD COMMITTEDにする トランザクション分離レベル MySQLもTiDBもデフォルトのトランザクション分離レベルは REPEATABLE READだがそれぞれで挙動が異なる トランザクション内でのスナップショットのタイミング ①MySQL =

    Select を実行したとき ②TiDB = トランザクションが開始されたとき MySQLと同じ認識で実装すると、他のコネクションで 更新した値を上書きしてしまう可能性がある
  7. 36/59 スケーラビリティ試験 スケールアウト スケールアップ スケールイン スケールダウン TiDB TiKV TiKVはいずれも問題なし →

    状況に応じてスケール戦略を選択する方針に TiDBの再起動は接続中のコネクションが切断される → 切断後、アプリ側で再接続・再実行が必要 → 確実性をとりサービス稼働中はスケールアウトのみにする方針に
  8. 43/59 12:00 12:15 11:45 11:30 リリース直後 シャドバWB オープン 口コミで 広がっていく

    徐々に流入が始まる 12:00頃~ アクセスが急増 APIリクエスト数 事前告知は【12:00頃】 期待以上の反響!
  9. 44/59 昼のピークタイム① APIサーバーのCPU使用率が 8割近くなったので システムスケールを判断 CPU使用率が急激に増加したので、 スケールアウトで 素早く対応することにした グラフの上り方から1.5倍の台数で 落ち着くと予想

    アクセス急増で システム負荷も高くなる APIサーバーシステム スケールを検討する APIサーバーの スケールアウトを判断 APIサーバーの CPU使用率 11:30 11:45 12:00
  10. 45/59 昼のピークタイム② アクセス急増で システム負荷も高くなる TiDBのシステム スケールを検討する TiDBの スケールアウトを判断 TiDBの CPU使用率

    TiDBのCPU使用率が 8割に近くなったので システムスケールを判断 CPU使用率が急激に増加したため、 スケールアウトで 素早く対応することにした 1.2倍の台数にし、 少しづつ様子を見ることにした 11:30 11:45 12:00
  11. 49/59 夜のピークタイム前① 検証開始 負荷を掛けながら TiKVをスケールアップする ダウンタイム0、エラーもなく スケールアップの確認が出来る TiKVのスケールアップを念のため再試験 目標 ダウンタイム0でTiKVのスケールアップが可能か確認

    エラーなくスケール処理が完了することを確認 手段 負荷試験ツールを使用して継続的に負荷をかける 負荷実行中にTiKVのスケールアップを実施 結果 目標を達成し、スケールアップ準備が完了 夜間の負荷増加に対応可能