SlideShare a Scribd company logo
1 of 44
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サイトにユーザーが訪れたらカウントする」
合計値を更新するメ
ソッド
スレッド
スレッド
スレッド
スレッド
スレッド
スレッド スレッド
スレッド
スレッド
スレッド
スレッド
使用中なら待つ
デメリット② デッドロック/ライブロック
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トレイトを継承したクラスと、そこにreceiveメソッドを定義
・ActorSystemを作る
・ActorSystemからアクターを生成
receiveメソッドを定義
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が返される
最後に必ずActorSystemを終了させないといけない
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とか)
++= コレクション(Seqとか)を設定に追加する
%%は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

Akka-Streams in Production
Akka-Streams in ProductionAkka-Streams in Production
Akka-Streams in ProductionKazunobu Raita
 
akka-doc-ja
akka-doc-jaakka-doc-ja
akka-doc-jaTIS Inc.
 
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Kenjiro Kubota
 
Servlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ksServlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ksKazuhiro Sera
 
Akkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka docAkkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka doc賢太郎 前多
 
Scala警察のすすめ
Scala警察のすすめScala警察のすすめ
Scala警察のすすめ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_r24Kazuhiro Sera
 
Java使いにとっての関数
Java使いにとっての関数Java使いにとっての関数
Java使いにとっての関数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 JavaTaku Miyakawa
 
Real world android akka
Real world android akkaReal world android akka
Real world android akkaTaisuke Oe
 
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarconSeasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarconKazuhiro Sera
 
Scala勉強会 初心者向けハンズオン前編
Scala勉強会 初心者向けハンズオン前編Scala勉強会 初心者向けハンズオン前編
Scala勉強会 初心者向けハンズオン前編takeuchi-tk
 
Skinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaSkinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaKazuhiro Sera
 
1周遅れのScala入学 #nds41
1周遅れのScala入学 #nds411周遅れのScala入学 #nds41
1周遅れのScala入学 #nds41Kazumune Katagiri
 
MySQL/Ruby終了のお知らせ
MySQL/Ruby終了のお知らせMySQL/Ruby終了のお知らせ
MySQL/Ruby終了のお知らせMasahiro Tomita
 
形式手法で捗る!インフラ構成の設計と検証
形式手法で捗る!インフラ構成の設計と検証形式手法で捗る!インフラ構成の設計と検証
形式手法で捗る!インフラ構成の設計と検証y_taka_23
 

What's hot (20)

Akka-Streams in Production
Akka-Streams in ProductionAkka-Streams in Production
Akka-Streams in Production
 
Akka actorを何故使うのか?
Akka actorを何故使うのか?Akka actorを何故使うのか?
Akka actorを何故使うのか?
 
akka-doc-ja
akka-doc-jaakka-doc-ja
akka-doc-ja
 
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
 
Servlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ksServlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ks
 
Akkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka docAkkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka doc
 
Scala警察のすすめ
Scala警察のすすめScala警察のすすめ
Scala警察のすすめ
 
【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回
 
[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
 
Java使いにとっての関数
Java使いにとっての関数Java使いにとっての関数
Java使いにとっての関数
 
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
 
Real world android akka
Real world android akkaReal world android akka
Real world android akka
 
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarconSeasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
 
Scala勉強会 初心者向けハンズオン前編
Scala勉強会 初心者向けハンズオン前編Scala勉強会 初心者向けハンズオン前編
Scala勉強会 初心者向けハンズオン前編
 
Skinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaSkinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scala
 
1周遅れのScala入学 #nds41
1周遅れのScala入学 #nds411周遅れのScala入学 #nds41
1周遅れのScala入学 #nds41
 
Ruby紹介
Ruby紹介Ruby紹介
Ruby紹介
 
MySQL/Ruby終了のお知らせ
MySQL/Ruby終了のお知らせMySQL/Ruby終了のお知らせ
MySQL/Ruby終了のお知らせ
 
形式手法で捗る!インフラ構成の設計と検証
形式手法で捗る!インフラ構成の設計と検証形式手法で捗る!インフラ構成の設計と検証
形式手法で捗る!インフラ構成の設計と検証
 

Viewers also liked

Akka Clusterの耐障害設計
Akka Clusterの耐障害設計Akka Clusterの耐障害設計
Akka Clusterの耐障害設計TanUkkii
 
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 ScalaTanUkkii
 
アクターモデルについて
アクターモデルについてアクターモデルについて
アクターモデルについて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 KuhnZalando 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.
 

Viewers also liked (9)

akka-streamのマイクロサービスへの適用
akka-streamのマイクロサービスへの適用akka-streamのマイクロサービスへの適用
akka-streamのマイクロサービスへの適用
 
Akka Clusterの耐障害設計
Akka Clusterの耐障害設計Akka Clusterの耐障害設計
Akka Clusterの耐障害設計
 
とりあえず使えるSBT
とりあえず使えるSBTとりあえず使えるSBT
とりあえず使えるSBT
 
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
 
アクターモデルについて
アクターモデルについてアクターモデルについて
アクターモデルについて
 
PHP開発者がScalaに入門して苦しんだ話
PHP開発者がScalaに入門して苦しんだ話PHP開発者がScalaに入門して苦しんだ話
PHP開発者がScalaに入門して苦しんだ話
 
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
 
Zen of Akka
Zen of AkkaZen of Akka
Zen of Akka
 
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...
 

Developing an Akka Edge1-3