web creators特別号 |
HTML5・スマートフォン・SNS・Webアプリケーション Webサイト制作最新トレンドの傾向と対策 |
Webアプリ・リッチコンテンツ 3-02
Node.jsによってサーバの負荷を軽減する
サーバサイドでJavaScriptを用いることはメリットが大きいが、これまでは開発環境に乏しく、PerlやPHPの代替となるにはいたらなかった。それが最近、Node.jsの発展とともに、JavaScriptは新しいステージへ進みつつある。
制作・文/白木達也(アローグ・プランニングス)、飯塚まり子
Browser Firefox 6over Safari 5over Chrome 4over
C10K問題を解消する Node.js
これまで、Webアプリケーションの制作で主流だったのはPHPやPerl、ASP.NETなどのプログラミング言語だった。もちろん、JavaScriptも広く普及はしているが、これらは主にクライアントのローカルPC上でサービスを提供するために用いられることが多く、サーバサイドのWebアプリケーション開発に用いられることはあまりなかった。しかし最近、この状況が変化しつつあり、サーバ側の実装にもJavaScriptが用いられる例が増えてきた。当然理由がある。それはNode.js 【01】の開発が進んできたことにより、JavaScriptを活用したWebサイトがC10K問題と無縁になりつつあるためだ。
たとえば、【02】のようなプログラムを考えてみよう。
このプログラムを「hello.js」として保存し、「node hello.js」として実行すると、8124ポートでhttpサーバが起動する。ここにアクセスすると「hello world」というテキストが表示される【03】。Node.jsを利用したプログラムの一例だ。
しかし、いうまでもないことだが、このような挙動はJavaScriptはもちろん、ほかの言語やWebサーバ環境でも実現できる。その意味で、Node.jsに目新しい点は特にない。
実現できる機能に変わりがないなら、Node.jsを利用するメリットはいったいどこにあるのだろうか。それは、クライアントからの大量同時接続を、余裕を持って処理できるという点である。
httpサーバの性能に問題がなかったとしても、クライアントからの同時接続数が多くなれば、インプットとアウトプットをサーバが処理しきれなくなり、最悪の場合にはシステムダウンを招く。これがいわゆるC10K問題(クライアント一万台問題)である。
JavaやPHPでは、クライアントに接続するごとに新しいスレッドが生成されるが、1つのスレッドが潜在的に2MBのメモリを必要とする。具体的には、4GBメモリのhttpサーバ(OSが32ビットである場合の主流)に対しては、同時接続可能なユーザは2000人に限られることになる。つまり、ネットワーク上のボトルネックは、サーバの能力でもネットワークの帯域幅でもなくOSにある。
一方でNode.jsは、各クライアントの接続に際して、Node.js環境の内部でイベントを立ち上げる。すなわち、ひとつの接続に対する処理が終わる前に次のプロセスに移れるため、同時接続可能数が飛躍的に増大する。これがNode.jsを用いたときの最大のメリットである【04】。
これにより、SNSなど送られたメッセージのアラートをすぐに表示させる、ブラウザでのチャット発言などをタイムラグなく表示させる、リアルタイムかつ複数人で絵を描くといった機能(これまでなら数十秒ごとにブラウザでリロードすることにより実現させていた機能)を、自動的にブラウザで実現できるようになることなどが期待されている。
現在、Node.jsは開発途上であり、頻繁にバージョンアップがされている。そのプロセスは常にオープンであり、誰でもアクセスできる。サーバサイドJS開発環境の立ち上げに関わりたい方は、ぜひアクセスしてみるのをお勧めしたい。
【01】Node.js日本ユーザグループのウエブサイト(http://nodejs.jp/)。メーリングリストや公式ドキュメントの日本語訳版、Node.jsを生み出した背景や内部実装についての解説である「Node.js とは何か」といったドキュメントなど、情報収集の最初の一歩として使える。
【02】ごく単純なNode.jsのコードの例。listen要素で8124ポートのhttpサーバを動かしている様子がわかるだろう。
【03】【02】のコードをブラウザで実行した様子。あれだけのコードだと単純なテキストが表示されるだけだが、もっと重いコードになっても遷移は軽やかになった印象を受ける。
【04】node-js-vs-apache-php-benchmark(http://code.google.com/p/node-js-vs-apache-php-benchmark/wiki/Tests)
並行処理数(concurrency)とそれに要した時間について、Apach/PHP と Node.JSを比較したもの。並行処理数が400を超えると突然Apach/PHPの処 理速度が遅くなることがわかる。一方でNode.JSはほぼ同じ処理速度をキープしている。
開発環境と開発事例
Node.jsの開発環境や事例、サービスなどをいくつか紹介しよう。Cloud9 IDE
現在、Node.jsはまだ発展途上ということもあり、頻繁にバージョンアップが行われている。それに伴って開発環境も随時変わっていくが、いちいちフォローするのは面倒だ。そういった手間が省けるIDE(統合開発環境)がCloud9 IDEだ。Web ブラウザで動作するIDE で、 JavaScriptプログラムの実行・デバッグが可能。Cloud9 IDE自身も、node.jsを使って作られている。オープンソースのプロジェクトについては無償【05】。
【05】Cloud9 IDE(http://cloud9ide.com/)
マルチデバイスLab
HTML5とCSS3とnode.jsを使って開発されたティザーサイト。複数のブラウザでアクセスすると、マウスポインタやブラウザの情報が双方で共有されているのがわかる【06】。【06】マルチデバイスLab (http://mdlab.jp:3000/)
Hummingbird
Webのトラフィックをリアルタイムにビジュアライズする。こちらもnode.jsを活用した開発事例だ【07】。【07】Hummingbird(http://projects.nuttnet.net/hummingbird/)
Node Ninja
Webのトラフィックをリアルタイムにビジュアライズする。こちらもnode.jsを活用した開発事例だファーストサーバが提供する日本発のNode.js専用クラウドホスティングサーバだ。2011年11月現在、限定的にベータ版が公開されている【08】。【08】Node Ninja(https://node-ninja.com/)
maptail.js
Node.js上で動作するアプリケーション。Apachのアクセスログを読み込ませると、その中のIPアドレスをもとにしてユーザのアクセス元の地域を割り出し、世界地図の上にビジュアライズしてくれる【09】。【09】maptail.js(https://github.com/stagas/maptail)
[目次に戻る]
【本記事について】
2012年1月28日発売のweb creators特別号「Webサイト制作最新トレンドの傾向と対策」から、毎週記事をピックアップしてご紹介! HTML5・CSS3によるコーディングから、次々と生まれてくる新しいソーシャルサービス、Webアプリケーション、スマートフォンやタブレット端末への対応など、いまWeb制作で話題になっているトピックを網羅した内容になっています。
※本記事はweb creators特別号『Webサイト制作最新トレンドの傾向と対策』からの転載です。この記事は誌面でも読むことができます。