SlideShare une entreprise Scribd logo
1  sur  19
Télécharger pour lire hors ligne
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
http.get('http://www.google.com/index.html', (res) => {
console.log(`Got response: ${res.statusCode}`);
// consume response body
res.resume();
}).on('error', (e) => {
console.log(`Got error: ${e.message}`);
});
app.use(function(err, req, res, next) {
console.error(err.stack);
res.status(500).send('Something broke!');
});
function myFunc() {
throw new Error(“Error”);
}
try {
myFunc();
} catch(err) {
// handle err
}
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
プロセスをしょうもないErrorで落とさないように頑張る

Contenu connexe

En vedette

爆速プレビュープロキシ pool
爆速プレビュープロキシ pool爆速プレビュープロキシ pool
爆速プレビュープロキシ poolmookjp
 
SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199Yoshitaka Kawashima
 
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?Yoshitaka Kawashima
 
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力Yoshitaka Kawashima
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南Mikiya Okuno
 
第二回IoT関連技術勉強会 ログ収集編
第二回IoT関連技術勉強会 ログ収集編第二回IoT関連技術勉強会 ログ収集編
第二回IoT関連技術勉強会 ログ収集編tzm_freedom
 
Heroku Changelog in 2013
Heroku Changelog in 2013Heroku Changelog in 2013
Heroku Changelog in 2013Ayumu Aizawa
 
第一回Web技術勉強会 efkスタック編
第一回Web技術勉強会 efkスタック編第一回Web技術勉強会 efkスタック編
第一回Web技術勉強会 efkスタック編tzm_freedom
 
第5回web技術勉強会 暗号技術編その3
第5回web技術勉強会 暗号技術編その3第5回web技術勉強会 暗号技術編その3
第5回web技術勉強会 暗号技術編その3tzm_freedom
 
Dreamforce '15のお話
Dreamforce '15のお話Dreamforce '15のお話
Dreamforce '15のお話tzm_freedom
 
第三回IoT関連技術勉強会 データ通信編
第三回IoT関連技術勉強会 データ通信編第三回IoT関連技術勉強会 データ通信編
第三回IoT関連技術勉強会 データ通信編tzm_freedom
 
第2回Web技術勉強会 webパフォーマンス改善編
第2回Web技術勉強会 webパフォーマンス改善編第2回Web技術勉強会 webパフォーマンス改善編
第2回Web技術勉強会 webパフォーマンス改善編tzm_freedom
 
Githubでアカウントを晒した事故に対する対処
Githubでアカウントを晒した事故に対する対処Githubでアカウントを晒した事故に対する対処
Githubでアカウントを晒した事故に対する対処まえすとろ
 
Analytics CloudとEmbulkを使った社会的データの分析
Analytics CloudとEmbulkを使った社会的データの分析Analytics CloudとEmbulkを使った社会的データの分析
Analytics CloudとEmbulkを使った社会的データの分析tzm_freedom
 
初めてのGemの読み方
初めてのGemの読み方初めてのGemの読み方
初めてのGemの読み方Takao Baba
 
ApexからAWS IoT叩いてみた話
ApexからAWS IoT叩いてみた話ApexからAWS IoT叩いてみた話
ApexからAWS IoT叩いてみた話tzm_freedom
 
第4回web技術勉強会 暗号技術編その2
第4回web技術勉強会 暗号技術編その2第4回web技術勉強会 暗号技術編その2
第4回web技術勉強会 暗号技術編その2tzm_freedom
 
第一回IoT関連技術勉強会 分散処理編
第一回IoT関連技術勉強会 分散処理編第一回IoT関連技術勉強会 分散処理編
第一回IoT関連技術勉強会 分散処理編tzm_freedom
 
第3回web技術勉強会 暗号技術編その1
第3回web技術勉強会 暗号技術編その1第3回web技術勉強会 暗号技術編その1
第3回web技術勉強会 暗号技術編その1tzm_freedom
 

En vedette (20)

爆速プレビュープロキシ pool
爆速プレビュープロキシ pool爆速プレビュープロキシ pool
爆速プレビュープロキシ pool
 
SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199
 
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
 
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南
 
第二回IoT関連技術勉強会 ログ収集編
第二回IoT関連技術勉強会 ログ収集編第二回IoT関連技術勉強会 ログ収集編
第二回IoT関連技術勉強会 ログ収集編
 
Heroku Changelog in 2013
Heroku Changelog in 2013Heroku Changelog in 2013
Heroku Changelog in 2013
 
Heroku
HerokuHeroku
Heroku
 
