SlideShare a Scribd company logo
1 of 20
Download to read offline
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

More Related Content

What's hot

Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築AimingStudy
 
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発するHiroyuki Kusu
 
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるづや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるzuya
 
Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術Isamu Suzuki
 
PHPでWebSocketを実装してみてわかったこと
PHPでWebSocketを実装してみてわかったことPHPでWebSocketを実装してみてわかったこと
PHPでWebSocketを実装してみてわかったことksimoji
 
サーバサイドNodeの使い道
サーバサイドNodeの使い道サーバサイドNodeの使い道
サーバサイドNodeの使い道pospome
 
Frontend Fantasy 〜ミスリルの戦士たち〜
Frontend Fantasy 〜ミスリルの戦士たち〜Frontend Fantasy 〜ミスリルの戦士たち〜
Frontend Fantasy 〜ミスリルの戦士たち〜Masashi MATSUI
 
MySQL Fabricつらい
MySQL FabricつらいMySQL Fabricつらい
MySQL Fabricつらいyoku0825
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたしRyunosuke SATO
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺Yusuke Wada
 
worker_threadsを使った実装の勘所
worker_threadsを使った実装の勘所worker_threadsを使った実装の勘所
worker_threadsを使った実装の勘所yo_waka
 
Sails.jsのメリット・デメリット
Sails.jsのメリット・デメリットSails.jsのメリット・デメリット
Sails.jsのメリット・デメリットIto Kohta
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011Hiroh Satoh
 
Rubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawlerRubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawlerTakuro Sasaki
 
はじめる Ember.js!! ~ Getting started with ember.js ~
はじめる Ember.js!! ~ Getting started with ember.js ~はじめる Ember.js!! ~ Getting started with ember.js ~
はじめる Ember.js!! ~ Getting started with ember.js ~Ryunosuke SATO
 
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~Ryunosuke SATO
 
これからはじめるひとのためのdev.mysql.com
これからはじめるひとのためのdev.mysql.comこれからはじめるひとのためのdev.mysql.com
これからはじめるひとのためのdev.mysql.comyoku0825
 
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話Yutaro Miyazaki
 

What's hot (20)

Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築
 
Node js 入門
Node js 入門Node js 入門
Node js 入門
 
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
 
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるづや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
 
Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術
 
PHPでWebSocketを実装してみてわかったこと
PHPでWebSocketを実装してみてわかったことPHPでWebSocketを実装してみてわかったこと
PHPでWebSocketを実装してみてわかったこと
 
サーバサイドNodeの使い道
サーバサイドNodeの使い道サーバサイドNodeの使い道
サーバサイドNodeの使い道
 
片手間JS on Rails
片手間JS on Rails片手間JS on Rails
片手間JS on Rails
 
Frontend Fantasy 〜ミスリルの戦士たち〜
Frontend Fantasy 〜ミスリルの戦士たち〜Frontend Fantasy 〜ミスリルの戦士たち〜
Frontend Fantasy 〜ミスリルの戦士たち〜
 
MySQL Fabricつらい
MySQL FabricつらいMySQL Fabricつらい
MySQL Fabricつらい
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたし
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
 
worker_threadsを使った実装の勘所
worker_threadsを使った実装の勘所worker_threadsを使った実装の勘所
worker_threadsを使った実装の勘所
 
Sails.jsのメリット・デメリット
Sails.jsのメリット・デメリットSails.jsのメリット・デメリット
Sails.jsのメリット・デメリット
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 
Rubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawlerRubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawler
 
はじめる Ember.js!! ~ Getting started with ember.js ~
はじめる Ember.js!! ~ Getting started with ember.js ~はじめる Ember.js!! ~ Getting started with ember.js ~
はじめる Ember.js!! ~ Getting started with ember.js ~
 
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~
 
これからはじめるひとのためのdev.mysql.com
これからはじめるひとのためのdev.mysql.comこれからはじめるひとのためのdev.mysql.com
これからはじめるひとのためのdev.mysql.com
 
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
 

Viewers also liked

Webサイト・フロントエンドの高速化とgrunt.jsについて
Webサイト・フロントエンドの高速化とgrunt.jsについてWebサイト・フロントエンドの高速化とgrunt.jsについて
Webサイト・フロントエンドの高速化とgrunt.jsについてTomo Fujita
 
2012 ACS Skolnik Symposium - ChemSpotlight
2012 ACS Skolnik Symposium - ChemSpotlight2012 ACS Skolnik Symposium - ChemSpotlight
2012 ACS Skolnik Symposium - ChemSpotlightGeoffrey Hutchison
 
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
今年使ってみて良かった、Pythonモジュール、パッケージ、ツールaoshiman
 

Viewers also liked (6)

osakar20101202
osakar20101202osakar20101202
osakar20101202
 
Webサイト・フロントエンドの高速化とgrunt.jsについて
Webサイト・フロントエンドの高速化とgrunt.jsについてWebサイト・フロントエンドの高速化とgrunt.jsについて
Webサイト・フロントエンドの高速化とgrunt.jsについて
 
2012 ACS Skolnik Symposium - ChemSpotlight
2012 ACS Skolnik Symposium - ChemSpotlight2012 ACS Skolnik Symposium - ChemSpotlight
2012 ACS Skolnik Symposium - ChemSpotlight
 
20151121
2015112120151121
20151121
 
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
 
