Node.js について調べてまとめてみた

Node.jsはお仕事で大変お世話になっています。
もはやNode.jsなしでは立ち行きません。

当たり前のようにNode.jsを使ってコーディングしたりしていましたが、ある日ふと「Node.jsの正体をわたしは知らない」と気づきました。

というわけで、Node.jsについて調べて憧れの先輩のように使いこなせるようになろう!!と思い立った次第です。
わたしなりに調べてまとめたものを備忘録に残します。

Node.jsとは

Node.jsは簡単に言うと「C++で記述された高速なJavaScriptインタプリタ」です。
JavaScriptで動作するサーバ環境を用意することができます。

つまり、JavaScriptの知識だけでWebサーバーを立ち上げたりすることが出来ちゃうのです!

少し前まではWebサーバを立ち上げるためにPHPやPerlといったサーバサイドスクリプト言語の知識が必要でした。
ところが、Node.jsの登場でサーバサイドスクリプト言語の知識がなくてもJavaScriptのみで立ち上げられるようになったのです。

改めてNode.jsのすごさがわかりました。

Node.jsの主な特徴

  • JavaScriptでサーバサイドの処理を実装する
  • 非同期I/O、ノンブロッキングI/Oモデルを採用
  • イベント駆動型である
  • シングルスレッドである
  • Googleの「V8」という優秀なJSエンジンで動作する

これらの特徴から、チャットアプリのようなリアルタイムで大量のデータを扱うようなサービスに向いています。

逆に向いていないことは、CPUリリースを大量に必要とするような処理を頻繁に行うようなプログラム、あるいは、あまりイベントが発生しない静的なサイトです。

イベント駆動型とは

イベント駆動型とは、コンピュータプログラムが起動するとともに、イベントを待機して発生したイベントに従って受動的に処理を行うプログラミングパラダイムのことです。

プログラムを立ち上げた瞬間に処理を行うのではなく、いわゆる「クリックイベント」のようなユーザーが何らかの動作をしたときに処理を行うようなタイプですね。

シングルスレッドとは

シングルスレッドとは、プログラムの処理が単一に行われることを指します。
その反語は「マルチスレッド」です。
スレッドは英語でthread であり、意味は「最小の処理単位」です。

Node.jsはシングルスレッドなので、どんなに接続数が増えてもスレッドがメモリを食い潰すことがありません。

しかし、シングルスレッドは1つのイベントの処理が重たい場合、大量のリクエストを待たせてしまうことがあります。
システムがエラーを起こせばサーバダウンへとつながる可能性があります。

この問題を解決したのがノンブロッキングI/Oモデルです。

非同期I/O、ノンブロッキングI/Oモデルとは

非同期I/O、ノンブロッキングI/Oモデルでシングルスレッド問題いわゆる「C10K問題」を解決しました。
ノンブロッキングI/Oモデルでイベントループ上で多くのアクセスを並行的に処理します。
これによって大量のアクセスを効率的に処理することができるようになったのです。

つまり、大量のスレッドが実行の終了を待たずに次から次へと並行して処理ができるようになりました。

C10K問題:一度に大量のユーザーがサーバーにアクセスすると、それに従って待ち時間が発生し、CPUやメモリを十分に積んでいてもアプリの動作が重くなってしまう問題

あとがき

非同期I/O、ノンブロッキングI/Oモデルが一番難しいです。
とりあえず「スレッドが待たずに並行的に処理されるようになるすごいやつ」と認識しました。

すこしだけなんとなくNode.jsが何かわかりました。
実際にウェブサーバとして立ち上げてみたいです。

フレームワークを使うことが一般的らしいので、Node.jsでつかうフレームワークについて調べようと思います。

フォローお願いします