CodeZine(コードジン)

特集ページ一覧

秒間28万リクエストをさばく! 「グラブル」を支えるサーバーサイドの技術【デブサミ2020】

【14-B-5】グランブルーファンタジーを支えるサーバーサイドの技術

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2020/03/27 12:00

 2020年3月10日に6周年を迎えた「グランブルーファンタジー」。開発会社である株式会社Cygamesの開発チームは、サービス開始以降、日々増加するユーザー数やリクエスト数、そして次々と公開される新施策を支えてきた。そして、より快適なユーザー体験を提供できるよう、最適技術の導入や運用改善に努めているという。同社サーバーサイドエンジニアの小松美穂氏、大橋庸氏が登壇し、秒間28万リクエストのサーバー負荷のかかるイベント「決戦!星の古戦場」の実例を紹介しながら、運用体制や技術的改善の具体的な方策について紹介した。

目次

古戦場とともに成長してきた「グラブル」のシステム管理

 「グラブル」の愛称で親しまれ、多くのファンを持つ「グランブルーファンタジー」。いわゆる「王道スマホ系RPG」として、2014年3月のローンチ以来、累計登録者数は2500万人を超え、成長し続けてきた。頻繁にアップデートが行われ、仲間のキャラクターは590人以上、武器は2000種類以上を実装し、イベントも定期的に開催している。イベントの中でも定番になっているのが「決戦!星の古戦場」と呼ばれるイベントで、このイベントは期間限定で登場する「イベントボス」を撃破して獲得した貢献度と呼ばれるポイントを競い合うもの。勝敗に応じて勲章などの報酬が与えられるため、集中してゲームを行う人も増える。

 そんな人気ゲームのサーバーは一般的なLAMP環境で運用されており、1日15億ものリクエストに応え続けてきた。小松氏は「私たちは安定したサービス環境を提供するためにさまざまな工夫を行ってきた。それはユーザーに快適に楽しんでほしいとの一念によるもの」と語る。

株式会社Cygames サーバーサイド サブマネージャー 小松美穂氏
株式会社Cygames サーバーサイド サブマネージャー 小松美穂氏

 ちなみに1日15億という数字が生み出されるのは、「グラブル」がユーザーの操作のたびに通信が発生する「ブラウザゲーム」であることも大きい。

 とはいえ、1日15億リクエストという数字は、あくまで平常運転時のもの。先述した「決戦!星の古戦場」など人気の定期開催イベントでは、1日に40億リクエストを超えることも少なくなく、瞬間的には1秒間に28万リクエストに上ることもあるという。

 この「決戦!星の古戦場」開催時の状況をサーバー側から見てみると、イベント開始直後からリクエストが急増し、イベントのピークタイムでは28万リクエスト/秒に達している。この時は想定以上のリクエストの集中で、ロードバランサーのCPU使用率が100%に到達し、急遽L7のロードバランサーからL4に切り戻して対応することとなった。また、発行クエリが多すぎて、MySQLのメモリが枯渇しそうになる危機にも陥るなど、さまざまな問題が次から次へと起きる状況下で「古戦場」とともに成長してきた。

 小松氏は「思いも寄らない問題に対し、『観測と予測』によって少しでも早くトラブルに気づき、できるだけ早くボトルネックを取り除くことが大切」と運用のポイントについて語った。

想定以上を乗り切るための「サーバー運用の3本柱」とは

 それでは具体的にどのような運用体制で、秒間28万リクエストにもなるイベントを乗り切るのか。小松氏は、「万全の準備」「見守り(モニタリング・挙動確認)」「トラブル対応」の3つを三本柱として挙げ、「どれが欠けても十分な対応ができない」と強調する。

 まず「万全の準備」については、「変化を予想し、備えること」が大切だ。前回のイベントで乗り切ったとして、そのまま次を迎えてはならないという。つまり、前回観測された各種情報(ユーザー数の変化や遊び方の変化など)を見て、過去6年間の傾向から変化を予測し、必要な対応を決める。そして、その想定値に対し、計測を交えながら検証を繰り返し行っていく。

万全の準備
万全の準備

 例えば、次のイベントの最大リクエスト数を予測するにあたっては、前回開催のリクエスト数とユーザー数と比較し、現在のユーザー数やユーザー層などの差異、日程・ゲーム編成の差異によるサーバーの負荷の変化などを加味して考えていく。

リクエスト数を予想する例
リクエスト数を予想する例

 次に「見守り」については、開催中のモニタリングであり、挙動確認のことだ。ここで最も大切なのは「課題を見落とさないこと」だという。まず、機能面の見守りとしてサービスの不具合に気づくこと。そして、負荷の見守りとして、瞬間的な事象やトレンドの観測を行い、不具合の迅速な修正や改善点の報告へとつなげていく。

 どのようにして課題を見落とさないようにするのかについては、長くなるため割愛するとして、参照記事として「Developers Summit 2017」の講演「監視・解析ツールから読み解く!トラブル対応&負荷対策」のレポートが紹介された。

 なお具体的には、下記のツールが実際に見守りに使われているという。

実際に活躍しているツール
実際に活躍しているツール

 サーバー全体は「Mackerel」、エラーの傾向などは「Kibana」、APIごとのトレンドや詳細などは「New Relic」、データベースの瞬間的な動向は「Percona Management Monitor」を活用している。また、ある程度自動化し、課題を見落とさないようにしているという。

 そして、3本目の柱「トラブル対応」について、小松氏は「どうしても予測できないトラブルはあるが、ユーザーさまにゲームを楽しく遊んでいただくことを重視し、たとえ障害発生時でもユーザーへの影響を最小にし、迅速に障害を取り除きたいと考えている」と語る。

 そのために、「事象・ユーザー影響の把握」「チーム内での情報の共有」「問題の切り分け」「作業の分担」といった4つのステップをスムーズに行うことに心を砕いているという。「当たり前のことを徹底的に行うことが何より重要」と小松氏は力を込めて語った。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • CodeZine編集部(コードジンヘンシュウブ)

    CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

バックナンバー

連載:【デブサミ2020】セッションレポート

もっと読む

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5