SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2012】セッションレポート(AD)

【デブサミ2012】16-A-5 レポート
ソーシャルアプリケーションにおけるNode.jsの活かし方

  • このエントリーをはてなブックマークに追加

Node.jsをグローバル規模で活用するためのテクニック

 3番目のテーマは「グローバル」。スピーカーはRobert J. Gould 氏に交代した。

 Node.jsにはいろいろな特徴があるが、例えばグローバルで100台のNode.jsサーバーを動かす場合には、さまざまな考慮すべきポイントがある。Node.jsは、確かにI/Oと大量データ処理アプリケーションには強いが、シングルスレッドでCPUを使うタスクには弱い。そのためCPUリソースの節約が望ましく、できるだけ結果をキャッシュする必要がある。

 HTMLテンプレートのレンダリングやコンテンツのローカライズは、サーバーのCPU資源を浪費する。そこで1つの戦略として、クライアントにそれらの処理を委譲している。クライアントがコンテンツをローカルに持つようになるため、WebSocketでJSONをやりとりするAPIがあれば足りる。

 また単一Node.jsサーバーの作成は簡単だが、グローバル展開のためにスケールさせるにはどうすればいいのか。非同期I/Oによりスケールアップは可能で、インスタンス1つで数千ユーザーをホストできるが、グローバル展開ではパワーが足りない。そこでNode.jsのClusterモジュールを使うと、マルチコアCPUのコアをすべて使えるようになる。

 さらに、複数サーバー上にスケールアウトするために、グリーではNode.jsのキャッシュ&プロセス間通信にRedisを採用している。Redisは単なるKVSではなく、MemCached並のパフォーマンスを保ちつつ、多様な機能を備える。基本KVS機能に加え、アトミックな計算や文字列編集といった操作が可能である。MySQLなどのSQLデータベースに向いていない配列データ、キューや集合の処理を簡単に高パフォーマンスを保ちつつ行え、さらにリアルタイム通知やランキングシステムも組み込みで用意されている。これら機能は全てソーシャルアプリケーションを作る際に定番な機能であるため、相性は非常に良い。一番重要なのはリアルタイムプッシュの仕組みであるPubSubで、非常に高速だ。ただ現状のRedisはファイルからのバックアップが不安定なので、最終的なマスターはまだMySQLに残している。

 サーバー間バスでの通信を、Node.jsイベント通信(eventemitter)並に簡略化し、WebSocketとRedisのPubシステムを融合したグリーのシステム上でクライアントが相互通信する仕組みを構築している(図2)。

 データベースには、独自のドメイン固有言語(DSL)によりアクセスする。DSLにより手書きSQLを排除し、文字列入力のミスなどの問題を未然に防ぐ。結果は透過的にキャッシュされ、一部はメモリ上にキャッシュして高パフォーマンスを実現する。レガシーシステムのRESTAPIも、今後上記のデータDSLに対応予定だ。

 グリーではnode-seqを大きく拡張し、便利な機能を数多く追加している。APIを整理することで、非同期コードをシンプルに書けるようにしている。さらに今後、MySQL、MongoDB、Redisのバックエンドを同一APIで利用可能にしていく予定だ。

 最後にGould氏は「今年はNode.jsの年になる。本格的に手がけてみたいのであれば、ぜひグリーで一緒にやりましょう」と呼びかけ、セッションを閉じた。

図2:サーバー間バスでの通信を簡略化
図2:サーバー間バスでの通信を簡略化
お問い合わせ

GREE Engineers' Blog

http://labs.gree.jp/blog/

グリー株式会社

東京都港区六本木6-10-1 六本木ヒルズ森タワー

http://www.gree.co.jp/

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
【デブサミ2012】セッションレポート連載記事一覧

もっと読む

この記事の著者

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6461 2012/03/14 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング