PHPカンファレンス2017 レポート

注目セッションレポート「グラブル流運用術」「PHPで作るサービスの,これまでの10年とこれからの10年」「PHP Version UpとAWSへの移行」「運用,追加開発しづらいPHPアプリケーションに未来を与える方法」

この記事を読むのに必要な時間:およそ 4 分

10月18日に行われたPHP Confarence 2017。本稿では,次の4つの注目セッションをレポートします。

  1. 石田健太さん「グラブル流運用術 〜1700万人を満足させるためのシステム構成,PHPプログラムの考え方〜」
  2. 市橋立さん「PHPで作るサービスの,これまでの10年とこれからの10年」
  3. 吉本将宣さん「PHP Version UpとAWSへの移行」
  4. 田中改さん「運用,追加開発しづらいPHPアプリケーションに未来を与える方法」

石田健太さん「グラブル流運用術 〜1700万人を満足させるためのシステム構成,PHPプログラムの考え方〜」

Cygamesの石田健太さんは,ソーシャルゲームであるグランブルファンタジーの運用を通して,システムの改善点の発見手法から実際の改修を行って得た知見について発表しました。

画像

ボトルネック部分の調査・分析

グランブルファンタジーは1,700万人がプレイしており,アクセス数は一人あたり3秒に1回,総アクセス数は1日に10億PVにものぼる巨大なサービスです。石田さんはグランブルファンタジーを「もっと早くする」という目的をもってシステム改修にあたりました。そのシステム改修では,まずは次の2の方法で調査・分析を行いました。

  • New Relicを用いた処理負荷が高いAPIの特定
  • XHProfを用いたコードベースでの処理負荷の高い部分の特定

New Relicとは,稼働しているシステムについてGUIで負荷状況を確認できるサービスです。New Relic上で,Transaction,Throughput,MostTimeConsumingを確認したところ,バトルの際に利用されるAPIのアクセス頻度が高く,それに伴い処理時間が長いことが判明しました。そのため,バトルの処理に焦点をあてた改修が必要だと判断しました。

XHProfとは,処理時間や関数のcall数,メモリ仕様を数値として算出できるツールです。New Relicでの分析の結果を反映して,バトルの処理に焦点をおいてXHProfで確認したところ,⁠スキル計算処理」⁠CSV取得処理」の2点の処理時間が長い頃が判明しました。

分析結果から判明したこの2点を,システム改修の対象とすることに決定しました。

スキル計算処理の改修

グランブルファンタジーでは様々な要素の組み合わせによりスキル計算を行っており,そのため計算処理が膨大なものとなっていました。そこでスキルの計算処理を軽減させるために,計算結果をキャッシュとしてKVSに保存させることで,計算回数の軽減を図りました。その実装で気をつけた点は次の2点です。

  • バトルの勝敗に関わるダメージ計算の整合性を担保するため,一意のデータが特定できるようなKeyを設定する。
  • 運用障害を未然に防ぐため,データが取得できない場合でも問題なく処理できるようにする。

これらに気をつけた実装することで,システム障害を考慮しつつ,スキル計算処理のパフォーマンス改善を達成しました。

CSV取得処理の改修

グランブルファンタジーでは,キャラクターや武器のパラメータ情報をマスタデータとしてCSV形式で保存しています。これらのマスタデータは,Webサーバー上でKVS(Redis)に保存していました。

CSV取得処理が遅い原因は,マスタデータを取得するタイミングで検索対象となるCSVファイルが多かったことが要因の一つでした。そのため,一旦取得されたマスタデータをWeb上で別のKVS(memcashed)にキャッシュとして保存することで,処理の効率化を図りました。その実装で気をつけた点は次の2点です。

  • キャッシュとマスタデータを同じWebサーバー上に置く。
  • データの整合性を保つため,マスタデータが更新された際にキャッシュを削除する。

これらに気をつけた実装することで,バッチ更新を考慮しつつCSV取得処理のパフォーマンスを改善しました。

システム改修の成果

システム改修の結果として,⁠バトルAPIの速度が42.5%改善」⁠メモリ使用量が40%減少」⁠CALL関数の数が50%減少」といった成果を得ました。

石田さんは改修を通じて,⁠常に改善の意識を持つ必要性」を認識したと述べていました。また今回の改修に共通した「データは最小限にまとめて再利用する」⁠同じデータを何度も取得しいで再利用」というプログラムを書く上での基本ついて,改めて重要性を認識したと結論付けていました。

画像

著者プロフィール

近藤祥平(こんどうしょうへい)

駆け出しエンジニア。
どこかでお会いする機会があれば,その時はよろしくお願いします。

バックナンバー

PHPカンファレンス2017 レポート

コメント

コメントの記入