第一回Web技術勉強会 efkスタック編
第一回Web技術勉強会 efkスタック編第一回Web技術勉強会 efkスタック編
第一回Web技術勉強会 efkスタック編
 
第5回web技術勉強会 暗号技術編その3
第5回web技術勉強会 暗号技術編その3第5回web技術勉強会 暗号技術編その3
第5回web技術勉強会 暗号技術編その3
 
Dreamforce '15のお話
Dreamforce '15のお話Dreamforce '15のお話
Dreamforce '15のお話
 
第三回IoT関連技術勉強会 データ通信編
第三回IoT関連技術勉強会 データ通信編第三回IoT関連技術勉強会 データ通信編
第三回IoT関連技術勉強会 データ通信編
 
第2回Web技術勉強会 webパフォーマンス改善編
第2回Web技術勉強会 webパフォーマンス改善編第2回Web技術勉強会 webパフォーマンス改善編
第2回Web技術勉強会 webパフォーマンス改善編
 
Githubでアカウントを晒した事故に対する対処
Githubでアカウントを晒した事故に対する対処Githubでアカウントを晒した事故に対する対処
Githubでアカウントを晒した事故に対する対処
 
Analytics CloudとEmbulkを使った社会的データの分析
Analytics CloudとEmbulkを使った社会的データの分析Analytics CloudとEmbulkを使った社会的データの分析
Analytics CloudとEmbulkを使った社会的データの分析
 
初めてのGemの読み方
初めてのGemの読み方初めてのGemの読み方
初めてのGemの読み方
 
ApexからAWS IoT叩いてみた話
ApexからAWS IoT叩いてみた話ApexからAWS IoT叩いてみた話
ApexからAWS IoT叩いてみた話
 
第4回web技術勉強会 暗号技術編その2
第4回web技術勉強会 暗号技術編その2第4回web技術勉強会 暗号技術編その2
第4回web技術勉強会 暗号技術編その2
 
第一回IoT関連技術勉強会 分散処理編
第一回IoT関連技術勉強会 分散処理編第一回IoT関連技術勉強会 分散処理編
第一回IoT関連技術勉強会 分散処理編
 
第3回web技術勉強会 暗号技術編その1
第3回web技術勉強会 暗号技術編その1第3回web技術勉強会 暗号技術編その1
第3回web技術勉強会 暗号技術編その1
 

プロセスをしょうもないErrorで落とさないように頑張る

Notes de l'éditeur

  1. * すでにQiitaや毛色の違うイベントで発表済みのネタなんでもしかしたら知っているかも * Node.jsでサーバやワーカをつくっている * 大量のコネクションをもつNode.jsサーバでのエラー処理が難しいということをここ1ヶ月くらいで考えていたので、自分なりにまとめてみた
  2. Nede.jsはシングルプロセスシングルスレッドで稼働するイベントループモデルの実行環境となっています。 図のように、待ちが発生する処理をイベントループに積んでタスクを順次実行していくのでシングルスレッドでも遅くなることがないと言われています。 逆に待つ処理を入れてしまうのはよくないやり方です。
  3. エラー処理もJavaとかPythonと比べると異なるやり方をとっていて、非同期I/O処理時のエラーは図のようにイベントのコールバックとして受け取ったり、ライブラリだとエラーオブジェクトとして受け取ったりします。 同期処理だとこれは他の言語でよくあるthrow,try-catchのやり方になります。
  4. 実際にNode.jsのアプリケーションを運用していて、難しいなーと思った事案をお話させてくだい。 図のようにWebSocketのクライアントとサーバがあり、コネクションが長時間保持されています。 \Nodeのイベントループには、それぞれのクライアントのためのタスクが積まれており、処理が終わったらクライアントへデータを送信するような構成になっています。
  5. こういう場合、イベントループ中でやっていた処理中で想定外のエラーが発生すると
  6. Node.jsではプロセスごと再起動する、というやり方になります。イベントループに積まれている未処理のタスクは実行しないまま終了してしまうということになります。 サーバに接続しているクライアントはすべて切断されてしまいます。 実際に、私が運用しているNodeアプリケーションの内部でつかっているライブラリの例外でこういうことが発生して障害につながった例もあります。 NodeのuncaughtExceptionというイベントで想定外の例外を検知して無理やり回復できなくもないですが、それは安全に回復できないため推奨されていません。
  7. 例えば、このようにPromise.catchしていても、catchのなかでエラーが投げられると、Promiseは何もしてくれません。 これはunhandledRejectionイベントをみることで想定外のエラーが発生したときも最悪ログ出力しておけばあとで気づいて修正することができます。 逆に、unhandledRejectionをみていないとバグに気づかないまま放置ということになりかねないと思います。