前回のエントリでソーシャルゲームで必要なポイントをあげましたが、
今回はもう少し技術的な部分にも触れたいと思います。

ゲームの構成は簡単に説明すると、モバゲーのフューチャーフォン(=ガラケー)、インフラは、クラウド環境(IaaS)上に構築、ゲームプログラムは、PHPとFlashliteといった感じです。

(1)インフラ:3系統用意

本番系とステージング系とローカル系の3系統を構築しました。
・本番は名前のとおり実際のゲームが動作する環境です。
・ステージング系は障害時や新機能を追加する際の確認用の環境です。本番系とは極力同じような環境にします。
・ローカルは普段の開発環境です。
・リリースの流れとしては、ローカル→ステージング→本番のようになります。

本番系のシステム構成

サーバ:I社のIaaS WEBサーバ2台、予備WEBサーバ1台、DBサーバ2台、ロードバランサー1台+予備1台
OS:CENTOS64

ステージング系のシステム構成

サーバ:GMOクラウドPublicのIaaS WEBサーバ・DBサーバ1台
OS:CENTOS64

ローカル系のシステム構成

サーバ:開発用PC、XAMPP
OS:Windows

(2)インフラ:運用監視ツール

サーバの監視は、予算不足から常時監視はできないため、障害時に迅速に対応するポリシーとしました。
・キャパシティの確認のためにリソース監視を導入しました。
・サーバとサービスの死活監視のためにプロセス監視を導入しました。

リソース監視

ツール:Munin(http://munin-monitoring.org/)
定期的にグラフを参照し、CPU負荷やメモリとHDDの残量を確認しました。

死活監視

ツール:Monit(http://mmonit.com/monit/)
サーバの生死確認とサーバ上のサービスの生死確認をするツールです。なにか起きると担当者の携帯へメールを通知するようにしました。WEBサーバは自動で再起動するようにしました。

(3)インフラ:高負荷、高速化

サーバの高速化や負荷軽減も予算制約があるので、ミドルウェアを導入しました。
・PHPの実行速度向上のためにPHPアクセラレータを導入しました。
・データベースにKVSを導入しました。

PHPアクセラレータ

ツール:eAccelerator(http://sourceforge.net/projects/eaccelerator/)
PHPを中間コードに変換しメモリ上にキャッシュします。

データベース

ツール:TokyoTyrant(http://fallabs.com/tokyotyrant/)

(4)プログラム:ゲームエンジン

PHPで携帯サイトを作る時と特に変わりはありません。ですのでいつもの組み合わせにしました。
・速度が求められるのでフルスクラッチと悩みましたが、メンテナンス性を考慮して、結局フレームワークを導入しました。
・HTMLコーディングを分離するためにテンプレートエンジンを導入しました。
・アプリケーションログを導入しました。

PHPフレームワーク

ツール:ZendFramework(http://framework.zend.com/)
ViewとControllerのみ使いました。

PHPテンプレートエンジン

ツール:Smarty(http://www.smarty.net/)
絵文字変換ライブラリを使うことで、3キャリア共通テンプレートで作成しました。

ログライブラリ

ツール:log4php(http://logging.apache.org/log4php/)

まとめ
予算的制約が何事にも優先する(笑)ので、いろいろなオープンソースやライブラリにお世話になりました。また、サービス直後の負荷が読めないのでクラウドの利用は安心感がありました。一応報告すると、サービス直後に落ちることはなかったです(実はオーバースペックだったw?)

mixiアプリ開発&運用コンプリートブック -ユーザをつかむソーシャルアプリのつくり方!育て方!
株式会社ミクシィ 田中 洋一郎
技術評論社
売り上げランキング: 73303

mixiアプリをつくろう!OpenSocialで学ぶソーシャルアプリ
神部 竜二
ソーテック社
売り上げランキング: 122509