デブサミまとめレポート

ソーシャルアプリのインフラは
Node.jsが主役になるか


デブサミまとめレポート(ソーシャル&インフラ編)


有限会社オングス
杉山貴章、後藤大地
2012/2/21
- PR -

 2月16〜17日の2日間、東京の目黒雅叙園にて開発者の祭典「Developers Summit 2012」が開催された。「デブサミ」の愛称で知られる同イベントは、2002年より年1回のペースで開催され、今年で10回目を迎えた。

 2日間で行われた並列5トラック、全68セッションのうち、ここではソーシャルゲーム大規模Webサービスを支えるインフラ技術やクラウドに関連したセッションをいくつかピックアップして、その様子をレポートする。また、スマホアプリ開発編は、以下の記事を参照してほしい。

6つの現場が語る、スマホアプリ開発の理想と現実
デブサミまとめレポート(スマホアプリ開発編) 先日のデブサミからiOS/Android/Windows PhoneのHTML5を使うWebアプリやネイティブアプリ開発の講演の模様をお届け
Smart & Social」フォーラム 2012/2/22

大人気ソーシャルアプリ「ドラコレ」のインフラ

 最初に紹介するセッションは「大ヒットソーシャルアプリ「ドラゴンコレクション」の裏側 〜 超高トラフィックを支えるアプリ・インフラの“明日から使えるテクニック”」。講演者は、コナミデジタルエンタテインメント ドラコレスタジオ マネージャー 廣田竜平氏だ。

コナミデジタルエンタテインメント ドラコレスタジオ マネージャー 廣田竜平氏

 「ドラゴンコレクション」(以下、ドラコレ)はコナミデジタルエンタテインメントが製作・運営しているソーシャルゲームである。同社の廣田氏による講演では、ドラコレを運用するインフラ技術について紹介された。

 廣田氏によれば、ドラコレのHTTPリクエストはピーク時で1秒間に5けた台にのぼり、それを3けたの台数のサーバによって運用しているという。サーバ技術自体はCentOSApachePHPMySQL(+memcached)という一般的なLAMP環境であり、複数のソフトウェアロードバランサDNSラウンドロビンを併用することによって負荷分散を行っている。

 スケールアウトが必要な場合は、フロントサーバは単に台数を増やすことで、RDBMS機能分割シャーディングによって処理能力を増強する。RDBMSに関しては、Read性能がボトルネックになっている場合にはReadレプリカを追加すること対処するとのことだ。

 サービスの開始当初はパブリッククラウドを利用していたが、次のような理由からドラコレの運用には不都合な場面が多くなり、現在は自社サーバで運用しているという。

  • ディスクI/O性能が不安定(当時、物理ディスクを占有できるサービスがなかったため)
  • 内部ネットワークのトラフィックの限界が不明
  • クラウドサービス全体のメンテナンスに都合を合わせる必要がある

 これらの問題は一般的なWebサービスであれば問題ないレベルだったが、ドラコレの場合にはトラフィックが非常に高いことに加え、モバイルソーシャルアプリ特有の問題に対処しなければならなかった。その過程で障壁になったのが、クラウド内部の状態を自分たちで完全に把握・制御できないということである。そのため、ドラコレでは最終的にパブリッククラウドでの運用を断念したとのことだ。

 この「モバイルソーシャルアプリ特有の問題」とは、「5秒問題」と呼ばれるものである。ソーシャルアプリの場合、ガジェットサーバをソーシャルネットサービスの運営会社が、コンテンツサーバを自社が用意する仕組みが一般的だ。コンテンツサーバは、GREEガジェットサーバからのリクエストに対して一定時間以内(GREEの場合は5秒)にレスポンスを返さなければならない。このルールに規定回数以上違反すると、一時的に公開を停止されてしまう。

ソーシャルアプリにおける5秒問題(廣田氏の講演資料より)

 ドラコレでは、瞬間的に負荷が急増した場合でも、この5秒ルールに違反しないように、5秒以上かかりそうな処理は途中で中断してエラーメッセージを返す処理を導入しているという。この「5秒キャンセル」機能の実装に当たっては、スクリプトの実行時間をサーバとの接続待ちやディスクI/O待ちの時間も含めて正確に計測するためにチューニングしており、時間指定の単位は1秒未満の制度になっているとの話である。

 5秒問題に関連して、一部のレスポンスが極端に遅くなるという問題が発生したこともあるという。パケットを解析した結果、SYNパケットをロストすることがあり、これが2回続くこと5秒ルールを満たせなくなる、ということが判明した。さらに調査すると、このパケットロストはスイッチのキューで瞬間的にパケットがあふれるマイクロバーストが発生していることが分かった。この問題には、内部ネットワークのRTOの設定をSYNパケットのみ変更することで対処している。

