SlideShare a Scribd company logo
1 of 49
Download to read offline
Akkaとは。アクターモデル とは。
#2/28社内勉強会@KenjiroKubota
Akkaとは。
の前に、
Akkaの誕生した背景
2000年代中盤… CPU(主にシングルスレッド)の性能限界
アプリケーションを並行で動作させる。
● マルチスレッド処理
● 分散処理
分散処理を行うための、Akka
Lightbend社(旧Typesafe社)によって開発されたオープンソースのJava/Scala向けツールキット
並行・分散アプリケーションをシンプルに単一モデルで実装するプログラミングモデルを提供する。
● 回復性…システムにダウンタイムを発生させない
● 即応性…トラフィックに対して素早く反応する
● 弾力性…サーバーやコア数によってスケールさせる
アクターモデル プログラミング
アクターモデル
並行処理を効率的に実現する手法のひとつ
1973年にカール・ヒューイット氏が発表した並列処理を行う計算モデル
アクターモデル におけるアクターは、オブジェクト指向プログラミング
におけるオブジェクトのようなもの(と思っておくと理解しやすい?)
アクターモデル
アクターはメールボックス、アドレスを持ち、メッセージを受け取ることができる。
インメモリに状態を持ち、アプリケーションが再起動されてもログから状態を復帰できる。
アクター
メールボックス
メッセージ
アドレス
アクターモデル
アクターは別のアクターを生成することができる。
また、そのアクターを監督する
アクター
メールボックス
メッセージ
アドレス
アクターモデル
生成した別のアクターに、メッセージを送信することができる。
また、アクターは受け取ったメッセージの種別により振る舞いを変えることができる(状態変化)
アクター
メールボックス
メッセージ
アドレス
雑に実装ベースで見る
! = tel
返信を受け取らない
? = ask
返信を受け取る
アクターの分散処理
分散処理
複数のアクターに送信することで分散処理が行える。
デフォルトではメッセージはメールボックスの到着順に処理される。
分散処理
アクターは設定を変更するだけでリモートに設置することも可能(位置透過性)
サーバーA
サーバーB
雑に実装ベースで見る(2)
最初の設定
変更後の設定
実装は変わらず(位置透過性・・・!)
Remote用にアプリケーションを作成(+Actor)
Remoteの設定
実行コンソール
Remoteコンソール
Remoteコンソール
呼び出し側がsys.exit()して切断したのでWARNが出ているもよう
耐障害性
let it crash
Akkaではlet it crash(クラッシュするならさせておけ)の思想で設計されている。
障害発生時には障害発生箇所をクラッシュさせておき、スーパーバイザー(監督を行う親アクター)
へエスカレートを行う。
アクターではtry~catchのように、正常系処理の中に障害回復処理を含むのではなく、正常フローと
回復フローを分けて実装する。
実際にアクターで障害が発生した場合は親アクターに障害通知を行い、監督を行う親アクターが子ア
クターの回復方法を決定する
回復方法の決定
再起動
アクターを再生成して処理を続行する
再開
クラッシュしたアクターを続行させる。クラッシュは無視される
停止
アクターを停止させ、メッセージを送信しない
エスカレート
このアクターで回復方法が判断できない場合(回復方法の未定義)、さらに上位のアクターへエ
スカレートする
雑に実装ベースで見る(3)
OneForOneStrategy
AllForOneStrategy
問題の発生したアクターのみ適応
一つのアクターに問題が発生した場合すべてのアクターに適応
Restart
Resume
再起動
再開
Stop 停止
Escalate エスカレート
1
2
3
1
2
3
Circuit Breaker
外部サービス障害時に即座にエラーを返す仕組み
● リトライによるネットワーク帯域の無駄遣いが減る
● レイテンシを低く抑えられる
● 障害の連鎖を抑えられる
● Close, Open, Half-Openの状態をとる
参照) https://www.slideshare.net/negokaz/lagom-reactive-microservices-architecture#66
Open
Close
回路が開いた状態 = 通信できない
回路が閉じた状態 = 通信できる
時間切れおわり
今日の内容はこの本を参考にしています。

More Related Content

What's hot

What's hot (20)

エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
マイクロサービスにおける 非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャマイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける 非同期アーキテクチャ
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
入門 シェル実装
入門 シェル実装入門 シェル実装
入門 シェル実装
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_cccSpring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 

Similar to Akkaとは。アクターモデル とは。

Try andstudy cloud
Try andstudy cloudTry andstudy cloud
Try andstudy cloud
Etsuji Nakai
 
試して学べるクラウド技術!Eucalyptus/GlusterFS
試して学べるクラウド技術!Eucalyptus/GlusterFS試して学べるクラウド技術!Eucalyptus/GlusterFS
試して学べるクラウド技術!Eucalyptus/GlusterFS
Etsuji Nakai
 

Similar to Akkaとは。アクターモデル とは。 (20)

Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 
IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese)
IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese)IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese)
IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese)
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
機械学習基盤として活用するAutonomous Database
機械学習基盤として活用するAutonomous Database機械学習基盤として活用するAutonomous Database
機械学習基盤として活用するAutonomous Database
 
EMF勉強会
EMF勉強会EMF勉強会
EMF勉強会
 
Try andstudy cloud_20120509_nagoya
Try andstudy cloud_20120509_nagoyaTry andstudy cloud_20120509_nagoya
Try andstudy cloud_20120509_nagoya
 
Try andstudy cloud
Try andstudy cloudTry andstudy cloud
Try andstudy cloud
 
