Suche senden
Hochladen
Error handling in Erlang and Scala
•
11 gefällt mir
•
3,156 views
M
Masahito Ikuta
Folgen
Technologie
Melden
Teilen
Melden
Teilen
1 von 70
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Laravelとテストについて
Laravelとテストについて
Takeo Noda
Kanazawa.js.Next
Kanazawa.js.Next
dynamis
RabbitMQ
RabbitMQ
Masahito Ikuta
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
Tsunenori Oohara
Basic Study for Erlang #2
Basic Study for Erlang #2
Masahito Ikuta
AngulaとElixirの新しい関係
AngulaとElixirの新しい関係
陸 谷出
Basic Study for Erlang #1
Basic Study for Erlang #1
Masahito Ikuta
良いアイデアを出すための方法
良いアイデアを出すための方法
nishio
Empfohlen
Laravelとテストについて
Laravelとテストについて
Takeo Noda
Kanazawa.js.Next
Kanazawa.js.Next
dynamis
RabbitMQ
RabbitMQ
Masahito Ikuta
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
Tsunenori Oohara
Basic Study for Erlang #2
Basic Study for Erlang #2
Masahito Ikuta
AngulaとElixirの新しい関係
AngulaとElixirの新しい関係
陸 谷出
Basic Study for Erlang #1
Basic Study for Erlang #1
Masahito Ikuta
良いアイデアを出すための方法
良いアイデアを出すための方法
nishio
SORACOM interstellar 紹介資料
SORACOM interstellar 紹介資料
SORACOM,INC
Kademlia
Kademlia
Masahito Ikuta
Cloud Functionsの紹介
Cloud Functionsの紹介
Takuya Ueda
結晶と空間充填 #ロマ数ボーイズ
結晶と空間充填 #ロマ数ボーイズ
hinge dearsip
"16 Trends Shaping the Future of Ethical Leadership"
"16 Trends Shaping the Future of Ethical Leadership"
Leading in Context LLC
LA CRÓNICA 740
LA CRÓNICA 740
La Crónica Comarca de Antequera
1. la persona de pedro
1. la persona de pedro
A L
Math Discourse colloquium with Dr. Lucianna de Oliveira and Ms. Judith O'Loug...
Math Discourse colloquium with Dr. Lucianna de Oliveira and Ms. Judith O'Loug...
Dr. Kate Mastruserio Reynolds
sharechart Technical Newsletter vol-2 issue-65
sharechart Technical Newsletter vol-2 issue-65
Sharechart Shrestha
Demystifying blockchain
Demystifying blockchain
Ajay Bhadauria
Pos E-commerce e Marketing Digital
Pos E-commerce e Marketing Digital
Milton Henrique do Couto Neto
A Case Study in Attacking KeePass
A Case Study in Attacking KeePass
Will Schroeder
ところで皆さん、上司の承認を得るプレゼンが目的でよい?
ところで皆さん、上司の承認を得るプレゼンが目的でよい?
Yasutaka Hamada
three.jsによる一歩進めたグラフィカルな表現
three.jsによる一歩進めたグラフィカルな表現
Kei Yagi
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミング
Jun Saito
東京Node学園#8 Let It Crash!?
東京Node学園#8 Let It Crash!?
koichik
Elixir入門「第6回:Elixirはtry…catchを書かない~障害対応のパラダイムシフト~」
Elixir入門「第6回:Elixirはtry…catchを書かない~障害対応のパラダイムシフト~」
fukuoka.ex
WebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 Java
Kazuhiro Hara
エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半
Tetsuya Morimoto
Heap statsfx analyzer
Heap statsfx analyzer
Yasumasa Suenaga
Example of exiting legacy system
Example of exiting legacy system
TakamchiTanaka
今日からはじめるGPars
今日からはじめるGPars
fumokmm
Weitere ähnliche Inhalte
Andere mochten auch
SORACOM interstellar 紹介資料
SORACOM interstellar 紹介資料
SORACOM,INC
Kademlia
Kademlia
Masahito Ikuta
Cloud Functionsの紹介
Cloud Functionsの紹介
Takuya Ueda
結晶と空間充填 #ロマ数ボーイズ
結晶と空間充填 #ロマ数ボーイズ
hinge dearsip
"16 Trends Shaping the Future of Ethical Leadership"
"16 Trends Shaping the Future of Ethical Leadership"
Leading in Context LLC
LA CRÓNICA 740
LA CRÓNICA 740
La Crónica Comarca de Antequera
1. la persona de pedro
1. la persona de pedro
A L
Math Discourse colloquium with Dr. Lucianna de Oliveira and Ms. Judith O'Loug...
Math Discourse colloquium with Dr. Lucianna de Oliveira and Ms. Judith O'Loug...
Dr. Kate Mastruserio Reynolds
sharechart Technical Newsletter vol-2 issue-65
sharechart Technical Newsletter vol-2 issue-65
Sharechart Shrestha
Demystifying blockchain
Demystifying blockchain
Ajay Bhadauria
Pos E-commerce e Marketing Digital
Pos E-commerce e Marketing Digital
Milton Henrique do Couto Neto
A Case Study in Attacking KeePass
A Case Study in Attacking KeePass
Will Schroeder
ところで皆さん、上司の承認を得るプレゼンが目的でよい?
ところで皆さん、上司の承認を得るプレゼンが目的でよい?
Yasutaka Hamada
three.jsによる一歩進めたグラフィカルな表現
three.jsによる一歩進めたグラフィカルな表現
Kei Yagi
Andere mochten auch
(14)
SORACOM interstellar 紹介資料
SORACOM interstellar 紹介資料
Kademlia
Kademlia
Cloud Functionsの紹介
Cloud Functionsの紹介
結晶と空間充填 #ロマ数ボーイズ
結晶と空間充填 #ロマ数ボーイズ
"16 Trends Shaping the Future of Ethical Leadership"
"16 Trends Shaping the Future of Ethical Leadership"
LA CRÓNICA 740
LA CRÓNICA 740
1. la persona de pedro
1. la persona de pedro
Math Discourse colloquium with Dr. Lucianna de Oliveira and Ms. Judith O'Loug...
Math Discourse colloquium with Dr. Lucianna de Oliveira and Ms. Judith O'Loug...
sharechart Technical Newsletter vol-2 issue-65
sharechart Technical Newsletter vol-2 issue-65
Demystifying blockchain
Demystifying blockchain
Pos E-commerce e Marketing Digital
Pos E-commerce e Marketing Digital
A Case Study in Attacking KeePass
A Case Study in Attacking KeePass
ところで皆さん、上司の承認を得るプレゼンが目的でよい?
ところで皆さん、上司の承認を得るプレゼンが目的でよい?
three.jsによる一歩進めたグラフィカルな表現
three.jsによる一歩進めたグラフィカルな表現
Ähnlich wie Error handling in Erlang and Scala
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミング
Jun Saito
東京Node学園#8 Let It Crash!?
東京Node学園#8 Let It Crash!?
koichik
Elixir入門「第6回:Elixirはtry…catchを書かない~障害対応のパラダイムシフト~」
Elixir入門「第6回:Elixirはtry…catchを書かない~障害対応のパラダイムシフト~」
fukuoka.ex
WebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 Java
Kazuhiro Hara
エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半
Tetsuya Morimoto
Heap statsfx analyzer
Heap statsfx analyzer
Yasumasa Suenaga
Example of exiting legacy system
Example of exiting legacy system
TakamchiTanaka
今日からはじめるGPars
今日からはじめるGPars
fumokmm
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
JustSystems Corporation
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
Satoshi Mimura
【Ltech#10】LIFULL HOME'S ネイティブアプリ用APIのデプロイを自動化する
【Ltech#10】LIFULL HOME'S ネイティブアプリ用APIのデプロイを自動化する
LIFULL Co., Ltd.
LLVM overview 20110122
LLVM overview 20110122
nothingcosmos
Java/Androidセキュアコーディング
Java/Androidセキュアコーディング
Masaki Kubo
Programming camp Codereading
Programming camp Codereading
Hiro Yoshioka
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
Tetsuya Morimoto
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
Masatoshi Tada
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
日本Javaユーザーグループ
Buffer overflow
Buffer overflow
ionis111
Wtm
Wtm
Soudai Sone
Ähnlich wie Error handling in Erlang and Scala
(20)
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミング
東京Node学園#8 Let It Crash!?
東京Node学園#8 Let It Crash!?
Elixir入門「第6回:Elixirはtry…catchを書かない~障害対応のパラダイムシフト~」
Elixir入門「第6回:Elixirはtry…catchを書かない~障害対応のパラダイムシフト~」
WebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 Java
エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半
Heap statsfx analyzer
Heap statsfx analyzer
Example of exiting legacy system
Example of exiting legacy system
今日からはじめるGPars
今日からはじめるGPars
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
【Ltech#10】LIFULL HOME'S ネイティブアプリ用APIのデプロイを自動化する
【Ltech#10】LIFULL HOME'S ネイティブアプリ用APIのデプロイを自動化する
LLVM overview 20110122
LLVM overview 20110122
Java/Androidセキュアコーディング
Java/Androidセキュアコーディング
Programming camp Codereading
Programming camp Codereading
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
Buffer overflow
Buffer overflow
Wtm
Wtm
Kürzlich hochgeladen
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Kürzlich hochgeladen
(11)
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Error handling in Erlang and Scala
1.
Actor とエラーハンドリング
∼Erlang 時々 Scala∼ M.Ikuta(@cooldaemon) Sep.4,2011 1
2.
自己紹介 決済代行会社のプログラマ 某大手クーポンサイトの決済システム iPhone
+ ScanJacket Erlang 基礎勉強会や分散処理勉強会の主催 2
3.
モチベーション 何故、エラーハンドリングの知識が必要か? 堅牢なシステムを構築したい 休日に家族サービスができる
3
4.
モチベーション 何故、エラーハンドリングの知識が必要か? 堅牢なシステムを構築したい 休日に家族サービスができる 3DS の稟議が通る
3
5.
モチベーション 並行や分散を取り入れるとシステムが複雑に? 並行や分散だからこそ堅牢なシステムを作れる!
4
6.
本日のお題 Erlang と Scala
の紹介 Actor モデル リンクによる相互監視 Supervisor Tree Error Logger 例外 5
7.
本日のお題 Erlang と Scala
の紹介 Actor モデル リンクによる相互監視 Supervisor Tree Error Logger 例外 6
8.
Erlang と Scala
の紹介 何故、Actor モデルの話をするために Erlang と Scala を選んだのか? 私が他の Actor モデルを実装したライブラ リや言語を知らない 本日、話す予定のリンクによる相互監視が、 他の Actor 実装に採用されているか不明 7
9.
Erlang と Scala
の紹介 Erlang ネットワークサーバを作るための DSL 並行と分散が得意 高い耐障害性 稼働率 99.9999999% も夢ではない 8
10.
Erlang と Scala
の紹介 Erlang Yaws, Mochiweb, RabbitMQ, CouchDB, Hibari, Riak, Kai, Scalaris, Ejabberd, etc.. Tsung や BashoBench のような負荷試験 ツールも作りやすい モジュールや関数を物理的に離れたノードに転 送できるので MapReduce なども得意 9
11.
Erlang と Scala
の紹介 Scala 様々な言語の長所を集めた次世代言語 夢と希望が詰ってる 並行処理に関連するキーワードだけでも… Thread, Actor, 部分継続, 並列コレク ション, 非同期IO, CAS, STM, etc.. 10
12.
Erlang と Scala
の紹介 Scala 選択肢が多く、組み合わせも自由 Actor + STM Actor + 継続 Actor + 非同期IO 継続 + 非同期IO 11
13.
本日のお題 Erlang と Scala
の紹介 Actor モデル リンクによる相互監視 Supervisor Tree Error Logger 例外 12
14.
Actor モデル
13
15.
Actor モデル 並行に動作する計算実体
13
16.
Actor モデル 並行に動作する計算実体 もう少し詳しい話をこれからするので、知って
る人は寝てて OK 13
17.
Actor モデル 世の中の全ては Actor
である 全ての Actor は並行に動作する Actor は、個々にローカルメモリを持ち、 Actor 間でメモリ共有を行わない Actor は、自分自身や他の Actor とメッセー ジを送受信しながら処理を行う 14
18.
Actor モデル Actor は、メッセージを受信するためにメール アドレスとメールボックスを持つ メッセージは、メールアドレス宛に送信される メッセージは、メールボックスに格納される メッセージは必ず届いて処理される
15
19.
Actor モデル メッセージの送信は非同期に行われる メッセージ受信の順番は保証されていない メールボックスから任意のメッセージを取り出せる Actor は、新たな
Actor を作成できる 16
20.
Actor モデル Erlang と
Scala には実装されていないが… Actor はノードを越えて移動できる 暇なノードへ働きに行ったり 壊れたノードから逃げたり 17
21.
Actor モデル
Mailbox Actor Mailbox Actor message message receive Receive Send Message Message Create Mailbox Actor 18
22.
本日のお題 Erlang と Scala
の紹介 Actor モデル リンクによる相互監視 Supervisor Tree Error Logger 例外 19
23.
リンクのよる相互監視 リンク 二つの Actor
間のエラー伝播経路を定義 二つの Actor がリンクされている場合、一方 の Actor が停止すると、もう一方に EXIT シ グナルが送られる 20
24.
リンクのよる相互監視 EXIT シグナル Actor
が停止する際に自動的に生成される(故 意に生成する事もできる) 停止する Actor とリンクしている全ての Actor へブロードキャストされる EXIT シグナルには停止理由が含まれる 21
25.
リンクのよる相互監視
A Link B A B EXIT A B A 22
26.
リンクのよる相互監視
B C A EXIT EXIT B C A C A 23
27.
リンクのよる相互監視
B C A EXIT B C A EXIT A B A 24
28.
リンクのよる相互監視 EXIT シグナル EXIT
シグナルを受信した Actor は、 trap_exit が true か否かで動作が異なる Erlang では、trap_exit が true の Actor をシステムプロセスと呼ぶ 25
29.
リンクのよる相互監視 システムプロセス(Erlang) trap_exit
停止理由 動作 TRUE kill 停止:killed をブロードキャスト TRUE X {'EXIT', Pid, X} をメールボックスに追加 FALSE normal 無視 FALSE kill 停止:killed をブロードキャスト FALSE X 停止:X をブロードキャスト 26
30.
リンクのよる相互監視 システムプロセス(Scala) trap_exit
停止理由 動作 TRUE X Exit(Actor, X) をメールボックスに追加 FALSE 'normal 無視 FALSE X 停止:X をブロードキャスト 27
31.
リンクのよる相互監視 リンクの利点 故障箇所を Actor
(やノード)に隔離できる 大怪我ではなく、擦り傷で済む 依存関係がある Actor をまとめて停止できる 一方がシステムプロセスであれば、停止を検知 してエラー処理を行える 28
32.
リンクのよる相互監視 リンクの利点 リンクはノードを越えて行える
監視 Actor と Worker Actor を、それ ぞれ、物理的に離れた別ノードに配置できる 障害が発生した信頼できない Actor(やノー ド)にエラー処理を任せない 29
33.
リンクのよる相互監視 エラー処理は… 監視している Actor
が処理を引き継ぐ 停止した Actor を再起動 処理を引き継ぐ Actor を別ノードに作る 社内監視システムにエラー通知を行う etc… 30
34.
リンクのよる相互監視 リンクの利点 コードがスッキリする
31
35.
リンクのよる相互監視 JavaScript if (is_success())
{ do_samething(); } else { throw "Exception"; } 32
36.
リンクのよる相互監視 Erlang ok =
is_success(), do_samething(). ok 以外で例外 {badmatch, 戻り値} が発生 33
37.
リンクのよる相互監視 JavaScript var num
= get_number(); switch (num) { case 1: do_samething1(); break; case 2: do_samething2(); break; default: throw "Exception: " + num; break; } 34
38.
リンクのよる相互監視 Erlang
case get_numer() of 1 -> do_samething1(); 2 -> do_samething2() end. 1, 2 以外で例外 {case_clause, 戻り値} が発生 35
39.
リンクのよる相互監視 Erlang
do_samething(get_number()). do_samething(1) -> do_samething1(); do_samething(2) -> do_samething2(). 1, 2 以外で例外 {function_clause, 戻り値} が発生 36
40.
リンクのよる相互監視 Scala getNumber() match
{ case 1 => doSamething1() case 2 => doSamething2() } 例外 scala.MatchError が発生するが、Actor 内ならリンク先に Exit(Actor, Exception) 37
41.
リンクのよる相互監視 リンクの利点 コードがスッキリする
異常事態を考慮したコードを書く必要がない その場でウダウダせずに、システム全体の構 造により頑健性を担保する 38
42.
リンクのよる相互監視 リンクの利点 コードがスッキリする
とは言え…回復不能な想定外の異常事態が発 生した場合の処理のみ省略する事!! 39
43.
本日のお題 Erlang と Scala
の紹介 Actor モデル リンクによる相互監視 Supervisor Tree Error Logger 例外 40
44.
Supervisor Tree Actor リンクを木状に構成したもの 木の上位にある
Actor(trap_exit=true)が下 位の Actor を監視する 監視専用の Actor を Supervisor と呼ぶ Erlang OTP Akka 41
45.
Supervisor Tree 個人的な設計原則 全ての
Actor は Supervisor 配下に設置 Application:Supervisor Tree = 1:1 42
46.
Supervisor Tree 全ての Actor
は Supervisor 配下に設置 Actor が孤独死するシステムは堅牢ではない 43
47.
Supervisor Tree Application:Supervisor Tree
= 1:1 Supervisor を複数使いたい? Root の Supervisor の下に、それらの Supervisor を設置して一元管理 44
48.
Supervisor Tree
Supervisor Worker Worker Supervisor Worker Worker Worker 45
49.
Supervisor Tree Supervisor の仕事
配下の Actor の起動と停止に特化 他の余計な仕事は行わない 46
50.
Supervisor Tree Supervisor 毎の設定(抜粋)
停止した Actor のみ再起動(one_for_one) 停止した Actor と同じ Supervisor 配下の Actor を全て再起動(one_for_all) 47
51.
Supervisor Tree Supervisor 毎の設定(抜粋)
一定の秒数以内に一定の回数以上 Worker の起 動停止を繰り返したら Supervisor を終了 再起動しても何度も同じ理由で停止する状態 を避ける 48
52.
Supervisor Tree Worker 毎の設定(抜粋)
必ず再起動(permanent) 異常終了した場合だけ再起動(transient) 再起動しない(temporary) 終了処理のタイムアウト時間 49
53.
本日のお題 Erlang と Scala
の紹介 Actor モデル リンクによる相互監視 Supervisor Tree Error Logger 例外 50
54.
Error Logger エラーハンドリングの仕組み Erlang OTP Erlang
では、catch されなかった例外は Error Logger で処理される OTP の Event Manager Behaviour で作られ ている Erlang Behaviour = Scala Trait 51
55.
Error Logger Event Manager
予め任意の Event に幾つかの Event Handler を登録しておくと、その Event が 発生した際に、登録済みの複数の Event Handler を全て実行する 52
56.
Error Logger デフォルトで、エラーログを TTY
に出力する Error Handler が登録されている OTP の System Application Support Libraries(SASL) を起動すると… エラーログをファイルに残す エラーログファイルをローテションする などの設定ができる Error Handler を追加する 53
57.
Error Logger SASL の
Error Handler 速度を上げるため、バイナリ形式でログを残す 専用のログを読むアプリケーション(rb)を使 用しないとログが読めない エラーメッセージが少し解り難い 54
58.
Error Logger Lagger SASL
が性に合わない人向け Riak の Basho 製 解りやすいメッセージをテキスト形式でファイ ルに保存してくれる Handler が登録される 55
59.
Error Logger Scala(提案) Event
Manager Trait を作る Event Manager Trait を extends した Error Logger Actor を作る Error Logger にメッセージを送る Trait を作る 56
60.
本日のお題 Erlang と Scala
の紹介 Actor モデル リンクによる相互監視 Supervisor Tree Error Logger 例外 57
61.
例外 最後に Actor とは関係無いのですが、Erlang と
Scala の例外についての余談をさせてください 58
62.
例外 Erlang Erlang には三つの例外がある
error throw exit 59
63.
例外 Erlang error
システムエラーであり、呼び出し側が対処で きないエラーである場合に使用する 意図的に起こす事もできるが、パターンマッ チの失敗等で自動的に発生する error は catch 非推奨 60
64.
例外 Erlang throw
呼び出し側が対処できるかもしれないエラー である場合に使用する 呼び出し側は、対処できないと判断した場 合、無理に catch しなくとも良い 61
65.
例外 Erlang exit
Actor を停止する際に使う 62
66.
例外 Erlang try
foo(), bar() catch error:foo -> handle_foo(); throw:bar -> handle_bar(); Class:Exception -> handle_error(Class, Exception) after baz() end. 63
67.
例外 Scala チェック例外が無い 例外は、なるべく異常事態に限定する
Actor や STM の内部での利用は必要悪 Java の throw 宣言されているメソッドを使 用する際、catch しなくともコンパイル時にエ ラーとはならない 64
68.
例外 Scala 回復可能な想定内のエラーは、Option や
Either に包んで返す Java メソッドの例外は、 scala.util.control.Exception.allCatch で Option/Either に包む 65
69.
例外 Scala import scala.util.control.Exception.allCatch def
foo(): Either[Throwable, Foo] = allCatch either {new JavaFoo} def bar(objFoo: Foo): Either[Throwable, Bar] = allCatch either {new JavaBar(objFoo)} val result: Either[Throwable, Bar] = for { objFoo <- foo().right objBar <- bar(objFoo).right } yield objBar 66
70.
ご清聴ありがとうございました
67
Jetzt herunterladen