マイクロバースト問題(廣田氏の講演資料より)

 こういった問題の把握や対策は、インフラ側の状態が完全に把握できなければ難しいため、自社サーバでなければ都合が悪いことがある、とのことだ。なお、前述の変更を行って半年、ドラコレでは1度も公開停止処置を受けていないそうだ。

関連リンク

GREEにおけるNode.js

 グリー 開発本部 エンジニア 久富木隆一氏とRobert J. Gould氏によるセッション「Node.jsテクノロジースタック for ソーシャルアプリケーション」では、Node.jsが取り上げられた。

 GREEの新しいグローバルテクノロジースタックでは、Node.jsを採用し、サーバからクライアントまでを一貫してJavaScriptによって開発できる。グリーの久富木隆一氏とRobert J. Gould氏からは、ソーシャルアプリのバックエンドでNode.jsを活用するノウハウについての発表が行われた。

 まず、GREEでは下記のような構成でNode.jsを活用しているとのこと。

  • Strict Modeを使ったコード品質の確保
  • node-browserifyでクライアントとサーバのコードを共有
  • node-seqによる非同期フロー管理
  • long-stack-tracesによるデバッグ情報の取得
  • console.errorなどをファイルにダンプ
  • 非同期コードの例外をキャッチする独自モジュール(node-gree)

 Node.jsはモジュールを追加することでさまざまな構成が可能なほか、自前でモジュールも作成できるため、多彩なニーズに柔軟に対応できることが大きな魅力である。JavaScriptはHTML5のキーテクノロジーでもあるため、HTML5のサポートを進めるグリーにとってもNode.jsはニーズにマッチした強力なツールであるといえる。

グリー 開発本部 エンジニア 久富木隆一氏

 久富木氏によれば、グリーがHTML5を推進する理由としては、JavaScriptの実装がPCのWebブラウザに比べて統一されており、大半のモバイルブラウザはHTML5の高度な機能をサポートしていることが挙げられるという。それに加えて、HTML5に関連する各種新技術にも大きな期待を寄せているとのこと。

 例えばWebSocketはサーバ・クライアント間でリアルタイム通信を実現するうえで極めて重要な技術である。Node.jsには、「Socket.io」というWebSocketを利用するためのモジュールが存在するため、対応が容易だ。

 WebSocketに対応しないプラットフォームもあるが、その場合に備えてSocket.ioにはAjaxで代用する実装が用意されている。しかし、Ajaxはあくまでも代替手段なのでリアルタイムのパフォーマンスが犠牲になる。そこでグリーでは自前でWebSocketのネイティブ実装を行うことでパフォーマンスを確保しているという。

 デバイスローカルのリソースを効率的に利用できるWebStorageも、ネットワークが低速・低帯域なモバイル環境では極めて重要となる。こちらも、サポートされていないプラットフォーム向けに自前のネイティブ実装を使用しているとのことだ。

グリー 開発本部 エンジニア Robert J. Gould氏

 続いてGould氏より、Node.jsをグローバル展開に対応させるうえでのポイントが紹介された。原則は、Node.jsの長所と短所をよく理解して、それに適合することだという。

 例えばNode.jsはI/Oや大量データ処理には強いものの、シングルスレッドでCPUパワーを使うようなタスクには弱い。そこで、結果はできるだけキャッシュするなどしてCPUリソースを節約する工夫が必要になる。HTMLのテンプレートレンダリングなどはCPUリソースを消費するので、クライアントに処理を委譲してしまう対策も有効だという。

 グローバル展開のためのスケーリングにも工夫が必要となる。同氏によれば、スケールアップは非同期I/Oによって簡単に行うことができ、1インスタンスで数千のユーザーをホストできるという。それでも足りない場合は、スケールアウトの必要が出てくる。まずマルチプロセススケジューリングには、Clusterモジュールが活用できる。複数サーバにスケールするために、GREEの場合はNode.jsのキャッシュおよびプロセス間通信にオープンソースのKVS(Key-Value-Store)である「Redis」を利用しているとのこと。

Node.jsとRedisを組み合わせてスケールさせる

 データアクセスに関しては、Node.jsの処理は非常に高速だが、その分リクエスト回数が増えてDBに負荷を掛けることになる。そこで、制約をアプリケーションレベルで保持することによってDBの処理を低減しているという。

 また、DBへのアクセスはカスタムのDSL(ドメイン固有言語)を用いており、他のDBに移行することになってもアプリケーションのコードを書き換える必要がないようにしてあるとのこと。実際、現時点でも同じコードでRedisとMySQLへアクセスしており、MongoDBにも一部が対応しているそうである。今後は、レガシーのREST APIも同じDSLに対応する予定となっている。

 Node.jsはまだ若いが、その分進化のスピードが速い。ときには「なければ作る」という精神も重要で、さまざまなアプローチを試しながら、今後もグリーではNode.jsの活用を進めていくとGould氏は語った。