Hivemall Talk@SIGMOD-J Oct.4, 2014.
Hivemall Talk@SIGMOD-J Oct.4, 2014.Hivemall Talk@SIGMOD-J Oct.4, 2014.
Hivemall Talk@SIGMOD-J Oct.4, 2014.
 
試して学べるクラウド技術!Eucalyptus/GlusterFS
試して学べるクラウド技術!Eucalyptus/GlusterFS試して学べるクラウド技術!Eucalyptus/GlusterFS
試して学べるクラウド技術!Eucalyptus/GlusterFS
 
OpenStack概要
OpenStack概要OpenStack概要
OpenStack概要
 
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack入門
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack入門H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack入門
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack入門
 
Open Source Study Session #3
Open Source Study Session #3Open Source Study Session #3
Open Source Study Session #3
 
Linux on Power と x86 Linux との技術的な相違点
Linux on Power と x86 Linux との技術的な相違点Linux on Power と x86 Linux との技術的な相違点
Linux on Power と x86 Linux との技術的な相違点
 
Guide to Cassandra for Production Deployments
Guide to Cassandra for Production DeploymentsGuide to Cassandra for Production Deployments
Guide to Cassandra for Production Deployments
 
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
Cumulus Linux 導入事例 -ネットワークをDevOpsに統合した、エンジニアが幸せになるインフラ運用手法のご紹介-
 
Azure Antenna AI 概要
Azure Antenna AI 概要Azure Antenna AI 概要
Azure Antenna AI 概要
 
Quarkus入門
Quarkus入門Quarkus入門
Quarkus入門
 
Watsonをささえる ハイパフォーマンスクラウドで はじめるDeep Learning
Watsonをささえる ハイパフォーマンスクラウドで はじめるDeep LearningWatsonをささえる ハイパフォーマンスクラウドで はじめるDeep Learning
Watsonをささえる ハイパフォーマンスクラウドで はじめるDeep Learning
 
Starc verilog hdl2013d
Starc verilog hdl2013dStarc verilog hdl2013d
Starc verilog hdl2013d
 
Spine入門
Spine入門Spine入門
Spine入門
 

More from Kenjiro Kubota

アイスタイル特設サイトにおけるVue.js導入事例(再演)
アイスタイル特設サイトにおけるVue.js導入事例(再演) アイスタイル特設サイトにおけるVue.js導入事例(再演)
アイスタイル特設サイトにおけるVue.js導入事例(再演)
Kenjiro Kubota
 
カメラを利用したアプリを作って約1000人で遊んだ話
カメラを利用したアプリを作って約1000人で遊んだ話カメラを利用したアプリを作って約1000人で遊んだ話
カメラを利用したアプリを作って約1000人で遊んだ話
Kenjiro Kubota
 

More from Kenjiro Kubota (20)

いまどき(これから)のPHP開発
いまどき(これから)のPHP開発いまどき(これから)のPHP開発
いまどき(これから)のPHP開発
 
アイスタイル特設サイトにおけるVue.js導入事例(再演)
アイスタイル特設サイトにおけるVue.js導入事例(再演) アイスタイル特設サイトにおけるVue.js導入事例(再演)
アイスタイル特設サイトにおけるVue.js導入事例(再演)
 
gRPC入門
gRPC入門gRPC入門
gRPC入門
 
アイスタイル特設サイトにおけるVue.jsの導入事例
アイスタイル特設サイトにおけるVue.jsの導入事例アイスタイル特設サイトにおけるVue.jsの導入事例
アイスタイル特設サイトにおけるVue.jsの導入事例
 
フロントエンドエンジニアが知るべきFirebaseの世界
フロントエンドエンジニアが知るべきFirebaseの世界フロントエンドエンジニアが知るべきFirebaseの世界
フロントエンドエンジニアが知るべきFirebaseの世界
 
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組みPHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
 
カメラを利用したアプリを作って約1000人で遊んだ話
カメラを利用したアプリを作って約1000人で遊んだ話カメラを利用したアプリを作って約1000人で遊んだ話
カメラを利用したアプリを作って約1000人で遊んだ話
 
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips
 
FirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見たFirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見た
 
introducing vue-wait-component
introducing vue-wait-componentintroducing vue-wait-component
introducing vue-wait-component
 
HHVM/Hackを本番投入した話
HHVM/Hackを本番投入した話HHVM/Hackを本番投入した話
HHVM/Hackを本番投入した話
 
HackのAsyncCurlで死んだ話
HackのAsyncCurlで死んだ話HackのAsyncCurlで死んだ話
HackのAsyncCurlで死んだ話
 
LaravelでAPI定義を管理する
LaravelでAPI定義を管理するLaravelでAPI定義を管理する
LaravelでAPI定義を管理する
 
2017: A CSS Design Odyssey
2017: A CSS Design Odyssey2017: A CSS Design Odyssey
2017: A CSS Design Odyssey
 
Introducing hhvm hack-async
Introducing hhvm hack-asyncIntroducing hhvm hack-async
Introducing hhvm hack-async
 
Responsableを使ったadr実装
Responsableを使ったadr実装Responsableを使ったadr実装
Responsableを使ったadr実装
 
土日でLineみたいなチャット作ってきた!
土日でLineみたいなチャット作ってきた!土日でLineみたいなチャット作ってきた!
土日でLineみたいなチャット作ってきた!
 
Viewを活用して複雑化と戦う
Viewを活用して複雑化と戦うViewを活用して複雑化と戦う
Viewを活用して複雑化と戦う
 
Laravel aspectで関心の分離
Laravel aspectで関心の分離Laravel aspectで関心の分離
Laravel aspectで関心の分離
 
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
 

Akkaとは。アクターモデル とは。