こんにちは。サーバーサイドエンジニアの石田です。
2017年10月8日に開催されたPHPカンファレンス2017にて「グラブル流運用術〜1700万人を満足させるためのシステム構成、PHPプログラムの考え方〜」というタイトルで講演させていただきました。講演にご参加いただいた皆様には、改めて御礼申し上げます。
発表資料は下記になります。
発表した内容について
今回の講演では、大量のアクセスがあるグランブルーファンタジーのシステムを調査し、「グラブルのシステムをもっと早くする!!」という目標に絞り、実際に改修した事例につき具体例をあげながら説明いたしました。
簡単に講演内容をご紹介します。まず、改修する箇所を特定するために、処理の重いAPIはどれか調査しました。バトルのAPIが大きな負荷を与えていることがわかりましたので、バトル中の処理を見直したところ、スキル計算処理がメモリを消費し処理時間も長いと判明しました。
さらにプロファイラを用いて処理を分析し数値を見ると、CSV取得処理のcall数が多く処理時間が長いこともわかりました。そこで具体的な改修箇所を「スキル計算の高速化」と「CSVの取得処理の効率化」に絞り込みました。
そのために中間データのキャッシュ化という方針を立て実際の改修を進めました。
本講演でお伝えしたかったことを一言でまとめると、重い処理はキャッシュ化すると処理を改善できるということに尽きます。高トラフィックのシステムを運用している方なら当たり前に感じる事かもしれませんが、その「当たり前のことを当たり前にやる」Cygamesの文化が少しでも伝われば幸いです。
発表を終えて
CSVの取得処理部分で説明が不足していた部分があり、質問をいただきました。
この場で回答させていただきます。
1. なぜマスターデータの多くはCSVファイルなのか?
「マスタデータは多くのCSVファイルから構成されている」と紹介しましたが、なぜCSVファイルかという質問をいただきました。これは、マスターデータは主にゲームプランナーが作成しており、仕様書はExcelを利用していることによります。そのため使い慣れているExcelで入力してもらい、VBAでCSVファイルに変換しています。
2. local memcachedとlocal redisをflushするタイミングについて
local memcachedとlocal redisをflushするタイミングがいつかという質問をいただきました。こちらはグラブルのリリースの仕組みと合わせて説明いたします。
webサーバ内に本番のバージョンのリポジトリと、次のリリースのバージョンのリポジトリの2つを持ち、シンボリックリンクの向きを切り替えてリリースを行っています。シンボリックリンクの向きを変えてリリースが完了し、システムソースが切り替わったタイミングで、バッチ処理を用いて各webサーバ内でflush allコマンドを実行させています。
今後について
グランブルーファンタジーのシステムは、まだまだ改善できるところがあります。今後も改善を続けて、より良いコンテンツを皆様にお届けできるよう日々精進してまいります。
Cygamesでは、一緒に最高のコンテンツを作るメンバーを募集しています。
詳細は、こちらをご覧ください。