「モバゲータウン」(以下、モバゲー)といえば、誰しも「中高生に絶大な人気を誇る携帯サイト」という認識ぐらいはあるだろう。ゲーム、ニュースに小説、占いなどのコンテンツ、アバター(仮想キャラクター)を装ったSNSコミュニケーション、ディー・エヌ・エー(以下、DeNA)が運営するショッピングやオークションサイトなどが利用できる、携帯電話向けの総合ポータルサイトだ。
モバゲーは2009年5月現在で会員数1419万人、月間ページビュー(PV)は約183億を誇る。つまり、1日当たり6億PVである。さぞかし大掛かりなシステムを運用しているのだろうと想像してしまうが、意外にそうではない。
DeNAポータル事業本部 システム部の部長、武部雄一氏は「モバゲーのシステムは、比較的低価格なPCサーバ機1000台ほどで運用している。これでもキャパシティーには突発的な負荷に耐えられる余裕を持たせている」と語る。
また、モバゲーのインフラ周りの担当者はわずか6人だという。6人で1000台のサーバを管理し、サービスの運用を可能にする秘策とは、一体何だろうか。
1日当たり6億PVものトラフィックを効率よく処理するためには、精巧な負荷分散が必要だ。モバゲーのシステムは、オープンソースのLAMP構成を採用している。OSに「Linux」、Web/アプリケーションサーバに「Apache」、データベース(DB)サーバに「MySQL」、そしてメインの開発言語は「Perl」である。
システム負荷の高い画像・動画の配信には、外部のコンテンツ配信ネットワークを利用する。また、日記や小説など参照数が多いコンテンツではキャッシュサーバ「memcached」を活用して、DBサーバへのアクセスを減らす。武部氏によると、このmemcachedの導入はここ半年以内からだという。
それでもDBサーバの負荷は相当なものだ。そのため、MySQLのレプリケーション機能を使い、DBサーバを更新系の“マスター”と参照系の“スレーブ”に分け、処理を分散。しかも、マスター自体をさらに40系統に細かく分割し、各系統に数台から十数台のスレーブを連ねるという“超分散”環境だ。

「モバゲーのサービスは、コーナーで細かく分かれているのでマスターを分割しやすい。これなら、仮にあるコーナーに割り当てたマスターが止まっても、ほかのコーナーに及ぼす影響を最小限に抑えることができる」(武部氏)
問題は、マスターからスレーブへのレプリケーションが非同期であり、遅延が発生すること。武部氏によると「かなり厳しいしきい値」を設けて、それを超えると警告メールがインフラ担当者に送信される仕組みを取っているという。
実際の運用では、スレーブでの参照処理負荷が高まり、マスターからレプリケートした更新処理が遅れることもある。そのため、アプリケーションにチューニングを施したり、スレーブの台数を増やしたりすることで対応する。レプリケーション遅延やアプリケーション性能を監視するツールは、主に自作ツールを活用する。DeNAでは、使い勝手の良い自作ツールが運用効率化に貢献しているのだ。
さらに負荷分散で特徴的なのは、各系統で複数あるスレーブにクエリを振り分けるDNSラウンドロビンに、オープンソースのDNSサーバ「MyDNS」を採用していることだ。武部氏は「MyDNSは、標準的なBINDに比べて機能がシンプル。活用している例はそう多くないようだが、モバゲーでは重宝している」と話す。
MyDNSでは振り分けに重み付けが可能なため、スレーブの処理能力に合わせて振り分け頻度を任意に設定できる。MySQL上で管理する設定情報を更新して重み付けを動的に変えたり、監視ツールと連携して障害を起こしたスレーブを自動的に振り分け先から外したりするなど、管理しやすい面もある。こうした仕組みもあって、同社はこの超分散環境をうまく統制しているわけだ。
モバゲーを語る上では、同社が開発したフレームワーク「MobaSiF(Moba/Mobile Simple Framework)」の存在も見逃せない。MobaSiFは、DeNA取締役の川崎修平氏が開発したPerlベースのWebアプリケーションフレームワークであり、DeNAが手掛ける携帯サイトで共通して使われており、2008年5月にオープンソース化されている。
MobaSiFは、携帯向けWebアプリケーションを効率的に開発・実行できるよう工夫されており、主な機能は、携帯電話の3キャリアに対応するキャリア・端末機種の判定、端末認証、絵文字変換やテンプレートエンジンだ。そのほか、MVCモデルのURLディスパッチャ、DBアクセスなど携帯向けにとどまらない汎用的な機能も備えている。
特にテンプレートエンジンの処理速度は、DeNAが実測したところ、テンプレートエンジン「Template Toolkit」の22倍にもなるという。MobaSiF自体が“軽さ”を重視しており、リクエストを受け付けるたびにテンプレートを動的に生成するのではなく、事前にコンパイルしたバイナリテンプレートを用意しているからだ。
武部氏は「PerlによるMVC(Model-View-Controller)アプリケーションでは、最近はCatalystのような多機能なフレームワークが好まれるようだが、FastCGIとMobaSiFの組み合わせは、処理の高速化と省リソース化に役立っている」と話す。
モバゲーが1日当たり6億PVのトラフィックを効率的に処理できているのは、インフラが優れているからだけではない。武部氏は「何よりアプリケーション。コード記述のわずかな違いで、性能に大きな差が出る。アプリケーション品質を一定に保つことこそ、そのサイトの品質を決める」と指摘する。
モバゲーのシステムは、前述の川崎氏がほぼ1人で開発したことで知られるが、さすがに現在では50人規模の大所帯によりチーム開発が行われている。これだけの人数になるとスキルにばらつきが出るため、コーディングルールの整備や先輩エンジニアによる設計レビュー・コードレビューなどで品質向上に取り組んでいるという。
一方、同社では個々の開発者のヒューマンスキル、モチベーションを引き出す開発スタイルを取る。新たなサービスを加えるプロジェクトでは、1人の開発者と1人の企画者がペアを組み、ひざを詰めてとことん話し合うという。
「モバゲーのことを深く知り、技術を広くカバーすることはもちろん求められるが、サービスを作り上げていくエンジニアにとって重要な要素の1つに“コミュニケーション能力”があると思う」(武部氏)
そして開発者は“ピン”で設計から実装、テストまでをこなす。モバゲーの場合、新機能でも2、3週間という短期リリースが多いという。総じて開発のパフォーマンスは高そうだ。
同社がわずか6人で1000台のサーバで管理・運用できる理由は、効率化されたシステムと開発チームの工夫にあるようだ。中高生からの人気が際立つモバゲーだが、実際は20代、30代の会員が増えているという。また、端末の高度化に伴い、モバゲーのサービスは今後よりリッチになり、バラエティに富んでくるだろう。