狠狠撸

狠狠撸Share a Scribd company logo
Developing an Akka Edge
Chapter 1-3
この本について
Developing an Akka Edge
(著)Thomas Lockney, Raymond Tay
Akka初心者向けの洋書
全191ページ?10章
せっかく読んでるので要約しました
※自分で調べた事や、考えた例も載せたのでスライドに正しくないことが書いてある可能性があります※
各章の概要
Chapter 1…ロックを使った並列処理がよくない理由
アクターの概要
Chapter 2…とりあえずAkkaを動かしてみる
Chapter 3…ビルドツールの紹介 & ログの出し方など
Akkaを触った事がある人はChapter4からでいいかも
Chapter 1. Introduction
?並列処理のよくあるテクニック
?データを共有させて、ロックを使って整合性を保つ
?しかし、ロックにはデメリットがある
デメリット① 処理速度が頭打ちになる
例「Webサイトにユーザーが訪れたらカウントする」
合計値を更新するメ
ソッド
スレッド
A
スレッド
B
使用中なら待つ
スレッドが増えると待ち時間が無限に…
例「Webサイトにユーザーが訪れたらカウントする」
合計値を更新するメ
ソッド
スレッド
スレッド
スレッド
スレッド
スレッド
スレッド スレッド
スレッド
スレッド
スレッド
スレッド
使用中なら待つ
Developing an Akka Edge1-3
デメリット② デッドロック/ライブロック
2つのインスタンスのロックを取ろうとして
1つ取ったが、もう1つがロックされていた時
スレッド
A
スレッド
B
デッドロック
お互いがお互いのロックを解放するのを待っている
?ずっと動かないまま
スレッド
A
スレッド
B
ライブロック
一度ロックを解放して、もう片方のロックを取る
?どちらも片方のロックを持っているので、取得と解放を繰り返し続ける
スレッド
A
スレッド
B
他にも
設計が大変などいろいろデメリットがあるので
アクターモデルを使いましょう
アクターについて
?メッセージのやりとりを使った計算機処理の手法
1973年に論文が発表された
?Actorとは1つのエンティティ
メッセージの送受信を通して他のアクターとやりとりする
メッセージを受け取った時の処理を定義しておく
Actor
case “How are you?” => sender ! “I’m fine thank you”
case “Nice to meet you” => sender ! “Nice to meet you too”
case s:String => sender ! “Pardon?”
メッセージを受け取った時の処理を定義しておく
①アクターがメッセージを受信する
Actor
case “How are you?” => sender ! “I’m fine thank you”
case “Nice to meet you” => sender ! “Nice to meet you too”
case s:String => sender ! “Pardon?”
“How are you?”
メッセージを受け取った時の処理を定義しておく
①アクターがメッセージを受信する
②定義されたふるまいをする
Actor
case “How are you?” => sender ! “I’m fine thank you”
case “Nice to meet you” => sender ! “Nice to meet you too”
case s:String => sender ! “Pardon?”
“How are you?”
“I’m fine thank you”
結局
?メッセージが来たらアクターのMailboxに貯まる
?メッセージを到着した順に1つずつ処理する
?あらかじめ定義されたふるまいを実行する
Akkaのアクターの特徴
?アドレスを持つ
アドレスを使ってメッセージを送れる
?子アクターを作ることができる
ヒエラルキーを構成する
ヒエラルキー
?1つのアクターを始点としてヒエラルキーを構成する
どんなアクターを作るときもActorSystemの参照が必要
ActorSystemの内部のアクターの子としてアクターを作れる
ヒエラルキー
Akkaの構造がヒエラルキーになっている理由?耐障害性
親アクターは子アクターにExceptionが発生した時にどうするか決められる
?子アクターを再起動させる
?子アクターを再開させる
?子アクターを終了させる
?例外を次の親に投げる
ヒエラルキー
ヒエラルキーはファイルシステム的な感じで、分かりやすい
例:accountingというActorsystemから作られた
accountMonitorというアクターから作られた
accountCrediterというアクター
akka://accounting/user/accountMonitor/accountCreditor
Akkaのアクターの特徴②
遠隔操作
本当にスケーラブルな並行処理の鍵となる
アクターがどこにあっても
(同じマシンでも、違うJVMのインスタンスでも、全く別のマシンでも)
同じように動く
アクターのアドレスさえ知っていればローカルもリモートも関係ない
?location transparency
Chapter 2.Working with Actors
?既存プロジェクトへのアクターの追加の仕方
?とりあえずアクターを動かしてみる
Putting actors to work
アクターを使うのにまず必要な事
?akka.actor.Actorトレイトを継承したクラスと、そこに谤别肠别颈惫别メソッドを定义
?ActorSystemを作る
?ActorSystemからアクターを生成
谤别肠别颈惫别メソッドを定义
ActorSystemを生成
ActorSystemからさっき定義したアクターを生成
Actorインスタンスを作って開始させるとActorRefインスタンスが取得できる
*この時点でもう非同期になっている*
ActorRef…Akkaのアクターを参照する時に必ず使うオブジェクト
Propf…アクターを作る時に使われる設定オブジェクト(ファクトリー的な)
アクター内部からActorSystemにアクセス
contextというプライベート変数
context.system :自分がいるのアクターシステムを参照できる
context.stop(ref):ref(他のアクター)を停止させる
非同期に他アクターの開始?停止ができる
メッセージの送り方① tell
ActorRefオブジェクト と !メソッドを使ってメッセージを送れる
メッセージの送り方② ask
?メソッドはFutureを返す
Futureの中身…送り先のアクターが返す値(処理済/まだ処理されていない/永遠に処理されない)
永遠に処理されない可能性もあるので、implicit valを使って時間を設定
アクターへ送るメッセージは非同期なので、アクター以外のコード内でレスポンス
を得るにはFutureを使う必要がある
Futureの中身を取り出す
onCompleteメソッドはFutureインスタンスで使えるコールバック
mapToで戻り値の型を指定
設定したタイムアウトの時間を過ぎるとFailureが返される
最后に必ず础肠迟辞谤厂测蝉迟别尘を终了させないといけない
Chapter 3.Running with Akka
?ビルドツールはいろいろあるけど、sbtがおすすめなのでちょっと紹介
?ロギングとか
The sbt build defenition
AntやRave?ビルドファイル名が指定されてる
Mavenやsbt?ディレクトリ構造が指定されてる
sbt
Scalaのコード ? src/main/scala以下と src/test/scala以下
設定ファイルなど ? src/main/resources以下と src/test/resources以下
(設定でいろいろかえられる)
build.sbtに設定を書く…project名とか、Scalaのバージョンや依存性
*決まり事*
全ての設定は空行をはさむ
:= 設定の割当
+= 既にある設定に追記(libraryDependenciesとか)
++= コレクション(厂别辩とか)を设定に追加する
%%はScalaのバージョンを追記してくれる
akka-actor_2.10
sbtで使えるタスク
upload…依存ライブラリの更新
compile
test
run…mainメソッドを探す
1つ以上あれば、どれを実行するかプロンプトに表示される
Akka and application configuration
AkkaではActorSystemの設定に TypesafeConfig library を使っている
JSONみたいな感じ
HOCON(Human Optimized Config Object Notation)と知られている
独自の設定は /src/main/resources/application.conf に記述する
书き方①
书き方②
Logging in Actors and elsewhere
Akkaのロギングは(もちろん)非同期
ロギングの方法
①デフォルトのLogging機能を使う
②ActorLoggingトレイトをミックスインしたものを使う
akka.actor.debug.receive = on
ミックスインしたクラスに def receive = LoggingReceive{}を定義
①デフォルトのLogging機能を使う
build.sbt
application.conf
あとロギングのXMLを定義
②ActorLoggingトレイトをミックスイン
application.conf
クラスを定義
JavaベースのLoggingフレームワークと同様に
error,warning,info,debug が使える
{}でログ内に代入できる
ビルドの仕方、ログの出し方が分かったので
次の章ではAkkaの特徴について触れる

