【特別企画】ソーシャルゲームのDevOpsを支える技術(前編)~魔法少女リリカルなのはINNOCENTの舞台裏~

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

モバゲーから提供されているソーシャルゲーム『魔法少女リリカルなのはINNOCENT』は,企画・開発・運用を⁠株⁠ユビキタスエンターテインメントが行っています。このサービスを支えるインフラは物理サーバと仮想サーバのハイブリッド構成となっており,⁠株)IDCフロンティアのクラウドサービスが採用されています。本稿はこの両社から,人気ソーシャルゲームならではのデータを交えながら,DevOps実現に向けての取り組みを披露してもらいます。

どんなゲームなの?

魔法少女リリカルなのはINNOCENTは2013年3月にモバゲーにてリリースされたソーシャルゲーム注1です。原作者の都築真紀氏がこのゲームのために構築した世界観,従来のカード型ソーシャルゲームのシステムを踏まえつつも他作品に類を見ないリアルなバトルシステムと豊富なスキル(100種類超)⁠そして作品内の進行度によって開放される完全書きおろしストーリーが大変好評をいただいており,毎月10万人以上のユーザがプレイする作品となりました。

この作品の企画的に大きな特徴の1つは「ゲーム内のキャラクター達も,プレイヤーとまったく同じカードゲーム『ブレイブデュエル』をプレイしている」ということです。このため「プレイヤーが参加している期間限定ゲーム内イベントに,ゲーム内のキャラクター達も参加して一緒に遊びながら,ときには感想を聞いたり,ときには共に成長したりできる」という臨場感を持ったおもしろさがあります。

ユビキタスエンターテインメント(以下,UEI)はセブン・アークス様と共に,この作品の企画・開発・運用すべてを担当しており,筆者,水野は企画ディレクションと開発・運用アーキテクチャの設計を行いました。

本稿では前後編に分け,本作品がDevOpsの考え方に基づいてシステム設計されていることと,その概要,運用担当の宮嶋からはインフラ設計と実際の運用に際して収集データを基にどういったことを裏側で行っているのか,さらに次回の後編では,そのインフラを支えているIDCフロンティアのクラウドサービスにまで踏み込んで,ソーシャルゲームの裏側のお話をしたいと思います。

注1)
スマートフォン,フィーチャーフォン用。

ソーシャルゲームは眠らない

最近あらためて「DevOps」という言葉をよく見聞きします。DevOpsとは2009年にベルギーで始まった「DevOps Days」からポピュラーになってきた言葉で,筆者自身は2011年のサンタクララで行われたWebパフォーマンスと運用に関するコンベンション「O'reilly Velocity Conference」で初めて耳にしました。

それは日本語で直訳してしまうと「運用開発」ではありますが,それでは言い尽くせないほどに深い概念です。

WikipediaのDevOpsの項目は最近のものでは変わってしまいましたが,初期の記述に「DevOpsは,開発部門(アプリケーションエンジニア/ソフトウェアエンジニア)と技術運用部門の,コミュニケーション・連携・調律を行うための,手法とシステムが一連となったプロセスである。」注2)⁠ ⁠その目的は,良い品質のソフトウェアプロダクトやサービスを的確に素早く提供することによって,ビジネスゴールへと到達することを容易にするためにある。」注3と書かれていました。

このように,DevOpsは「サービスのリリースサイクルを速めようぜ!」とか「開発と運用が仲良くしようぜ!」という単純なものではなく,全体をとらえて「ビジネスゴールへ到達することを容易にしよう!」という目的を見据える概念であるのが深いところです。

筆者は,いままでにオンラインゲームやWebサイト,スマホアプリの開発に100以上かかわってきました。その経験から,本作品のようなソーシャルゲームの運用開発における,その目的と典型的な4つの特徴は次のようであると考えています。

【目的】

プレイヤーに,常に新鮮なイベントやシステムと,成長素材を提供し,安定してゲームを遊んでもらうこと。

【4つの特徴】
  1. 1ヵ月に数十回の小規模開発=「カード追加」⁠UI改善」⁠小機能追加」のリリースが発生すること
  2. 1ヵ月に数回の中規模開発=「ゲームイベント」のリリースが発生すること
  3. 数ヵ月に一度の大規模開発=「新規ゲームイベント」のリリースが発生すること
  4. 技術者の調査が必要なユーザサポート問い合わせが日に数件~数十件必ず発生すること

特徴の4つを見てわかることは,とても複雑かつ密接に開発と運用が結びついているということです。そのため,長期にわたってトラブルなく運用することは非常に難しく,実際のところ,筆者もそれは完全にはできていません。そこでプレイヤーの皆さんにおなじみ(?)「補填」「詫び石」が発生する事態になったりする場合があります。

しかし,トラブルを完全になくすことはできなくても,少なくすることにエンジニアリングで挑戦するのが技術者のはずです。ソーシャルゲームにおいても開発と運用は密接な関係にあり,どちらかに寄ってしまったり完全に切り離すことはできないことがわかりました。それならば,戦場の狙撃兵が観測手と組み,一体となってその目的を達成するように,本作品の目的のためには開発と運用を統合して考えなければなりません。そのための技術としてDevOpsを必要としたのです。

