「魔法少女まどか☆マギカ Magia Exedra」におけるバックエンドの技術選定
by
gree_tech
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
「魔法少女まどか☆マギカ Magia Exedra」における バックエンドの技術選定 株式会社WFS エンジニア 清水稔貴 1
Slide 2
Slide 2 text
清水 稔貴 経歴 23/4~ : 新卒入社 23/4 ~ :『SINoALICE』 23/11 ~ :『アサルトリリィ Last Bullet』 24/10 ~ :『魔法少女まどか☆マギカ Magia Exedra』 株式会社WFS サーバーエンジニア 2
Slide 3
Slide 3 text
©2024 Magica Quartet/Aniplex,Magia Exedra Project ©WFS 3
Slide 4
Slide 4 text
©WFS 『魔法少女まどか☆マギカ』シリーズ歴代のシナリオや世界観を追体験! 歴代の魔法少女たちとともに記憶の光を集めながら魔女結界を探索していく ©2024 Magica Quartet/Aniplex,Magia Exedra Project 4
Slide 5
Slide 5 text
本講演について ● 「魔法少女まどか☆マギカ Magia Exedra」ではGoogle Cloudを採用 ○ ポケラボブランドでは初 ○ 2025/3 国内・海外同時リリース ● Google Cloudの採用背景について ● 対応内容について ● 過去運用タイトルに比べて、運用・費用のコストはどう変わったか 5
Slide 6
Slide 6 text
サーバー構成 6
Slide 7
Slide 7 text
7 技術選定する理由 なぜするの?
Slide 8
Slide 8 text
8 技術選定する理由 コストの抑制 コスト = サーバー費用, 人, 運用, 開発...etc
Slide 9
Slide 9 text
9 技術選定する理由 コスト = サーバー費用, 人, 運用, 開発...etc 運用できるの? 開発できるの? 性能は問題ない? コストの抑制
Slide 10
Slide 10 text
Google Cloud採用背景① - 前提ときっかけ ● 技術選定時は「株式会社ポケラボ」 ○ 2025/1に「株式会社WFS」と統合 ○ 今まではGoogle Cloud以外のサービスを用いていた ● 当時WFS内でGoogle Cloud採用のプロダクトが増加 ○ 運用実績のあるプロダクトを参考にできる ○ 「今までのサービス」 or 「Google Cloud」 10
Slide 11
Slide 11 text
Google Cloud採用背景② - 抑制したいコスト 11 ● 過去プロダクトにおける、DB(MySQL)コストの問題 サーバー費用 ● サーバー費用全体の大部分を占める ● ポケラボはGvGのプロダクトが多い ○ リアルタイムバトルが売り ○ バトル用のDBを別で用意
Slide 12
Slide 12 text
Google Cloud採用背景② - 抑制したいコスト 12 運用(人的)コスト ● DBのスペック変更 ○ メンテナンス必須 ○ インフラチームとの連携 ● シャーディング(水平分散)が必須 ○ パフォーマンス向上のため ○ スケールインが大変 サーバー費用 ● サーバー費用全体の大部分を占める ● ポケラボはGvGのプロダクトが多い ○ リアルタイムバトルが売り ○ バトル用のDBを別で用意 ● 過去プロダクトにおける、DB(MySQL)コストの問題
Slide 13
Slide 13 text
13 Cloud Spannerを選定 Google Cloud採用背景② - DBコストの解決策
Slide 14
Slide 14 text
Google Cloud採用背景② - Could Spannerの魅力 ● 簡単なスケーリング ○ CPUやメモリ、ストレージの増減 ■ ノード数の増減(ワンクリック or 自動)で実現 ■ ダウンタイムなし ○ シャーディング ■ トラフィック変化に応じて自動で行う(スプリット分割) 14 node1 node2 nodeX
Slide 15
Slide 15 text
Google Cloud採用背景② - 抑制したいコスト 15 ● 過去プロダクトにおける、DB(MySQL)コストの問題 サーバー費用 ● サーバー費用全体の大部分を占める ● ポケラボはGvGのプロダクトが多い ○ リアルタイムバトルが売り ○ バトル用のDBを別で用意 運用(人的)コスト ● DBのスペック変更 ○ メンテナンス必須 ○ インフラチームとの連携 ● シャーディング(水平分散)が必須 ○ パフォーマンス向上のため ○ スケールインが大変
Slide 16
Slide 16 text
サーバー費用 ● サーバー費用全体の大部分を占める ● ポケラボはGvGのプロダクトが多い ○ リアルタイムバトルが売り ○ バトル用のDBを別で用意 運用(人的)コスト ● DBのスペック変更 ○ メンテナンス必須 ○ インフラチームとの連携 ● シャーディング(水平分散)が必須 ○ パフォーマンス向上のため ○ スケールインが大変 Google Cloud採用背景② - 抑制したいコスト 16 ● 過去プロダクトにおける、DB(MySQL)コストの問題 大幅削減
Slide 17
Slide 17 text
サーバー費用 ● サーバー費用全体の大部分を占める ● ポケラボはGvGのプロダクトが多い ○ リアルタイムバトルが売り ○ バトル用のDBを別で用意 Google Cloud採用背景② - 抑制したいコスト 17 ● 過去プロダクトにおける、DB(MySQL)コストの問題 無駄を抑える 運用(人的)コスト ● DBのスペック変更 ○ メンテナンス必須 ○ インフラチームとの連携 ● シャーディング(水平分散)が必須 ○ パフォーマンス向上のため ○ スケールインが大変 大幅削減
Slide 18
Slide 18 text
18 WFS内の導入実績 + Cloud Spannerによるコスト抑制見込み Google Cloud採用をした理由
Slide 19
Slide 19 text
19 技術選定する理由 コスト = サーバー費用, 人, 運用, 開発...etc 運用できるの? 開発できるの? 性能は問題ない? → WFS内の導入実績 コストの抑制
Slide 20
Slide 20 text
20 技術選定する理由 コスト = サーバー費用, 人, 運用, 開発...etc 運用できるの? 開発できるの? 性能は問題ない? → WFS内の導入実績 コストの抑制
Slide 21
Slide 21 text
21 性能面 ● 「内製ライブラリ + Cloud Spanner 」 で問題なく動作するか 開発面 ● ポケラボ内製ライブラリの改修 ○ 長年の運用実績 ○ Cloud Spanner用に改修 Cloud Spannerを導入するにあたっての課題
Slide 22
Slide 22 text
22 性能面 ● 「内製ライブラリ + Cloud Spanner 」 で問題なく動作するか → 改修後に性能試験を実施 開発面 ● ポケラボ内製ライブラリの改修 ○ 長年の運用実績 ○ Cloud Spanner用に改修 → Cloud Spanner特有の問題 Cloud Spannerを導入するにあたっての課題
Slide 23
Slide 23 text
● ホットスポット ○ あるスプリットにアクセスが集中し、パフォーマンスが低下 ○ スプリットは連続したキーの範囲で作成される ● シーケンシャルなキーを用いると起きやすい 23 内製ライブラリの改修 - spanner特有の問題 pk=1~100 table A (shard1) pk=101~200 ・・・ pk=1001~1100 table A (shard2) table A (shard10)
Slide 24
Slide 24 text
● ホットスポット ○ あるスプリットにアクセスが集中し、パフォーマンスが低下 ○ スプリットは連続したキーの範囲で作成される ● シーケンシャルなキーを用いると起きやすい ○ 例) pk=101~200が頻繁に読み書きされる→shard2にアクセスが集中 24 内製ライブラリの改修 - spanner特有の問題 pk=1~100 table A (shard1) pk=101~200 ・・・ pk=1001~1100 table A (shard2) table A (shard10)
Slide 25
Slide 25 text
● pkにAUTO_INCREMENTを用いているテーブル ○ ある程度の桁数の数値でランダム生成 ● ユーザーに紐づくテーブル ○ userId + マスタIDの複合キーをpkとする ○ 例) ユーザーが所持しているキャラクターのデータ → userId + characterId ● マスタテーブル ○ pkとなるIDは、マスタを作成しているプランナーが決めている ○ app pod(アプリサーバー)起動時に一括で取得してサーバーキャッシュに載せる 25 内製ライブラリの改修 - ホットスポット対応
Slide 26
Slide 26 text
性能検証 - 概要 ● 性能検証のため負荷試験を実施 ○ 内製ライブラリ + Cloud Spannerの性能調査 ○ 改修したライブラリの動作確認 ● リリース時のログインラッシュを想定したシナリオを用意 ○ ログイン→プレゼント受け取り→各種ユーザーデータ取得→ガチャorクエスト周回 26
Slide 27
Slide 27 text
性能検証 - 目標設定 ● 過去プロダクトを参考に目標値を設定 ● シナリオ作成にはJMeterを使用 ○ モニタリング: Grafana ○ ログ調査: Cloud Logging 27 項目 RPS レスポンスタイム エラー率 目標値 15,000 Req/Sec p90: 300ms未満 p95: 400ms未満 < 0.01% (アプリ側のerror含む)
Slide 28
Slide 28 text
性能検証 - 手順 1. 1 pod, 1 ノードで捌けるRPS数を調査 ○ podのCPU使用率が60%になるように、VMインスタンスも調整 2. 目標RPSに対してのpod数を試算 ○ 目標値(1.5万) / 手順1でのRPS 3. 少しずつRPSとpod数を増やして、ノード数を調整 28
Slide 29
Slide 29 text
性能検証 - 結果 29 ● 概ね目標値クリア ○ GKEノードプールのマシンタイプ: c2-standard-16 ○ app pod数: 140 (8 vCPU, 12Gi) ● 加えて、検証過程で多く出ていたCloud Spannerのエラー対応 RPS spanner ノード数 レスポンスタイム エラー率 1.66万 35 p90: 376ms p95: 400ms 0.0002%
Slide 30
Slide 30 text
性能検証 - Transaction was aborted 30 ● トランザクション間の競合によるエラー ○ エラー件数: 480件 / 1000万 req ○ 整合性のための排他制御故に、発生してしまうのは仕方がない ● 1つのトランザクションで複数テーブルにアクセスする時に起きやすい ○ 独自実装した処理 ○ ライブラリのsingle-useでは発生しない → リトライが仕込まれていた ● 独自の実装にもリトライを仕込む ○ エラー件数: 480 → 12件まで減少
Slide 31
Slide 31 text
性能検証 - ホットスポットの監視 ● Key Visualizer ○ 横軸 = 時間 ○ 縦軸 = テーブルのキー(降順) ● 色 = リソース使用の度合い ○ 白くなればなるほどCPUを使用 ● 問題となるようなテーブルは1件 ○ pkのprefixが同じだった 31 Key Visualizerのヒートマップ例
Slide 32
Slide 32 text
32 技術選定する理由 コスト = サーバー費用, 人, 運用, 開発...etc 運用できるの? 開発できるの? 性能は問題ない? → グループ内の導入実績 → 内製ライブラリ改修 → 性能試験 コストの抑制
Slide 33
Slide 33 text
● 運用コストは激減 ○ メンテナンスなし、サーバーエンジニアのみでDBスペック変更可能 ○ シャーディングのスケールイン/アウトの手間もなくなった ■ ホットスポットに注意 ● 通常は少なめのノード数、施策リリース直前にあらかじめ増やす運用 ○ 急激なアクセス増加への対応 ○ 過去プロダクトではやりにくかったこと ○ 施策リリースもメンテナンスなし ● リリース初期から目立った障害なし 33 実績 - 運用
Slide 34
Slide 34 text
● DB費用が約2~3割減 ○ 過去の運営タイトルのリリース後~6ヶ月の費用と比較 ■ ソロ主体のタイトル ■ ユーザー規模は異なるため参考値 ● まどドラの方がユーザー数は多い ● リリース時から比べてDB賃借料は7割まで減 ○ 負荷を日々調査して少しずつスペックを下げる(メンテナンスなし) ○ リリース1ヶ月後には半分ほどに削減 34 実績 - 費用
Slide 35
Slide 35 text
● 国内/海外ともに1リージョンで運用(東京リージョン) ○ 国内に比べてレイテンシは悪化するが問題ないレベル ○ 運用コスト抑制に繋がった ■ 海外用にpodを配置する必要がない → デプロイコスト削減 ■ Cloud Spannerも1インスタンスで運用 → ノードの設定も共通 ● Cloud Logging, Cloud Monitoringなどの活用できるサービスが多い ○ 何も設定しなくても、GKEのpodのログが自動的に送信 35 その他の利点
Slide 36
Slide 36 text
● Cloud SpannerによるDBコスト抑制のため、Google Cloudを採用 ○ きっかけはWFS内での採用実績 ○ サーバー費用と人的コストの問題を解決できる見込み ● Cloud Spanner移行のため、内製ライブラリの改修と性能試験を実行 ○ ポケラボ内製ライブラリをCloud Spanner用に対応 ○ 内製ライブラリ + Cloud Spannerの負荷試験 ● 運用コストは激減。費用も減。 ○ 安定した稼働も続けられている! 36 まとめ
Slide 37
Slide 37 text
ご清聴ありがとうございました 37
Slide 38
Slide 38 text
38