狠狠撸
Submit Search
東京Node学園#8 Let It Crash!?
?
14 likes
?
3,735 views
K
koichik
Follow
1 of 19
Download now
Download to read offline
More Related Content
東京Node学園#8 Let It Crash!?
1.
東京Node学園8時限目 @koichik
2.
Let It Crash? ?
Erlangのphilosophy/principle ? 耐障害性に優れた堅牢なコードを書くため ? Akka開発チームのブログ ? http://letitcrash.com/
3.
堅牢なコードを書く ? Defensive Programming ?
失敗に備える ? 引数/戻り値をチェックする、例外を捕まえる ? アプリがエラーから回復する ? 通常処理とエラー処理が混在 ? Let It Crash ? 失敗に備えない ? 例外を捕まえない→プロセスをクラッシュさせる ? スーパーバイザがエラーから回復する ? 通常処理とエラー処理が分離
4.
スーパーバイザ 1 2 3
4 5 6 S1 S2 S0 2 One for One All for One 5 retry retry
5.
JUST Let It
Crash!
6.
process.on('uncaughtException') ? v0.8.3~
7.
domain.on('error') ? v0.10.2~
8.
Let It Crash?
9.
No! ? Erlang ? 軽量プロセス
(細粒度) ? プロセスがクラッシュしても失う接続は0~高々1 ? 副作用がない ? プロセスのリトライが可能 ? Node.js ? 重量級のプロセス (粗粒度) ? プロセスがクラッシュすると数千~数万の接続を失う ? 副作用がある ? 再起動してもプロセスの状態を回復することは不可能
10.
副作用と例外 ? JavaScriptは副作用のある言語 ? Node.jsのコアライブラリも副作用を持つ ?
例外がスローされると未定義の状態になり得 る ? パフォーマンスが劣化するためNode.jsのコア ライブラリはtry~catchをほとんど使用していない ? 例外はNode.jsのコードも突き抜ける ? キャッチされない例外 ? Node.jsの状態を未定義に ? プロセスを終了すべき
11.
キャッチされない例外 libuv Node ランタイム アプリ 例外
12.
キャッチされない例外 libuv Node ランタイム Node モジュール アプリ 例外 後処理が 行われない
13.
Node.jsのprinciple ? Defensive Programming ?
例外を避ける ? API呼び出しの前にパラメータをチェックする ? 例外を捕まえる ? JSON.parse()とか ? Graceful Shutdown ? キャッチされない例外が発生 ? おだやかにプロセス終了 ? Clusterモジュール
14.
Worker ? Domainの'error'イベントリスナ ? マスタプロセスとのIPCを切断 ?
cluster.disconnect(); ? 新規接続の受け付けを終了 ? server.close(); ? 既存の接続が全て閉じるとプロセス終了 ? 一定時間経過後に強制終了 ? process.exit();
15.
Master ? ワーカからの'disconnect'イベントリスナ ? ワーカプロセスを再起動 ?
cluster.fork(); ? 一定時間経過後に旧ワーカを強制終了 ? worker.kill();
16.
cluster-master ? https://github.com/isaacs/cluster-master ? isaacs謹製のマスタプロセス用モジュール ?
ワーカの起動 ? 切断したワーカの再起動 ? 一定時間(5秒)経過後の強制終了 ? ワーカ数の増減 ? REPL
17.
課題 ? 接続時間が長いケース ? ファイルアップロード/ダウンロード ?
WebSocket ? SPDY ? ワーカの強制終了までにクライアントが 切断しない ? クライアントはサーバからの切断に 備える必要がある
18.
まとめ ? Defensive に
Programming かつ ? Graceful に Shutdown ? Let It Crashではなかった ? カッコわるい ? ErlangやHaskellがよければErlangやHaskellを使え ? by isaacs
19.
参考情報 ? https://github.com/joyent/node/issues/5114 ? https://github.com/joyent/node/issues/5149 ?
https://groups.google.com/d/msg/nodejs/4TYtu_ xnNJY/ZZgFFHNIKdAJ
Download now