さて,ここからは弊社内「Ops」側担当の宮嶋から,インフラ整備と運用に関するエンジニアリングを事例を交えて紹介します。

注2)
原文:DevOps is a set of processes, methods and systems for communication, collaboration and integration between departments for Development (Applications/Software Engineering) and Technology Operations.
注3)
原文:Its purpose is to facilitate meeting business goals by producing good quality software products and services in a timely fashion.

[運営サイド]インフラ構成について

フィーチャーフォンやスマートフォンのブラウザでプレイされるソーシャルゲームは,ゲーム専用機のパッケージで提供されるゲームとは異なり,ゲームに必要なデータをほぼすべてサーバ側で保持しています。そのためサーバに要求される性能や機能の水準も高くなります。また同時利用者数が多く,イベントなどが実施されると普段の数倍以上の利用者数になることもあり,サーバ負荷が変動しやすい性質を持っています。そのためシンプルな構成を保ちながら運用しやすく,負荷に応じて柔軟に性能を変化させやすいインフラ構成を検討する必要があります。

LAMP構成中心の設計

少人数での運営作業は,運用コストを見直し,低下させる方針が重要となります。自分たちが使い慣れた,動作実績があり設定が把握しやすいミドルウェアを利用すると,運用コストの削減につながります。

また,ソーシャルゲームのプラットフォーム側で提供されている機能(画像キャッシュ機能)など,利用可能なものは自前で構築しないなどの割り切りも行います。我々が本作品で利用したミドルウェアと利用方針は次のようになります。

ロードバランサとしてのNginx

ロードバランサとして,NginxをWebサーバの上段ネットワークに配置します。ここで参照頻度の高い画像配信と,リバースプロキシサーバとして機能させ,Webサーバにトラフィックの分散を行います。

アプリケーションサーバとしてのApache

Webサーバ兼アプリケーションサーバとして,Apache HTTP Serverを利用します。PHPで記述されたゲームプログラムを実行し,Flashのリアルタイム合成や,カード画像などの一部画像ファイル名のハッシュ化も行います。

ファイル名のハッシュ化を行うとファイル名が推測しにくくなり,不正利用の防止につながります。

データストアとしてのMySQLとMemcached

ゲームユーザごとのプレイデータとゲームプログラムで利用するゲームマスタデータはデータベースサーバのMySQLで保持しています。Memcachedは利用頻度の高いゲームマスタデータのキャッシュに利用し,MySQLへの接続頻度の低下を図っています。

MySQLは最新安定版であるMySQL 5.6を採用しています。MySQL 5.6は高速であるだけでなく,mysqlfailoverコマンドを利用したフェイルオーバー機能も備えています。しかし,このフェイルオーバー機能は利用できるストレージエンジンが限られるなど制限もあり,運用面では課題が残る部分もあります。

MySQL 5.6での特筆すべき機能として,遅延レプリケーションがあります。遅延レプリケーションでは,通常のレプリケーションとは異なり,SQLの実行を事前に設定した時間の間で遅延させることができます。

たとえば意図しないデータ削除などのオペレーションミスが生じた場合,⁠削除処理がまだ実行されていない状態のデータ」を容易に入手できるため,バックアップからの復元といった負担の大きな作業を行わなくてもよいメリットとなります。

トラフィック削減のためデータ通信の圧縮

サーバのCPUコア数やメモリはクラウド環境を利用することで柔軟に変化させることができますが,ネットワークインターフェースの通信速度はサーバのスペックに依存する部分を除いては柔軟な変更を行いにくい部分となります。このように変更を行いにくい部分はボトルネックになりがちです。

そのためデータ通信の圧縮を行うと,トラフィックの削減を図ることができ,ゲームのレスポンス向上にもつながります。

Apacheではmod_deflateモジュールを利用してコンテンツの圧縮を行い,PHPでMySQLとMemcachedの接続時に圧縮する設定や,MySQLレプリケーション通信間の圧縮設定を行うなど,さまざまな個所で圧縮通信設定を行っています。

著者プロフィール

水野拓宏(みずのたくひろ)

(株)ユビキタスエンターテインメント 取締役 CTO

Facebook:https://facebook.com/takuhiro.mizuno
Twitter:https://twitter.com/mizunon


宮嶋史尋(みやじまふみひろ)

(株)ユビキタスエンターテインメント R&Dディビジョン 第2セクション


藤城拓哉(ふじしろたくや)

(株)IDCフロンティア カスタマーサービス本部 ソリューションアーキテクト

バックナンバー

仮想化

  • 【特別企画】ソーシャルゲームのDevOpsを支える技術(前編)~魔法少女リリカルなのはINNOCENTの舞台裏~

コメント

  • Re:

    バグだらけ

    Commented : #1  名無しさん (2013/12/10, 23:16)

コメントの記入