WebアプリケーションサーバーソフトのNode.jsには、これまでのWebアプリケーションサーバーとは全く異なる四つの特徴がある(図1)。(1)多くのアクセス要求を処理できること、(2)JavaScriptでアプリケーションを開発できること、(3)アドオンが充実していること、(4)様々な種類のサーバーとして動作すること、である。これらの特徴を順に見ていこう。

図1●Webアプリケーションサーバーソフト「Node.js」の主な特徴
図1●Webアプリケーションサーバーソフト「Node.js」の主な特徴
[画像のクリックで拡大表示]

 一つめの特徴は、ピグライフのように1万台規模のクライアントからのアクセス要求をさばけることだ。従来のWebサーバーとは異なる「ノンブロッキングI/O(インプット/アウトプット)」と呼ばれる考え方を取り入れることで、これを実現する。

 この考え方は、スターバックスの接客方式をイメージすると分かりやすい。客はレジで注文と支払いを済ませると、配膳口近くで注文した飲み物ができるのを待つ。飲み物ができたかどうかに関係なく、レジでは次々と注文を受け付ける。配膳口では、できた順に商品を客に渡す。このため昼時に多数の来客があっても、レジ前の行列はできにくい。

 Node.jsのメカニズムもこれに近い。時間がかかっている処理の完了を待つことなく、次の処理を実行する。通信相手との同期をとらず、処理完了も待たず、一つのプロセスで次々と処理をこなす。そのため「非同期処理」とも呼ばれる。

 実はWebアプリケーションサーバーの多くは、「C10K問題」と呼ばれる難題を抱えている。アクセスするクライアント数が1万を超えると、サーバーのスレッド(並列処理の単位)数が増えすぎて、サーバーのメモリーなどのリソースが不足してしまうという問題だ。そのため、プロセッサの処理能力に余裕があっても、サーバーの台数を増やさねばならず、大規模なシステムを運用する必要が生じる。一方、非同期処理のNode.jsの場合は、このC10K問題が起きない。