SlideShare 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トレイトを継承したクラスと、そこに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

PPTX
Developing an Akka Edge4-5
PDF
Developing an Akka Edge6
PDF
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
PDF
実践Akka
PDF
Akka meetup 2014_sep
PDF
並行処理初心者のためのAkka入門
PDF
WebSocket+Akka(Remote)+Play 2.1 Java
Developing an Akka Edge4-5
Developing an Akka Edge6
プログラミング言語のパラダイムシフト(ダイジェスト)ーScalaから見る関数型と並列性時代の幕開けー
実践Akka
Akka meetup 2014_sep
並行処理初心者のためのAkka入門
WebSocket+Akka(Remote)+Play 2.1 Java

What's hot (20)

PDF
Akka-Streams in Production
PPTX
Akka actorを何故使うのか?
PDF
akka-doc-ja
PDF
Akkaとは。アクターモデル とは。
PDF
Servlet と Future の関わり方 #scala_ks
PPTX
Akkaの翻訳みんなでやろう Let's translate akka doc
PDF
Scala警察のすすめ
PPTX
【LT】akka receive とScala Javaの違い
PDF
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
PDF
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
PPTX
Java使いにとっての関数
PDF
Quasar: Actor Model and Light Weight Threads on Java
PDF
Real world android akka
PDF
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
PPTX
Scala勉強会 初心者向けハンズオン前編
PDF
Skinny Framework 進捗どうですか? #fud_scala
PDF
1周遅れのScala入学 #nds41
PDF
Ruby紹介
PDF
MySQL/Ruby終了のお知らせ
PDF
形式手法で捗る!インフラ構成の設計と検証
Akka-Streams in Production
Akka actorを何故使うのか?
akka-doc-ja
Akkaとは。アクターモデル とは。
Servlet と Future の関わり方 #scala_ks
Akkaの翻訳みんなでやろう Let's translate akka doc
Scala警察のすすめ
【LT】akka receive とScala Javaの違い
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Java使いにとっての関数
Quasar: Actor Model and Light Weight Threads on Java
Real world android akka
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Scala勉強会 初心者向けハンズオン前編
Skinny Framework 進捗どうですか? #fud_scala
1周遅れのScala入学 #nds41
Ruby紹介
MySQL/Ruby終了のお知らせ
形式手法で捗る!インフラ構成の設計と検証
Ad

Viewers also liked (9)

PPTX
akka-streamのマイクロサービスへの適用
PPTX
Akka Clusterの耐障害設計
PDF
とりあえず使えるSBT
PPTX
Architecture of Falcon, a new chat messaging backend system build on Scala
PDF
アクターモデルについて
PPTX
PHP開発者がScalaに入門して苦しんだ話
PDF
Reactive Design Patterns: a talk by Typesafe's Dr. Roland Kuhn
PDF
Zen of Akka
PDF
Rakuten Technology Conference 2017 A Distributed SQL Database For Data Analy...
akka-streamのマイクロサービスへの適用
Akka Clusterの耐障害設計
とりあえず使えるSBT
Architecture of Falcon, a new chat messaging backend system build on Scala
アクターモデルについて
PHP開発者がScalaに入門して苦しんだ話
Reactive Design Patterns: a talk by Typesafe's Dr. Roland Kuhn
Zen of Akka
Rakuten Technology Conference 2017 A Distributed SQL Database For Data Analy...
Ad

Developing an Akka Edge1-3