More Related Content

What's hot (20)

Akka-Streams in Production
Akka-Streams in ProductionAkka-Streams in Production
Akka-Streams in Production
Kazunobu Raita
?
Akka actorを何故使うのか?
Akka actorを何故使うのか?Akka actorを何故使うのか?
Akka actorを何故使うのか?
Nyle Inc.(ナイル株式会社)
?
akka-doc-ja
akka-doc-jaakka-doc-ja
akka-doc-ja
TIS Inc.
?
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
Kenjiro Kubota
?
Servlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ksServlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ks
Kazuhiro Sera
?
Akkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka docAkkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka doc
賢太郎 前多
?
厂肠补濒补警察のすすめ
厂肠补濒补警察のすすめ厂肠补濒补警察のすすめ
厂肠补濒补警察のすすめ
takezoe
?
【LT】akka receive とScala Javaの違い
【LT】akka receive とScala Javaの違い 【LT】akka receive とScala Javaの違い
【LT】akka receive とScala Javaの違い
賢太郎 前多
?
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Asami Abe
?
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Kazuhiro Sera
?
闯补惫补使いにとっての関数
闯补惫补使いにとっての関数闯补惫补使いにとっての関数
闯补惫补使いにとっての関数
amkt922
?
Quasar: Actor Model and Light Weight Threads on Java
Quasar: Actor Model and Light Weight Threads on JavaQuasar: Actor Model and Light Weight Threads on Java
Quasar: Actor Model and Light Weight Threads on Java
Taku Miyakawa
?
Real world android akka
Real world android akkaReal world android akka
Real world android akka
Taisuke Oe
?
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarconSeasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Kazuhiro Sera
?
厂肠补濒补勉强会 初心者向けハンズオン前编
厂肠补濒补勉强会 初心者向けハンズオン前编厂肠补濒补勉强会 初心者向けハンズオン前编
厂肠补濒补勉强会 初心者向けハンズオン前编
takeuchi-tk
?
Skinny Framework 進捗と?うて?すか? #fud_scala
Skinny Framework 進捗と?うて?すか? #fud_scalaSkinny Framework 進捗と?うて?すか? #fud_scala
Skinny Framework 進捗と?うて?すか? #fud_scala
Kazuhiro Sera
?
1周遅れのScala入学 #nds41
1周遅れのScala入学 #nds411周遅れのScala入学 #nds41
1周遅れのScala入学 #nds41
Kazumune Katagiri
?
惭测厂蚕尝/搁耻产测终了のお知らせ
惭测厂蚕尝/搁耻产测终了のお知らせ惭测厂蚕尝/搁耻产测终了のお知らせ
惭测厂蚕尝/搁耻产测终了のお知らせ
Masahiro Tomita
?
形式手法で捗る!インフラ构成の设计と検証
形式手法で捗る!インフラ构成の设计と検証形式手法で捗る!インフラ构成の设计と検証
形式手法で捗る!インフラ构成の设计と検証
y_taka_23
?
Akka-Streams in Production
Akka-Streams in ProductionAkka-Streams in Production
Akka-Streams in Production
Kazunobu Raita
?
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
Kenjiro Kubota
?
Servlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ksServlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ks
Kazuhiro Sera
?
Akkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka docAkkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka doc
賢太郎 前多
?
厂肠补濒补警察のすすめ
厂肠补濒补警察のすすめ厂肠补濒补警察のすすめ
厂肠补濒补警察のすすめ
takezoe
?
【LT】akka receive とScala Javaの違い
【LT】akka receive とScala Javaの違い 【LT】akka receive とScala Javaの違い
【LT】akka receive とScala Javaの違い
賢太郎 前多
?
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Asami Abe
?
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Kazuhiro Sera
?
闯补惫补使いにとっての関数
闯补惫补使いにとっての関数闯补惫补使いにとっての関数
闯补惫补使いにとっての関数
amkt922
?
Quasar: Actor Model and Light Weight Threads on Java
Quasar: Actor Model and Light Weight Threads on JavaQuasar: Actor Model and Light Weight Threads on Java
Quasar: Actor Model and Light Weight Threads on Java
Taku Miyakawa
?
Real world android akka
Real world android akkaReal world android akka
Real world android akka
Taisuke Oe
?
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarconSeasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Kazuhiro Sera
?
厂肠补濒补勉强会 初心者向けハンズオン前编
厂肠补濒补勉强会 初心者向けハンズオン前编厂肠补濒补勉强会 初心者向けハンズオン前编
厂肠补濒补勉强会 初心者向けハンズオン前编
takeuchi-tk
?
Skinny Framework 進捗と?うて?すか? #fud_scala
Skinny Framework 進捗と?うて?すか? #fud_scalaSkinny Framework 進捗と?うて?すか? #fud_scala
Skinny Framework 進捗と?うて?すか? #fud_scala
Kazuhiro Sera
?
1周遅れのScala入学 #nds41
1周遅れのScala入学 #nds411周遅れのScala入学 #nds41
1周遅れのScala入学 #nds41
Kazumune Katagiri
?
惭测厂蚕尝/搁耻产测终了のお知らせ
惭测厂蚕尝/搁耻产测终了のお知らせ惭测厂蚕尝/搁耻产测终了のお知らせ
惭测厂蚕尝/搁耻产测终了のお知らせ
Masahiro Tomita
?
形式手法で捗る!インフラ构成の设计と検証
形式手法で捗る!インフラ构成の设计と検証形式手法で捗る!インフラ构成の设计と検証
形式手法で捗る!インフラ构成の设计と検証
y_taka_23
?

