Node.jsはシングルスレッド、ノンブロッキングI/O、イベントループなどの特徴があり、「向いていること」と「向いていないこと」があると思います。
言語選定の際に使えるメモとして、Node.jsの構築事例も加えてまとめてみました。
##Node.jsに「向いていること」
処理が短時間でイベント処理が重要なアプリ
例えば、チャットアプリなどの大量のアクセスのあるリアルタイムなネットワークプログラミングが得意
シングルCPUのサーバー
シングルCPUの環境化でもその性能を十分使い切れるため、比較的性能の小さいサーバ上で大きなパフォーマンスを発揮できる
##Node.jsに「向いていないこと」
CPU負荷の高い処理
CPUリソースを大量に必要とするJavaScriptの処理を行うとイベントループが回らない状態になり、イベントハンドリングが行えない状態に陥る。このため、CPU処理が大量に必要とされるアプリではNode.jsの利用は向かない。
マルチコアサーバー
Node.jsは基本的にシングルプロセス・シングルスレッドで動作する。しかし、そのままの利用では、最近の高集積化したマルチコアサーバ上ではハードウェアの性能を十分使い切ることはできない。node-v0.6からはクラスターモジュールが導入され、Node.jsがマルチプロセスで動作するようになったが、マルチプロセスを意識してプログラミングの設計をする必要がある。
画像など静的コンテンツの処理
大量の静的コンテンツを提供するサーバなどでは、そもそも多数のイベント処理がそれほど必要なく、Node.jsを使うメリットがほとんどない。静的コンテンツの方はNginXなどで対応するらしい。
##Node.jsの「構築事例」
ピグライフ、PayPalなどで構築事例があるみたいです。
・[大図解]ピグライフはこう動いている
・Node.js Cluster+Socket.IO+Redisによるリアルタイム通知システム
・MongoDB + node.js で作るソーシャルゲーム
・第64回、第65回 NHK紅白歌合戦:生放送と連動したミッションクリティカルなメッセージ配信プラットフォーム
・PayPal社がバックエンドをJavaからJavaScriptへ移行
・ソーシャルアプリのインフラはNode.jsが主役になるか
・【NASA】みんなが知っている超有名な企業でもNode.js使っているよ!活用事例とソリューション #nodefestA #nodefest
・node.jsでリアルタイムWEBアプリケーションの開発
・How Node.js Powers the Many User Interfaces of Netflix
上記PayPalの記事でもあるように、1つのJavaScriptチームでフロントエンドからバックエンドまで記述できるということは大きなメリットがありそうです。
Harrell氏によると、JavaScriptをブラウザ側からサーバ側まで使用する利点の1つとして、『あらゆるレベルの技術において、理解し、ユーザのニーズに対応することができる』1つのチームが受け持つことにより、フロントとバックエンド開発間の隔たりをなくすことが挙げられる
また、他にもこのような意見があるそうです。
Node.jsは日々安定度を増しており、採用事例も増え、より大型なプロジェクトでの利用も増えてきている。例えば最新のコミュニケーション・ツールであるSpeekやVoxerは完全にNode.js上に構築されている。他の採用者にも、Walmart、Microsoft、Yahooなど、誰もが知る企業が顔を揃えている。
「もし私が動的な開発環境を一つだけ選ばなければいけないとしたら、おそらく迷わずNode.jsを選ぶだろう。」
「Node.jsの良さは小型プロジェクトの開発が本当に簡単に行えるところだ。他の環境なら長時間かかるアイディア・ベースでのプロトタイプなども、Node.jsならばすぐにできてしまう。」
急成長を遂げるNode.jsがどのように発展したのかをその立役者に聞く
他にも構築事例や、向いていること、向いてないこと、上記記事の誤りがあれば教えて下さい。