Shizuoka go lang csp
Shizuoka go lang cspShizuoka go lang csp
Shizuoka go lang csp
 

Similar to Nodeにしましょう

Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようTakayuki Shimizukawa
 
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウKentarou Mukunasi
 
僕の Serverless web application
僕の Serverless web application僕の Serverless web application
僕の Serverless web application祐樹 夏目
 
2006-04-22 CLR/H #14 .NET and open source
2006-04-22 CLR/H #14 .NET and open source2006-04-22 CLR/H #14 .NET and open source
2006-04-22 CLR/H #14 .NET and open sourceYoshiyuki Nakamura
 
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組みKouji Matsui
 
OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -将 高野
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについてMasahito Zembutsu
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And JekyllYoji Shidara
 
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。Akihiro Kuwano
 
たのしいNode.js
たのしいNode.jsたのしいNode.js
たのしいNode.jsishiki-takai
 
120418 tokyo node5_lin_qonnodejs
120418 tokyo node5_lin_qonnodejs120418 tokyo node5_lin_qonnodejs
120418 tokyo node5_lin_qonnodejsTakayoshi Tanaka
 
GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!leverages_event
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会Takayuki Shimizukawa
 
Rodから聞いたことを全部話すぜ
Rodから聞いたことを全部話すぜRodから聞いたことを全部話すぜ
Rodから聞いたことを全部話すぜHiroki Kondo
 
コマンドライン使いもLibreOffice
コマンドライン使いもLibreOfficeコマンドライン使いもLibreOffice
コマンドライン使いもLibreOfficeKiwamu Okabe
 
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~Atsushi Harada
 

Similar to Nodeにしましょう (20)

Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
 
Djangoのススメ
DjangoのススメDjangoのススメ
Djangoのススメ
 
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ
 
僕の Serverless web application
僕の Serverless web application僕の Serverless web application
僕の Serverless web application
 
2006-04-22 CLR/H #14 .NET and open source
2006-04-22 CLR/H #14 .NET and open source2006-04-22 CLR/H #14 .NET and open source
2006-04-22 CLR/H #14 .NET and open source
 
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
 
OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And Jekyll
 
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
オンプレエンジニアがクラウドエンジニアを夢見て。じっと手を見る。
 
たのしいNode.js
たのしいNode.jsたのしいNode.js
たのしいNode.js
 
120418 tokyo node5_lin_qonnodejs
120418 tokyo node5_lin_qonnodejs120418 tokyo node5_lin_qonnodejs
120418 tokyo node5_lin_qonnodejs
 
Start-padrino
Start-padrinoStart-padrino
Start-padrino
 
GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!
 
Bp study39 nodejs
Bp study39 nodejsBp study39 nodejs
Bp study39 nodejs
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
 
Rodから聞いたことを全部話すぜ
Rodから聞いたことを全部話すぜRodから聞いたことを全部話すぜ
Rodから聞いたことを全部話すぜ
 
コマンドライン使いもLibreOffice
コマンドライン使いもLibreOfficeコマンドライン使いもLibreOffice
コマンドライン使いもLibreOffice
 
Osoljp201204
Osoljp201204Osoljp201204
Osoljp201204
 
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~
 

Nodeにしましょう

  • 1. Nodeにしましょう へびしま
  • 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かかるので、どうしてもこの現象は起こってしま す。 – 創意工夫で軽減できます。
  • 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にすれば開発環境を統一で きて、教育を含めた開発コストが削減できる ※これはあくまで副産物
  • 13. 「こりゃプログラマは大変だ!」・・・どゆこと? ● Apacheは、十分優秀ですよ。 ● 案外Apache依存してない? – 今あるモジュールの代替って大変じゃない? ● アプリケーションサーバにある資産(フレームワークや独自 実装など)を使えなくて大丈夫ですか? ※トップレベルのOSS開発者が名乗りをあげて作り始め ていて、結構充実しています。 ● 既存の仕組みが、どの位のモジュールを使用しているか? 再度開発するような勢いがあるサービスであるか?
  • 14. じゃーどこで使うの? ● ソーシャルアプリの一部で使用 – より多くの処理をこなせる ● 既存Webの一部をリアルタイムWebに – twitterとかfacebook風に。 ● ファイルアップロード – WebSocketでアップロード容量のやり取りとかやってみたり? ● 既にFlashでは可能ですね。 ● 静的なページの処理 – JavaScriptというより、HTMLになりますけどね。
  • 15. とにかくNodeの特性を活かすこと ● 君はノンブロッキングでいれるか? – これを殺してしまうような実装であってはいけない ● 君はいままでの資産を捨てられるか? – 既存サービスの再構築 – JavaScriptへの一元化の効果が上回るか? – Ruby等でもイベントループモデルはあります。 ● 君はマルチコアでのスケールアウトを確認しなくていいのか? ● 割愛しましたが、新しいバージョンでは、forkする実装ができたみたい。 ● 君はNodeの使えるホスティング、クラウドか? ● 君はそもそもそんなに接続をさばくサービスなのか?
  • 17. おまけ ● Nginxと組み合わせてみては? ● Nginx単体でも結構な量を裁けます。 ● NoSQLを試してはいかが? ● 大量データをさばくには相性が良い ● Googleの「Dart」を待つ ● Intelの「RiverTrail」を使用してみる ● FireFoxのアドオンです。 ● OpenCLを利用した並列処理が可能
  • 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