Viewers also liked (9)

补办办补-蝉迟谤别补尘のマイクロサービスへの适用
补办办补-蝉迟谤别补尘のマイクロサービスへの适用补办办补-蝉迟谤别补尘のマイクロサービスへの适用
补办办补-蝉迟谤别补尘のマイクロサービスへの适用
Nyle Inc.(ナイル株式会社)
?
Akka Clusterの耐障害設計
Akka Clusterの耐障害設計Akka Clusterの耐障害設計
Akka Clusterの耐障害設計
TanUkkii
?
とりあえず使える厂叠罢
とりあえず使える厂叠罢とりあえず使える厂叠罢
とりあえず使える厂叠罢
Kiyotaka Kunihira
?
Architecture of Falcon, a new chat messaging backend system build on Scala
Architecture of Falcon,  a new chat messaging backend system  build on ScalaArchitecture of Falcon,  a new chat messaging backend system  build on Scala
Architecture of Falcon, a new chat messaging backend system build on Scala
TanUkkii
?
アクターモデルについて
アクターモデルについてアクターモデルについて
アクターモデルについて
Takamasa Mitsuji
?
笔贬笔开発者が厂肠补濒补に入门して苦しんだ话
笔贬笔开発者が厂肠补濒补に入门して苦しんだ话笔贬笔开発者が厂肠补濒补に入门して苦しんだ话
笔贬笔开発者が厂肠补濒补に入门して苦しんだ话
Nyle Inc.(ナイル株式会社)
?
Reactive Design Patterns: a talk by Typesafe's Dr. Roland Kuhn
Reactive Design Patterns: a talk by Typesafe's Dr. Roland KuhnReactive Design Patterns: a talk by Typesafe's Dr. Roland Kuhn
Reactive Design Patterns: a talk by Typesafe's Dr. Roland Kuhn
Zalando Technology
?
Zen of Akka
Zen of AkkaZen of Akka
Zen of Akka
Konrad Malawski
?
Rakuten Technology Conference 2017 A Distributed SQL Database For Data Analy...
Rakuten Technology Conference 2017 A Distributed SQL Database  For Data Analy...Rakuten Technology Conference 2017 A Distributed SQL Database  For Data Analy...
Rakuten Technology Conference 2017 A Distributed SQL Database For Data Analy...
Rakuten Group, Inc.
?
补办办补-蝉迟谤别补尘のマイクロサービスへの适用
补办办补-蝉迟谤别补尘のマイクロサービスへの适用补办办补-蝉迟谤别补尘のマイクロサービスへの适用
补办办补-蝉迟谤别补尘のマイクロサービスへの适用
Nyle Inc.(ナイル株式会社)
?
Akka Clusterの耐障害設計
Akka Clusterの耐障害設計Akka Clusterの耐障害設計
Akka Clusterの耐障害設計
TanUkkii
?
とりあえず使える厂叠罢
とりあえず使える厂叠罢とりあえず使える厂叠罢
とりあえず使える厂叠罢
Kiyotaka Kunihira
?
Architecture of Falcon, a new chat messaging backend system build on Scala
Architecture of Falcon,  a new chat messaging backend system  build on ScalaArchitecture of Falcon,  a new chat messaging backend system  build on Scala
Architecture of Falcon, a new chat messaging backend system build on Scala
TanUkkii
?
アクターモデルについて
アクターモデルについてアクターモデルについて
アクターモデルについて
Takamasa Mitsuji
?
Reactive Design Patterns: a talk by Typesafe's Dr. Roland Kuhn
Reactive Design Patterns: a talk by Typesafe's Dr. Roland KuhnReactive Design Patterns: a talk by Typesafe's Dr. Roland Kuhn
Reactive Design Patterns: a talk by Typesafe's Dr. Roland Kuhn
Zalando Technology
?
Rakuten Technology Conference 2017 A Distributed SQL Database For Data Analy...
Rakuten Technology Conference 2017 A Distributed SQL Database  For Data Analy...Rakuten Technology Conference 2017 A Distributed SQL Database  For Data Analy...
Rakuten Technology Conference 2017 A Distributed SQL Database For Data Analy...
Rakuten Group, Inc.
?

Developing an Akka Edge1-3