Nodeにしましょう
    へびしま
じこしょうかい
●   エンジニア◎リング(#enginee_ring) のオーナーです。
●   残念ながらJSperではない。
●   twitter:[secondarykey]
      –   呑んだくれなのでシステムの事なんて滅多に言わない。
      –   静岡の勉強会の事は言ってます。
●   静岡市内でコード書いてます

●   フォントは「あんずもじ」です。
SimonWillison は言いました
          ※画像は本人さんのブログより




「Node.js is genuinely exciting!」
       訳:Nodeはマジパねぇー
   PythonのWebフレームワークの1つDjangoの開発者
  サイモンさんが2009年11月の欧州のカンファレンスで
          話す内容を変更してまで語った
NodeはRubyOnRails以来のドキドキ

  タイトルは「Nodeにしましょう」ですが
     ※これは発表が決まった時に野田首相が代表選後に
    「ノーサイドにしましょう」って言ったから生まれた言葉です


     Nodeは、なぜ生まれ、
    使われ始めたのでしょうか?
そこを知らないと間違った使い方をしてしまう
   そういう観点でお聞きください。
       今日ってWeb屋さんが多いのかな?
Nodeの特徴
●   Node自体はソケットを作成するもの
    ●
        Webサーバだけではない。WebSocketも(socket.io)使える。
●   イベントループを使った非同期処理 ※後述
●   ノンブロッキング処理 ※後述
●   現在、0.5.7ですが、安定版は偶数系、開発版が奇
    数って感じで開発されています。

●   様々なベンチマークで高速な事は出てますが、あえて言
    及せずに特徴をだけに注目していきましょう。
出尽くしたデモですが。。。

var http = require('http');
http.createServer( function (req, res) {
   res.writeHead(200, {'Content-Type': 'text/html'});
   res.write('<h1>Hello World</h1>n');
  res.end();
}).listen(8080, "127.0.0.1");
console.log('Server running');
背景には「C10K問題」
●   クライアントの同時接続数1万を超えた時の問題
●   現在のソケットプログラミングモデルは1接続に対して最
    低2MBかかるので、どうしてもこの現象は起こってしま
    す。
     –   創意工夫で軽減できます。
通常のスレッド処理モデル




  Simonさんの資料から拝借
ねずみ:リクエスト、うさぎ:スレッド
Nodeの処理モデル




    Simonさんの資料から拝借
ねずみ:リクエスト、たこ:Node(1プロセス)
I/Oもノンブロッキング!!
●   通常の処理
     var result = db.query("select * from T");
     // 結果を処理
●   Nodeでの処理
     db.query("select * from T", function (result) {
      // 結果を処理
     });
    ※なので実装によるブロッキングに注意する事です。
              少しデモを。。。
なぜJavaScriptなのか?
●   開発者がイベントループモデルを探していたらこうなった
●   たまたまV8エンジンによる高速化
    ●
        どの言語でも良かったと開発者は言っている
        –   実際イベントループモデルは他の言語であります。
    ●   CommonJS準拠※、Libev、Libeio
        ※ほんの一部だけであって、開発者は既に眼中にない

●   サーバサイドをJavaScriptにすれば開発環境を統一で
    きて、教育を含めた開発コストが削減できる
        ※これはあくまで副産物
@kohjuさんは言いました。



「こりゃプログラマは大変だ!」
kohju(紅呪)氏
 静岡Webデベロッパーズフォーラム飲み会 総帥
「こりゃプログラマは大変だ!」・・・どゆこと?
●   Apacheは、十分優秀ですよ。
    ●   案外Apache依存してない?
        –   今あるモジュールの代替って大変じゃない?
●   アプリケーションサーバにある資産(フレームワークや独自
    実装など)を使えなくて大丈夫ですか?
    ※トップレベルのOSS開発者が名乗りをあげて作り始め
    ていて、結構充実しています。

●   既存の仕組みが、どの位のモジュールを使用しているか?
    再度開発するような勢いがあるサービスであるか?
じゃーどこで使うの?
●   ソーシャルアプリの一部で使用
     –   より多くの処理をこなせる

●   既存Webの一部をリアルタイムWebに
     –   twitterとかfacebook風に。
●   ファイルアップロード
     –   WebSocketでアップロード容量のやり取りとかやってみたり?
          ●   既にFlashでは可能ですね。
●   静的なページの処理
     –   JavaScriptというより、HTMLになりますけどね。
とにかくNodeの特性を活かすこと
●   君はノンブロッキングでいれるか?
        –   これを殺してしまうような実装であってはいけない
●   君はいままでの資産を捨てられるか?
        –   既存サービスの再構築
        –   JavaScriptへの一元化の効果が上回るか?
        –   Ruby等でもイベントループモデルはあります。
●
    君はマルチコアでのスケールアウトを確認しなくていいのか?
    ●   割愛しましたが、新しいバージョンでは、forkする実装ができたみたい。
●   君はNodeの使えるホスティング、クラウドか?
●   君はそもそもそんなに接続をさばくサービスなのか?
ただ、、、
Nodeはマジパねぇーので
   是非お試しを!
おまけ
●   Nginxと組み合わせてみては?
    ●
        Nginx単体でも結構な量を裁けます。
●   NoSQLを試してはいかが?
    ●
        大量データをさばくには相性が良い

●   Googleの「Dart」を待つ
●   Intelの「RiverTrail」を使用してみる
    ●
        FireFoxのアドオンです。
    ●
        OpenCLを利用した並列処理が可能
ご清聴ありがとうございました!
引用・参考文献
●   Node本家
    ●
        http://nodejs.org/
●   SimonWillisonさんの負荷周りの資料(2009年)
    ●   http://s3.amazonaws.com/four.livejournal/20091117/jsconf.pdf
●   ニュースの社会科学的な裏側「node.jsは普及しそうにない」
    ●
        http://www.anlyznews.com/2011/02/nodejs.html
●   @IT 「node.jsでサーバサイドJavaScript開発入門」
    ●
        http://www.atmarkit.co.jp/fwcr/rensai2/nodejs02/01.html
静岡の開発系勉強会情報
●
    静岡ITPro勉強会
    ●   http://groups.google.com/group/shizuoka-itpro-workshop?hl=ja
    ●
        インフラ部
         –   http://groups.google.com/group/shizuinfra?hl=ja
●
    静岡Developers勉強会(読書会で次回からHTML5)
    ●   http://www.shizu-dev.org/
    ●
        つくる会                                                    CSS Nite in SHIZUOKA
         –   http://atnd.org/events/18507                             TalkNote
                                                                  ライフハック系等
●
    エンジニア◎リング                                                  ドンドン勉強会増えてます!

    ●   http://groups.google.com/group/enginee-ring
●
    静岡Webデベロッパーフォーラム飲み会
    ●   https://groups.google.com/group/swebdev?hl=ja
●
    クラウド・カンファレンス in 静岡(第2弾計画中)
    ●   http://atnd.org/events/19129

Nodeにしましょう

  • 1.
  • 2.
    じこしょうかい ● エンジニア◎リング(#enginee_ring) のオーナーです。 ● 残念ながらJSperではない。 ● twitter:[secondarykey] – 呑んだくれなのでシステムの事なんて滅多に言わない。 – 静岡の勉強会の事は言ってます。 ● 静岡市内でコード書いてます ● フォントは「あんずもじ」です。
  • 3.
    SimonWillison は言いました ※画像は本人さんのブログより 「Node.js is genuinely exciting!」 訳:Nodeはマジパねぇー PythonのWebフレームワークの1つDjangoの開発者 サイモンさんが2009年11月の欧州のカンファレンスで 話す内容を変更してまで語った
  • 4.
    NodeはRubyOnRails以来のドキドキ タイトルは「Nodeにしましょう」ですが ※これは発表が決まった時に野田首相が代表選後に 「ノーサイドにしましょう」って言ったから生まれた言葉です Nodeは、なぜ生まれ、 使われ始めたのでしょうか? そこを知らないと間違った使い方をしてしまう そういう観点でお聞きください。 今日ってWeb屋さんが多いのかな?
  • 5.
    Nodeの特徴 ● Node自体はソケットを作成するもの ● Webサーバだけではない。WebSocketも(socket.io)使える。 ● イベントループを使った非同期処理 ※後述 ● ノンブロッキング処理 ※後述 ● 現在、0.5.7ですが、安定版は偶数系、開発版が奇 数って感じで開発されています。 ● 様々なベンチマークで高速な事は出てますが、あえて言 及せずに特徴をだけに注目していきましょう。
  • 6.
    出尽くしたデモですが。。。 var http =require('http'); http.createServer( function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write('<h1>Hello World</h1>n');   res.end(); }).listen(8080, "127.0.0.1"); console.log('Server running');
  • 7.
    背景には「C10K問題」 ● クライアントの同時接続数1万を超えた時の問題 ● 現在のソケットプログラミングモデルは1接続に対して最 低2MBかかるので、どうしてもこの現象は起こってしま す。 – 創意工夫で軽減できます。
  • 8.
  • 9.
    Nodeの処理モデル Simonさんの資料から拝借 ねずみ:リクエスト、たこ:Node(1プロセス)
  • 10.
    I/Oもノンブロッキング!! ● 通常の処理  var result = db.query("select * from T");  // 結果を処理 ● Nodeでの処理  db.query("select * from T", function (result) {   // 結果を処理  }); ※なので実装によるブロッキングに注意する事です。           少しデモを。。。
  • 11.
    なぜJavaScriptなのか? ● 開発者がイベントループモデルを探していたらこうなった ● たまたまV8エンジンによる高速化 ● どの言語でも良かったと開発者は言っている – 実際イベントループモデルは他の言語であります。 ● CommonJS準拠※、Libev、Libeio ※ほんの一部だけであって、開発者は既に眼中にない ● サーバサイドをJavaScriptにすれば開発環境を統一で きて、教育を含めた開発コストが削減できる ※これはあくまで副産物
  • 12.
  • 13.
    「こりゃプログラマは大変だ!」・・・どゆこと? ● Apacheは、十分優秀ですよ。 ● 案外Apache依存してない? – 今あるモジュールの代替って大変じゃない? ● アプリケーションサーバにある資産(フレームワークや独自 実装など)を使えなくて大丈夫ですか? ※トップレベルのOSS開発者が名乗りをあげて作り始め ていて、結構充実しています。 ● 既存の仕組みが、どの位のモジュールを使用しているか? 再度開発するような勢いがあるサービスであるか?
  • 14.
    じゃーどこで使うの? ● ソーシャルアプリの一部で使用 – より多くの処理をこなせる ● 既存Webの一部をリアルタイムWebに – twitterとかfacebook風に。 ● ファイルアップロード – WebSocketでアップロード容量のやり取りとかやってみたり? ● 既にFlashでは可能ですね。 ● 静的なページの処理 – JavaScriptというより、HTMLになりますけどね。
  • 15.
    とにかくNodeの特性を活かすこと ● 君はノンブロッキングでいれるか? – これを殺してしまうような実装であってはいけない ● 君はいままでの資産を捨てられるか? – 既存サービスの再構築 – JavaScriptへの一元化の効果が上回るか? – Ruby等でもイベントループモデルはあります。 ● 君はマルチコアでのスケールアウトを確認しなくていいのか? ● 割愛しましたが、新しいバージョンでは、forkする実装ができたみたい。 ● 君はNodeの使えるホスティング、クラウドか? ● 君はそもそもそんなに接続をさばくサービスなのか?
  • 16.
  • 17.
    おまけ ● Nginxと組み合わせてみては? ● Nginx単体でも結構な量を裁けます。 ● NoSQLを試してはいかが? ● 大量データをさばくには相性が良い ● Googleの「Dart」を待つ ● Intelの「RiverTrail」を使用してみる ● FireFoxのアドオンです。 ● OpenCLを利用した並列処理が可能
  • 18.
  • 19.
    引用・参考文献 ● Node本家 ● http://nodejs.org/ ● SimonWillisonさんの負荷周りの資料(2009年) ● http://s3.amazonaws.com/four.livejournal/20091117/jsconf.pdf ● ニュースの社会科学的な裏側「node.jsは普及しそうにない」 ● http://www.anlyznews.com/2011/02/nodejs.html ● @IT 「node.jsでサーバサイドJavaScript開発入門」 ● http://www.atmarkit.co.jp/fwcr/rensai2/nodejs02/01.html
  • 20.
    静岡の開発系勉強会情報 ● 静岡ITPro勉強会 ● http://groups.google.com/group/shizuoka-itpro-workshop?hl=ja ● インフラ部 – http://groups.google.com/group/shizuinfra?hl=ja ● 静岡Developers勉強会(読書会で次回からHTML5) ● http://www.shizu-dev.org/ ● つくる会 CSS Nite in SHIZUOKA – http://atnd.org/events/18507 TalkNote ライフハック系等 ● エンジニア◎リング ドンドン勉強会増えてます! ● http://groups.google.com/group/enginee-ring ● 静岡Webデベロッパーフォーラム飲み会 ● https://groups.google.com/group/swebdev?hl=ja ● クラウド・カンファレンス in 静岡(第2弾計画中) ● http://atnd.org/events/19129