関連リンク

Mobage/ngCoreにおけるNode.js

 ディー・エヌ・エー CTO室/日本Node.jsユーザ会 篠崎祐輔氏とディー・エヌ・エー CTO室 能登信晴氏のセッション「ngCore Server, ngGoBuilderとサンフランシスコ-東京共同開発の実際」でも、Node.jsが取り上げられた。

ディー・エヌ・エー CTO室/日本Node.jsユーザ会 篠崎祐輔氏

 篠崎氏からは同社の展開するゲームプラットフォーム技術である「ngCore」に関する紹介が実施された。このngCoreで重要になる技術がNode.jsだ。最近何かと話題にのぼることが多いNode.jsだが、ngCoreはNode.jsを基幹技術として活用してる。

 なぜ、この技術を採用したのかといえば、篠崎氏は「多くの接続に対して対処できるため」と説明する。現在のスマートフォンおよびゲームの状況を考えると、多くの接続を処理できるかどうかは最も重要な選定要因になるということだ。

 篠崎氏からはNode.jsを採用した理由として性能やメモリの使用量に関しても言及があった。「Node.jsであれば十分な性能を発揮できるし、メモリの消費量も悪くない。スレッドを使ったプログラムと比較すると、かなり有効にメモリ資源を利用できる」。

 ただし、性能は「高速」というよりは「十分な性能が発揮できる」というところではないかと補説があった。逆にNode.jsは、数値解析などプロセッサ処理が中心的となるような処理に対しては不適切だという。

 Node.jsを採用したことによる問題点として、定期的に発生するV8エンジンGC(ガベージコレクションが紹介されていた。JavaScript実行において、GCの動作が性能に影響を与えることはよく知られている。主要WebブラウザではJavaScriptエンジンの改善が継続して取り組まれているが、本質的にGCによる影響が出てしまう傾向がみられる。Node.jsを利用するケースでは検討事項として含めておいた方が良い内容だろう。

ディー・エヌ・エー CTO室 能登信晴氏

 能登氏からは東京とサンフランシスコ間で実施した遠距離間開発の実例紹介があり、その苦労や面白さなども説明があった。「17時間の時差を乗り越えるには午前中を活用することになるのではないか」(能登氏)。

 また、文化的背景の違いとして、日本ではネガティブに物事をとらえる傾向があるのに対して、米国ではポジティブな視線で取り組む傾向があり、どちらかといえばこちらがポジティブ志向に切り替えて接するようにした方が何かと上手くいくという説明があった。

関連リンク



Java、PHP、Hadoop、Node.jsに接近するAzure

 日本マイクロソフト デベロッパー&プラットフォーム統括本部 Windows Azureデベロッパー エバンジェリスト 砂金信一郎氏と佐藤直生氏のセッション「マイクロソフトの変化を体現するAzureエバンジェリスト2人が語る今後の10年を見越したオープン戦略」では、クラウドベンダ側から見たNode.jsについて話を聞くことができた。

日本マイクロソフト デベロッパー&プラットフォーム統括本部 Windows Azureデベロッパー エバンジェリスト 砂金信一郎氏と佐藤直生氏

 マイクロソフトは数年前からクラウドサービス「Windows Azure」(以下、Azure)を展開している。ほかのクラウドサービスとAzureの最大の違いは、「Azureは開発者向けのプラットフォームとして管理などが高いレベルで自動化されていること」だ(砂金氏)。アプリを開発したい開発者はAzureを使う方が管理の手間を省け、何かと便利ということになる。

 最近では「mixi Xmas 2011」のサービスなどがAzureで開発されているという。「開発期間の短さや規模の大きさなどで苦労した面もあるが、Azureを使うことでこうした大規模サービスも問題なく処理できた」(砂金氏)。

 ここ数年のマイクロソフトの取り組みだが、同社はOSSへの取り組みを強化している。Node.js、HadoopPhoneGapなど旬なOSSプロジェクトとの絡みなどは一端に過ぎない。さまざまなプロジェクトやコミュニティでマイクロソフトの関係者を見ることができる。マイクロソフトにとってOSSは戦略上必要な取り組みとなっている。

 佐藤氏からはAzureとOSSプロダクトを組み合わせたユースケースが紹介された。Azureで利用できるSDKは.NETのみならずJavaPHP、Node.jsなどがある。特に目を引くのがNode.jsだ。マイクロソフトはNode.jsの移植を支援しており、Webアプリを開発するための重要な技術と位置付けている。もともとUNIX系をターゲットに開発されていたNode.jsだが、現在ではWindowsでも動作するようになっているほか、性能も向上している。

 佐藤氏からはNode.jsを使って実際にどのように開発を進めるのかのデモンストレーションが実施された。PowerShell上でコマンドを組み合わせながら開発を進める様子が紹介されたが、こうしたアプローチはUNIX系の開発に慣れた開発者にとってはとっつきやすいものといえる。

 もちろん、GUIから開発することもできる。「Azureの利用には課金が伴うと思われがちだが、SDKをダウンロードしてきてローカルでエミュレータを実行するといった作業は無償で実施できる。試しに開発するといったことは、かなり気軽に実施できる状況にある」(佐藤氏)。デモンストレーションもSDKを使いローカルでエミュレータを動作させての作業だった。

 マイクロソフトはプレビューの段階となるがAzureでHadoopをベースとしたアプリを開発するためのサービスの提供を検討している。マイクロソフトはAzure上でさまざまな作業ができるように各種OSSとの連携を進めており、日々扱いやすい状況が整いつつある。

関連リンク


その他のインフラ技術セッションの資料まとめ

 最後に、上記セッション以外でソーシャルサービスや大規模Webサービスで使われるインフラに関するセッションの資料をまとめておく。

Ruby PaaS「MOGOK」 〜 ソフトウェアエンジニアのためのクラウドサービス 〜


大規模化するピグライフを支えるインフラ 〜MongoDBとChefについて〜



震災とHackとクラウドと



Cloud Foundryで変わるこれからのクラウドアプリケーション開発


ソフトウェアパッケージベンダーのためのクラウドソリューション 〜 『SQL Anywhere OnDemand Edition』〜


オンライン機械学習で実現する大規模データ処理


Building scalable web apps


ニフティクラウド 〜IaaSによる実践的システム構築と運用〜

■ @IT関連記事


検索技術を使うなら知ってないと損する6つのこと
クックパッド、グリー、ぐるなび、CROOZは検索技術をどう使っているのか ソーシャルアプリなど大規模Webサービスや企業内システムでも欠かせない検索技術のまとめ
Smart & Social」フォーラム 2012/2/9
類似アプリはパクリではなく切磋琢磨の結果だ
「ソーシャルゲーム・リーダーズ・サミット」レポート ソーシャルゲームの現在・今後について、ドリコム、gumi、KLabの代表者が行ったパネルディスカッションの模様をお届け
Smart & Social」フォーラム 2011/11/7
売れるソーシャルアプリ開発のコツを成功者から学ぶ
第1回@ITスマソ勉強会レポート 先日行われた@IT主催勉強会にてソーシャルアプリプロバイダであるポケラボの桑原氏が語ったソーシャルゲーム開発のコツを紹介する
Smart & Social」フォーラム 2011/4/1
スマホ元年に賭けるAmebaソーシャルプラットフォーム
第2回@ITスマソ勉強会レポート 先日「Smart&Social」フォーラムが主催した勉強会でサイバーエージェントの長瀬氏が語ったソーシャルアプリ開発のポイントを紹介する
Smart & Social」フォーラム 2011/7/22
ここが大変だよ「Facebookアプリで世界進出!」
PicoWorldに見るソーシャルアプリ多国籍対応の14カ条
 アプリをFacebookに対応して多国籍ユーザーに使ってもらうコツとは? 実体験に基づいたノウハウを紹介します
Smart & Social」フォーラム 2011/9/7
Open GraphとTimelineで人生をプログラミング可能に
f8 Tokyo 2011まとめレポート(1)
 基調講演で話した2つのWeb体験の変化などを要約し日本唯一の新機能ローンチパートナー、クックパッドの技術部長へのインタビューも
Smart & Social」フォーラム 2011/10/18
「cocos2d」でiPhoneゲームを作ってみよう
テンプレートを使って簡単・スマホ開発 
iOS向けにゲームアプリを開発するためのフレームワーク「cocos2d」。用意されているテンプレートを使ってiPhoneゲームを作ってみた
Smart & Social」フォーラム 2011/2/21
DeNAに見る、社内ベンチャー型の開発チームとは
WebとUIをつなぐトリックスター(6) DeNAが2009年以降、新作ゲームの開発体制に取り入れた、小さく経験が浅いチームに大きな権限を与えるやり方の内情を聞いてみた
DeNA Technology Seminar #1 フォトレポート
Development Photography(5) 
DeNAとmixiのエンジニアがオープンプラットフォームの裏側を紹介するセミナーに潜入。DeNAもmixiも「Black企業」ならぬ「Plack企業」?


 Smart&Social フォーラム トップページへ



Smart & Social フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Smart & Social 記事ランキング

本日 月間