【CEDEC2016】想定を遥かに上回るユーザーが殺到した『Fate GO』――ディライトワークスが明かした負荷対策とAzureからAWSへの移行
ディライトワークスのプログラマーの今井守生氏、上野威史氏、ピアレスの田村祐樹社長が「『Fate/Grand Order』における、ディライトワークス流AWS導入&活用術」と題するセッションを8月24日の「CEDEC 2016」で行った。このセッションでは、大人気ゲームアプリ『Fate/Grand Order』におけるMicrosoft AzureからAWSへの移行、そして活用術を具体的かつ実用的に紹介した。
今回は、今井氏の講演を中心にレポートしていこう。氏は、スパイク・チュンソフトなどを経て、2014年にディライトワークスに入社した。『Fate/Grand Order』においては、サーバー関連の業務を担当しているという。API仕様作成とテーブル構造の決定、実装、コードレビューなどを行っているそうだ。
またディライトワークスの紹介も行った。2014年1月に設立されたばかりのスマートフォンゲームの開発会社で、大ヒットタイトル『Fate/Grand Order』を開発・運営している会社として知られている。当初は少人数で開発していたが、従業員数も100名を超える規模に成長した。これ以外にも『バンドやろうぜ!』を9月にもリリースする予定。
まず、『Fate/Grand Order』の開発環境の説明を行った。UnityでC#を使っており、サーバーサイドの開発にもC#を選択した。両方の言語を共通化することで開発の学習コストの低減が見込まれるだけでなく、スクリプト言語よりも高速に処理できることなどを理由としてあげた。
▲開発環境とサーバー構成。当初は、Windows Azureだったが、AWSに移行したとのこと。
▲サーバーの規模感。
ディライトワークスでは、サービス開始当初は、サーバーとクライアントの通信頻度をできるだけ少なくし、負荷を抑える方針だったという。例えば、クエストについては解放条件など色々な判定が入っているが、すべてクライアント側で行った。またバトル中も極力通信を行わないようにした。能動的にユーザーがデータを更新した時のみ通信を行うようにしたそうだ。唯一、フレンド情報は例外的に一定間隔ごとに同期をとっていたという。
しかし、リリース後、想定を大きく上回るアクセスが発生し、メンテナンス入りを余儀なくされた。Windows Azureを使っており、ゲームサーバーは台数増加やスペックアップで対応可能だったが、データベースサーバーがボトルネックになった。スケールアウトにも限界が出ており、処理性能が不足していた状況だった。データベースサーバーのメモリが足りなくなり、スワップが発生し、ユーザーからするととても遊べる状態ではなかった。
そこで、データベースサーバーの性能対策を行った。当時最高スペックのサーバーであるStandardDS14を使ったほか、SQLの発行数を抑えるためのリファクタリング、同じテーブルに複数アクセスしていたものをまとめるほか、一時的なデータはRedisに保存するような処理を行った。この結果、一時的に改善したものの、ユーザー増加にしたがって再び負荷が増えていった。
データベースサーバーの改善のため、AWSに移行することを決定した。処理性能が向上した。一時的に落ち着いたが、今度は海外からの大量の不正アクセスが発生した。具体的に何があったのかというと、アカウントの大量作成によってデータベースにおけるデータ量が非常に多くなる。そして、データベースのメモリが枯渇し、スワップが発生した。これが4月下旬から5月上旬のアクセス障害の原因だった。Redisのコネクションプールが枯渇し、8月11日にもアクセス障害が発生した。
メモリ枯渇の対策として垂直分割を行った。実装、QA、実装という一連のプロセスをわずか3日間で行ったという。NewRelicによるモニタリングを行って原因の究明を行ったところ、MySQLに問題は発生しておらず、.Net(ゲームサーバー側)に問題があることがわかったとのことだった。
ゲーム運営の特徴として、イベントでは常に新しい機能を追加している点にある。常設の新機能も定期的に追加するほか、サーヴァントの個性を際だたせるための特殊な実装もしばしば行っている。ゆえにテーブル構造が頻繁に変わってしまうという。同社では、テーブル構造の変更を簡略化して対応する内製ツールを開発したそうだ。
また、テーブル構造の変更を少なくする取り組みも行った。その一つが汎用フラグの導入だ。クエストやイベントなど様々な種類が存在するマスタデータは、様々なフラグをビットで管理できる汎用的なカラムを用意した。また、クエストや敵データなど特殊処理が必要となるマスタデータについては、JSON形式で汎用的な簡易スクリプトを用意したとのこと。
最後に、「お客様に新鮮な気持ちで遊んでもらうためには、個性豊かなキャラクターを実現するような、機能追加や特殊処理は必須となっている。いずれもテーブル構造を変更するもので、汎用的に実装することが重要だ」と述べて講演をまとめた。
このほか、インフラエンジニアである上野威史氏は直近のインフラ活用事情について講演を行った。CDNの移行やSSLサーバー証明書の短時間での取得などを話した。また、ピアレスの田村祐樹社長は、開発組織の状況を語るとともに、AWSへの移行の理由も語った。大規模アクセスのあるシステムを経験したインフラエンジニアがいなかったことや、数々の困難を自前と、既存のサービスを駆使して乗り越えていったことを語った。
(編集部 木村英彦)
会社情報
- 会社名
- ディライトワークス株式会社
- 設立
- 2014年1月
- 代表者
- 代表取締役 庄司 顕仁