サーバーサイドJavascript

古来、サーバーサイドといえば、PerlPHPPythonなどが主流だった。それらも同じくスクリプトだが、このnode.jsでは実装方法が異なる。PerlなどのスクリプトCGIと呼ばれる形で動作する。Apache+PHPなどは厳密にはCGIではないが、それでもApacheなどのhttpdが必要になる。
しかし、node.jsの実装は違う。これは単体でhttpdになるのだ。そして、受け取ったクエリを元に、加工したデータを返すプログラムを書くことができる。これは何を意味するのか。ズバリ、高速化だ。例えばPerlApacheから呼び出す場合、perlインタプリタプロセスを起動する時にオーバーヘッドが発生する。これを防ぐためにmod_perlFastCGIなどもあるが、Apacheperlの間にオーバーヘッドが発生することに変わりない。node.jsは内部で全てを処理するため無駄を少なくできる。
こう言うと、「Javascripthttpdなんて、それ自体が低速で使い物にならないだろう」と反論する人がいるかもしれない。しかし、node.jsで作ったhttpdはとても高速に動作する。少なくとも、Apache+mod_perlよりは高速だろう。
その理由は二つある。ひとつはnode.jsはJavascriptエンジンにGoogle Chromに搭載されていて超高速なことで有名なV8エンジンを使っているから。そして、もうひとつはepoll/kqueueを使ったイベント駆動型だから。このイベント駆動型のhttpdは高負荷時に強い。軽度のDoS攻撃なら何も起きていないように振舞うだろう。
実は、もうひとつ理由がある。それはnode.jsに組み込まれているhttp parserがC言語フルスクラッチされたとても高速なものだということだ。node.jsの作者はとても速度に気を使っているらしく、世にあるライブラリの速度が遅いと感じれば自分でフルスクラッチしてしまうようだ。実に恐ろしい話である。
さて、今日の自慢話はこのあたりにしておこう。念ののため書いておくが、第3回は無い可能性の方が高い。