More Related Content Similar to 東京Node学園#3 Domains & Isolates Similar to 東京Node学園#3 Domains & Isolates (20) 東京Node学園#3 Domains & Isolates2. 自己紹介
@koichik, id:koichik
JavaScriptとの関わり
1997年頃に仕事でServer-Side JavaScript
Netscape LiveWire, Microsoft IIS
Nodeとの関わり
2010/08から触り始める
APIドキュメント翻訳
node-handlersocket
2011/07から (なぜか) コアチーム入り
ろくに貢献できてないので頑張りますー
3. Node安定版の歴史
v0.2 (2010/08/20)
v0.4 (2011/02/10)
SSL/TLSのオーバーホール
新しいHTTPクライアントAPI
組み込みデバッガ
v0.6 (2011/11/04)
ネイティブWindowsサポート
クラスタリング
さらに新しいHTTPクライアントAPI
4. 次期安定版
v0.8
2012/01リリース予定
V8のリリースサイクルに合わせて
短期間で頻繁なリリースを目指す
新機能の目玉
Domains
Isolates
8. エラーハンドリング
EventEmitterで'error'イベントが発生
リスナがなければ例外がスローされる
例外がイベントループに達する
processで'uncaughtException'イベントが発生
processで'uncaughtException'イベントが
発生
リスナがなければスタックトレースを
出力してプロセスは終了
http://d.hatena.ne.jp/koichik/20111213
10. そこで
関連するイベントをひとまとめに
それがDomains
適切な粒度でエラーハンドリング可能
Domainsにまとめられるイベント
対応モジュール (11/12/13時点)
net (tls, http, https)
dns
fs
timers
handleとして抽象化
13. 「現在の」ドメイン
(デフォルトドメイン)
デフォルトドメインに
関連
var req = http.request(...);
var myDomain = domains.createDomain(null, function() {
(myDomain)
これらは
var req = http.request(...); myDomainに
関連
setTimeout(function() {...}, 10000);
デフォルトドメインに
}); 関連
setTimeout(function() {...}, 10000);
16. エラーハンドリング (v0.8~)
EventEmitterで'error'イベントが発生
リスナがなければ例外がスローされる
例外がイベントループに達する
非デフォルトドメイン実行中ならそのドメインで
'error'イベントが発生
デフォルトドメイン実行中ならprocessで
'uncaughtException'イベントが発生
processで'uncaughtException'イベントが発生
リスナがなければスタックトレースを出力して
プロセスは終了
17. domainsのその他API
domains.getCurrent()
現在のドメインを返す
domains.add(handle)
handleを現在のドメインに追加
domains.remove(handle)
handleを現在のドメインから削除
domains.addDefaultDomain(handle)
handleをデフォルトドメインに追加
21. かなり昔のV8
V8
static変数を多用 Context
マルチスレッド非対応
Context
複数の「Context」を利用可能
独立した空間
Chromeでは<iframe>ごとに
Contextを作成
Nodeではvmモジュールで
利用可能
22. 今時のV8
Isolate
独立したVMのインスタンス
1プロセスで複数のIsolateを利用可能
マルチスレッド対応
Isolateは複数のContextを利用可能
V8
Isolate Isolate Isolate
Context Context Context
Context Context Context
26. IsolatesのAPI (2)
高水準API
child_process改めexec.fork()
Isolatesが有効だと子プロセスではなく
別スレッドでV8 Isolateを起動
同じアプリをマルチプロセスでも
マルチスレッドでも実行可能に
もちろんcluster.fork()も同様
27. cluster
デフォルト Isolates有効
(Isolates無効)
Process
Process Isolate
(Master) (Master)
Process Process Isolate Isolate
(Worker) (Worker) (Worker) (Worker)
29. クラウド企業に支えられるNode
コアメンバーの6/8が関連企業に所属
Joyent @ry @isaacs @piscisaureus Cloud9 IDE
Rackspace @bnoordhuis @pquerna @igorzi Microsoft
33. Isolatesの狙い (推測)
性能 (CPU以外のボトルネックがなければ)
複数VM ≒ 複数プロセス ≒ 複数スレッド
必要なリソース
複数VM > 複数プロセス > 複数スレッド
Isolatesにより
PaaS提供側のメリット
少ないリソースで同等の性能を提供可能
PaaS利用側のメリット
同等の性能を低コストで利用可能