SlideShare a Scribd company logo
1 of 39
Download to read offline
Copyright © 2018 TIS Inc. All rights reserved.
Reactive Systems と Akka
前出 祐吾 @yugolf
Copyright © 2018 TIS Inc. All rights reserved.
TIS株式会社
 前出 祐吾 @yugolf
最近の研究テーマ
 オープン環境で⾼可⽤システムどうやって構築する?
最近翻訳した本
最近書いた記事
 ThinkIT:Akka HTTPでWeb APIに仕⽴てる
2
⾃⼰紹介
本⽇公開
Copyright © 2018 TIS Inc. All rights reserved. 3
本⽇のお話
リアクティブシステムが解決する問題が何で、
どう解決するかをAkkaを通じて知る
• 注意
- ⾃⾝がAkkaに取り組んでいるモチベーション的観点でお話します
- 解決策はいろいろあるので、その⼀つとして聞いてください
Copyright © 2018 TIS Inc. All rights reserved. 4
アジェンダ
•リアクティブシステムの説明
•Akkaとは
•アクターモデル
•Akkaのアクター
•耐障害性についてもう少し
アジェンダ
Copyright © 2018 TIS Inc. All rights reserved. 5
リアクティブシステム
• メッセージ駆動のアーキテクチャによりユーザーの要求に可能な限り迅速に
レスポンスする(即応性)システム
• ⾼負荷状況や問題が検出された時でも応答時間を⼀定⽔準に保ち(弾⼒
性)、部分的な障害が発⽣した時にもシステム全体を危険にさらすことなく
回復させる(耐障害性)
※リアクティブ宣言(https://www.reactivemanifesto.org/ja)より
Copyright © 2018 TIS Inc. All rights reserved. 6
つまり、解決する問題は?
• システムの利⽤者が増え、扱うデータも増える
• それでも、「もっと速く」、「24時間365⽇」

とユーザーの要求は⾼まるばかり
• もうこれまでのアーキテクチャでは限界
必要なのは?
リアクティブシステム!!
⾮同期、ノンブロッキング、⾼可⽤性、疎結合、
スケーラビリティ、並⾏、並列、分散、⾼スループット、
低レイテンシー、、、、
Copyright © 2018 TIS Inc. All rights reserved.
障害はそれぞれのコンポーネントに封じ込められ、コンポーネント
は互いに隔離されるので、システムが部分的に故障してもシステム
全体を危険に晒すことなしに回復することが保証される。
7
デモムービー - 耐障害性(Resilient)編 -
細かい仕組みはひとまずおいておいて
デモムービーで雰囲気を掴んでください
Copyright © 2018 TIS Inc. All rights reserved. 8
リアクティブプログラミングでリアクティブシステム
Future
Reactive Streams
RxJava
RxScala
CompletableFuture
リアクティブシステム	
アーキテクチャレベルで4つの原則を適用
例:リアクティブシステムを適⽤して構築されたマイクロサービス
マイクロサービス
リアクティブプログラミングすれば、必ずしもリアクティブシステムが
できあがるとは限らない
✓1つのノードがクラッシュしても回復する⼒があるか?
✓スケールアウト・スケールインできるか?
リアクティブプログラミング	
リアクティブシステムを構築する	
プログラミング技術のひとつ
Copyright © 2018 TIS Inc. All rights reserved. 9
⼿段となるメッセージ駆動
コンポーネント
コンポーネント
メッセージ駆動を実現するツールキットAkka
リアクティブシステムは⾮同期なメッセージパッシングによっ
てコンポーネント間の境界を確⽴する
Copyright © 2018 TIS Inc. All rights reserved.
Akkaとは
10
第1章 Akkaの紹介
Copyright © 2018 TIS Inc. All rights reserved. 11
Akkaとは
並⾏・分散システムを構築するためのツールキット
• スケールアップ(並⾏)やスケール
アウト(分散)の実現によるアプリ
ケーションの複雑化を抑⽌
https://livebook.manning.com/#!/book/akka-in-action/chapter-1/
Copyright © 2018 TIS Inc. All rights reserved. 12
単⼀のプログラミングモデルでスケールアップ・スケールアウト
アクターモデルはメッセージの送受信を抽象化することにより、
実装とスレッドの数やサーバーの台数に対する結合度を下げる
シングルスレッドで実⾏ 複数サーバーで実⾏
逐次処理 並⾏処理 分散処理
アクターモデル
マルチコアで実⾏
位置透過性
Copyright © 2018 TIS Inc. All rights reserved.
アクターモデル
13
第2章 最⼩のAkkaアプリケーション
Copyright © 2018 TIS Inc. All rights reserved. 14
アクターモデルとは
並⾏的に受信するメッセージに対する以下のふるまいを備える
• アクターを作る
• アクターにメッセージを送信する
• メッセージを受信したときの動作を指定する
トラディショナルモデルとの違い
トラディショナルモデル
アクターモデル
逐次実⾏が基本で部分的に並⾏処理を実装
本質的に並⾏
Copyright © 2018 TIS Inc. All rights reserved. 15
本質的に並⾏?
顧客
チケット販売員
Buy
Buy
Buy
メールボックス
Akkaを使うことでアクターのプログラミングに集中できる
• コンポーネント間のやり取りはメッセージで行う
• 関数の応答を待つ必要はなく並行に処理される
• アクターはメールボックスを持ち到着順に処理する
Copyright © 2018 TIS Inc. All rights reserved. 16
もしあなたがErlangの世界のアクターだった場合
「すごいErlangゆかいに学ぼう!」より
https://www.ymotongpoo.com/works/lyse-ja/ja/01_introduction.html
あなたは孤独な⼈間で、窓もない暗い部屋に座っていて、
メールボックスにメッセージが届くのを待っている状態で
す。
そしてメッセージを受け取ると、それに対して特定の⽅法で
反応します:メッセージを受け取るときにお⾦を払い、誕⽣
⽇カードには「ありがとう(“Thank you”)」という⽂字で返
事をし、理解出来ない⽂字は無視するという具合です。
Copyright © 2018 TIS Inc. All rights reserved.
Akkaのアクター
17
第2章 最⼩のAkkaアプリケーション
Copyright © 2018 TIS Inc. All rights reserved. 18
トラディショナルスタイルとAkkaを4つのケースで⽐較
Akkaとは/概要/従来型との違い/アクターのプログ
ラミングモデル/Akkaのアクター
1)データを保存して耐久性のあるものにしたい
2)インタラクティブな機能を実装したい
3)サービスを分離して疎結合にしたい
4)システム全体の障害を避けたい
Copyright © 2018 TIS Inc. All rights reserved. 19
1)データを耐久性のあるものにしたい
インメモリーに状態を持ち、ロック制御なしに書き換える
1万円引落し
1万円引落し
残⾼
1万円
ATM
モバイル
1万円引落し
1万円引落し
ロック ATM
モバイル
⼝座
残⾼
1万円
トラディショナル Akka
ボトルネック
Copyright © 2018 TIS Inc. All rights reserved. 20
1)データを耐久性のあるものにしたい
状態をイベントとして永続化しておき(Akka Persistence)、
これらを再⽣することで状態を復元できる
• 1万円引落
• 1万円引落
• 3万円預⼊
「スケールアウトしやすいようステートレスに」、
から「ステートフルでスケーラブルに」
イベントの永続化
イベントの再⽣
1万円引落し
1万円引落し
ATM
モバイル
⼝座
残⾼
1万円
Copyright © 2018 TIS Inc. All rights reserved. 21
2)インタラクティブな機能を作りたい
メッセージパッシングなので基本プッシュ
ポーリング
@Bob “こんにちは!”
Alice Bob
プッシュ
Alice Bob
チャットサーバー
トラディショナル Akka
Copyright © 2018 TIS Inc. All rights reserved.
チャットサーバー メンションサーバー
- 時間的疎結合:メッセージの応答を待たない
- 機能的疎結合:送信後どうなったか知らない
- 位置的疎結合:別サーバーにいてもいい
22
3)サービスを分離して疎結合にしたい
メッセージパッシングなので元々⾮同期で疎結合
• 密結合は複雑度をあげる
• 変更容易=技術的負債になりづらい、ほどよい疎結合
「メンション」がメッセー
ジを受信したときのふる
まいを定義するだけ
「メンション」のふるまい
が変わっても「会話」は影
響を受けない
チャット
エンキュー
デキュー
会話
メンションMeメンション
トラディショナル Akka
Copyright © 2018 TIS Inc. All rights reserved. 23
4)システム全体の障害を避けたい
アクターでエラーが発⽣したらスーパーバイザーへ
1万円引落し
故障!!
故障中
システムをダウンさせないよう、
すべての障害を想定しCatch
現⾦引き出し
try {
Atm.takeOutCash()
} catch () {
// 障害が発⽣したときの処理
}
障害制御はスーパーバイザーに任せる
Dave
ATM モバイル
スーパーバイザー
トラディショナル Akka
- 障害制御においても疎結合
Copyright © 2018 TIS Inc. All rights reserved. 24
スーパーバイザーヒエラルキー
https://doc.akka.io/docs/akka/2.5/general/supervision.html
Akkaは適切な単位で障害制御を⾏うため、スーパーバイザー
ヒエラルキーを持つ
https://livebook.manning.com/#!/book/akka-in-action/chapter-1/
Copyright © 2018 TIS Inc. All rights reserved. 25
1)データを耐久性のあるものにしたい
DB  インメモリーで状態を持ちイベントを永続化
2)インタラクティブな機能を実装したい
ポーリング  メッセージパッシング
3)サービスを分離して疎結合にしたい
キュー  アクター間は疎結合
4)システム全体の障害を避けたい
全障害シナリオをキャッチ  コンポーネント間で影響なし
トラディショナルスタイルとAkkaを4つのケースで⽐較してみた
Copyright © 2018 TIS Inc. All rights reserved.
耐障害性についてもう少し
26
Copyright © 2018 TIS Inc. All rights reserved. 27
• サービスのレスポンスが遅いときがある
• サービスが使えないときがある
即応性のないサービスを使いますか?
Copyright © 2018 TIS Inc. All rights reserved. 28
• サービスのレスポンスが遅いときがある
✓弾⼒性を備え、トラフィックが⾼いときも即応性を維持
✓RDBMSへのロック&アップデートから脱却
✓アクターの状態をアップデート
✓アクターは受信したメッセージを順に処理するため競合しない
即応性を持たせるにはどうすればよいか? 1/2
• 1万円引落
• 1万円引落
• 3万円預⼊
イベントの永続化
イベントの再⽣
1万円引落し
1万円引落し
ATM
モバイル
⼝座
残⾼
1万円
Copyright © 2018 TIS Inc. All rights reserved. 29
• サービスが使えなくなるときがある
✓耐障害性を備え、部分的な障害で留め全体をダウンさせない
✓Akkaクラスタ使って⼀部のノードに障害が発⽣しても、残りの
ノードで処理を継続
即応性を持たせるにはどうすればよいか? 2/2
ノード
アクター
正常なノードに移動
障害発⽣
Copyright © 2018 TIS Inc. All rights reserved. 30
ダウンしたノードは何もしないため、⾳信不通=ダウンとみなし回復
ダウンした後、使えるようになるまでの時間
- 障害検知 5s
- ハートビート間隔
- ハートビートの応答待ち時間
- 誤検知防⽌待ち時間
- クラスタメンバーの状態が浸透するまでの時間 7s※
- 同⼀アクターが複数⽣成されるのを防⽌するマージン 7s※
- アクターの再⽣成 αs
※5ノードの場合の推奨値
ノード間で常時
ヘルスチェック
Copyright © 2018 TIS Inc. All rights reserved. 31
• ダウンしたノードを⾃動的に復元するのは危険
• ネッドワーク分断時にSplit Brainが発⽣する
• Akka Sprit Brain Resolver(商⽤機能)
• 短すぎる設定でも同様の問題が発⽣
同⼀アクターが複数存在する危険性
Copyright © 2018 TIS Inc. All rights reserved. 32
リアクティブジャーニー
Akka Actorでトラフィックが⾼いときも即応性を維持
Akka Persistenceでデータに耐久性を
サーバー障害時も動作し続ける、レジリエンスなシステムを⽬指し
Akka Clusterでクラスタを
ネットワーク分断が発⽣したときも⼀貫性を失わないよう
Akka Split Brain Resolverを使って不要なノードをダウンさせる
データセンター障害時にも備えておきたい!
(Akka MultiDCを使って複数データセンターにクラスタを組む)
Copyright © 2018 TIS Inc. All rights reserved. 33
Akkaのエコシステム
拡張機能 機能
Akka Actors 低レベルなスレッドプログラミングを⾏わずに並⾏分散シス
テムを実現できるモデル
Akka Streams ノンブロッキングなバックプレッシャーを備えた⾮同期スト
リーム処理を直感的かつ安全に実現
Akka Http モダン、⾼速、⾮同期、ストリームファーストなHTTPサー
バーとクライアント
Akka Cluster システムを複数ノードに分散させ、レジリエンスと弾⼒性を
実現
Cluster Sharding 識別⼦に基づいてアクターをクラスター全体に分散
Distributed Data 結果整合性、⾼スループット、低レイテンシを実現するデー
タ構造
Alpakka 他の技術と統合するためのAkkaStreamのコネクタ
Akka Persistence イベントソーシングで再起動後も同じ状態に復元
Akka Management クラウド上でAkkaシステムを運⽤するための拡張(k8s、
AWS)
Commercial Addons split brain resolver, Multi-DC Persistenceなどの商⽤機能
https://akka.io/docs/
Copyright © 2018 TIS Inc. All rights reserved.
最後に
34
まとめ
Copyright © 2018 TIS Inc. All rights reserved. 35
まとめ
• リアクティブシステムは4つの原則を満たすアーキテクチャ
• トラフィックが増えデータも増える中、24×7とにかく早いレス
ポンスが求められる
• アクターモデルがメッセージ駆動を実現
• Akkaは並⾏処理や分散システムの構築における複雑度の上昇を
抑⽌してくれるツールキット
• Akka Extensionsや商⽤機能を利⽤することでよりレジリエン
スなシステムを構築できる
注)ただし、ものごとが並⾏に起こるということをデザインする
ことは容易ではない。⼈類には…
Copyright © 2018 TIS Inc. All rights reserved. 36
どこからはじめる?
• ⼤きいファイルのアップロードにAkka Streamsを使ってみる
• バッチ処理の性能改善にAkka Streamsを使ってみる
• アクターのタイマーをトリガーに使ってみる
並⾏プログラミングからクラスタリング
そして、リアクティブシステムへ
Copyright © 2018 TIS Inc. All rights reserved.
どうやってはじめる?
37
• Akka実践バイブル(翔泳社)
• メニーコア時代のパラダイム リアクティブシステムを知ろう(ThinkIT)
Kindle版は固定レイアウトなので電子書籍ならPDF版がオススメ
• Reactive	Architecture:	Introduction	to	Reactive	Systems	
• Reactive	Architecture:	Domain	Driven	Design	
• Reactive	Architecture:	Reactive	Microservices	(Coming	Soon!)	
- 動画(スクリプト付き)で学び、簡単なテストで理解を確認しながら自分
のペースで進められる	
- コンプリートしたら認定証みたいなのも発行されるので多少達成感もある?
Copyright © 2018 TIS Inc. All rights reserved.
We are hiring!
38
いっしょに人類の限界に挑戦しませんか?
注)ものごとが並⾏に起こるということをデザインする
ことは容易ではない ⼈類には…
究極の可⽤性を⼿に⼊れるべく
ダウンタイムの短縮にチャレンジしています。
THANK YOU

More Related Content

What's hot

アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチアーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチYusuke Suzuki
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
分散システムの限界について知ろう
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろうShingo Omura
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本Sotaro Kimura
 
DDDモデリング勉強会 #6
DDDモデリング勉強会 #6DDDモデリング勉強会 #6
DDDモデリング勉強会 #6株式会社Jurabi
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本kazuki kumagai
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようShuto Suzuki
 
kube-system落としてみました
kube-system落としてみましたkube-system落としてみました
kube-system落としてみましたShuntaro Saiba
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてShigeru Tatsuta
 
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumiリアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumiYuta Okamoto
 
緊急Ques - コードのメトリクスに基づくリファクタリング戦略
緊急Ques - コードのメトリクスに基づくリファクタリング戦略緊急Ques - コードのメトリクスに基づくリファクタリング戦略
緊急Ques - コードのメトリクスに基づくリファクタリング戦略Tomoki Kuriyama
 
スクラムパタン入門
スクラムパタン入門スクラムパタン入門
スクラムパタン入門Kiro Harada
 
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編まべ☆てっく運営
 
IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkIoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkTakanori Suzuki
 
オンプレを少しずつコンテナ化する
オンプレを少しずつコンテナ化するオンプレを少しずつコンテナ化する
オンプレを少しずつコンテナ化するKenkichi Okazaki
 

What's hot (20)

アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチアーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
分散システムの限界について知ろう
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろう
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本
 
DDDモデリング勉強会 #6
DDDモデリング勉強会 #6DDDモデリング勉強会 #6
DDDモデリング勉強会 #6
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 
kube-system落としてみました
kube-system落としてみましたkube-system落としてみました
kube-system落としてみました
 
Akka actorを何故使うのか?
Akka actorを何故使うのか?Akka actorを何故使うのか?
Akka actorを何故使うのか?
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行について
 
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumiリアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
 
緊急Ques - コードのメトリクスに基づくリファクタリング戦略
緊急Ques - コードのメトリクスに基づくリファクタリング戦略緊急Ques - コードのメトリクスに基づくリファクタリング戦略
緊急Ques - コードのメトリクスに基づくリファクタリング戦略
 
スクラムパタン入門
スクラムパタン入門スクラムパタン入門
スクラムパタン入門
 
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache FlinkIoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache Flink
 
オンプレを少しずつコンテナ化する
オンプレを少しずつコンテナ化するオンプレを少しずつコンテナ化する
オンプレを少しずつコンテナ化する
 

Similar to リアクティブシステムとAkka

Starting Reactive Systems with Lerna #reactive_shinjuku
Starting Reactive Systems with Lerna #reactive_shinjukuStarting Reactive Systems with Lerna #reactive_shinjuku
Starting Reactive Systems with Lerna #reactive_shinjukuTIS Inc.
 
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡心 谷本
 
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」Serverworks Co.,Ltd.
 
AWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべことAWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべことKeisuke Nishitani
 
Akkaの並行性
Akkaの並行性Akkaの並行性
Akkaの並行性TIS Inc.
 
[CTO Night & Day 2019] Blockchain on AWS #ctonight
[CTO Night & Day 2019] Blockchain on AWS #ctonight[CTO Night & Day 2019] Blockchain on AWS #ctonight
[CTO Night & Day 2019] Blockchain on AWS #ctonightAmazon Web Services Japan
 
次世代の企業ITインフラを支えるエンジニアとは
次世代の企業ITインフラを支えるエンジニアとは次世代の企業ITインフラを支えるエンジニアとは
次世代の企業ITインフラを支えるエンジニアとはTrainocate Japan, Ltd.
 
スタートアップがAWSを使うべき3つの理由
スタートアップがAWSを使うべき3つの理由スタートアップがAWSを使うべき3つの理由
スタートアップがAWSを使うべき3つの理由Serverworks Co.,Ltd.
 
Wsfc basic 130720
Wsfc basic 130720Wsfc basic 130720
Wsfc basic 130720wintechq
 
JTF2018 FIWARE x robot x IoT
JTF2018 FIWARE x robot x IoTJTF2018 FIWARE x robot x IoT
JTF2018 FIWARE x robot x IoTNobuyuki Matsui
 
Typesafe Reactive Platformで作るReactive System入門
Typesafe Reactive Platformで作るReactive System入門Typesafe Reactive Platformで作るReactive System入門
Typesafe Reactive Platformで作るReactive System入門TIS Inc.
 
CSCJ_Webcast_20180626_ACI.pdf
CSCJ_Webcast_20180626_ACI.pdfCSCJ_Webcast_20180626_ACI.pdf
CSCJ_Webcast_20180626_ACI.pdfyojitanaka2
 
AWSオンリーで実現するIoTクラウド基盤
AWSオンリーで実現するIoTクラウド基盤AWSオンリーで実現するIoTクラウド基盤
AWSオンリーで実現するIoTクラウド基盤Godai Nakamura
 
OCHaCafe #4 Hyperledger Fabric アプリケーション設計入門ガイドでしゃべった内容+おまけ資料
OCHaCafe #4 Hyperledger Fabric アプリケーション設計入門ガイドでしゃべった内容+おまけ資料OCHaCafe #4 Hyperledger Fabric アプリケーション設計入門ガイドでしゃべった内容+おまけ資料
OCHaCafe #4 Hyperledger Fabric アプリケーション設計入門ガイドでしゃべった内容+おまけ資料オラクルエンジニア通信
 
The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)Kimihiko Kitase
 
Example of exiting legacy system
Example of exiting legacy systemExample of exiting legacy system
Example of exiting legacy systemTakamchiTanaka
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
ぜんぜんスマートじゃないプライベートクラウドの現実 運用担当者が苦労する4つの問題と3つの救済案
ぜんぜんスマートじゃないプライベートクラウドの現実 運用担当者が苦労する4つの問題と3つの救済案ぜんぜんスマートじゃないプライベートクラウドの現実 運用担当者が苦労する4つの問題と3つの救済案
ぜんぜんスマートじゃないプライベートクラウドの現実 運用担当者が苦労する4つの問題と3つの救済案Kentaro Kamata
 
クラウド時代を生き残る経営戦略策定のススメ「クラウドは敵か?味方か?」(山口・岡山)
クラウド時代を生き残る経営戦略策定のススメ「クラウドは敵か?味方か?」(山口・岡山)クラウド時代を生き残る経営戦略策定のススメ「クラウドは敵か?味方か?」(山口・岡山)
クラウド時代を生き残る経営戦略策定のススメ「クラウドは敵か?味方か?」(山口・岡山)Serverworks Co.,Ltd.
 
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」Nobuyuki Tamaoki
 

Similar to リアクティブシステムとAkka (20)

Starting Reactive Systems with Lerna #reactive_shinjuku
Starting Reactive Systems with Lerna #reactive_shinjukuStarting Reactive Systems with Lerna #reactive_shinjuku
Starting Reactive Systems with Lerna #reactive_shinjuku
 
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
 
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」
 
AWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべことAWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべこと
 
Akkaの並行性
Akkaの並行性Akkaの並行性
Akkaの並行性
 
[CTO Night & Day 2019] Blockchain on AWS #ctonight
[CTO Night & Day 2019] Blockchain on AWS #ctonight[CTO Night & Day 2019] Blockchain on AWS #ctonight
[CTO Night & Day 2019] Blockchain on AWS #ctonight
 
次世代の企業ITインフラを支えるエンジニアとは
次世代の企業ITインフラを支えるエンジニアとは次世代の企業ITインフラを支えるエンジニアとは
次世代の企業ITインフラを支えるエンジニアとは
 
スタートアップがAWSを使うべき3つの理由
スタートアップがAWSを使うべき3つの理由スタートアップがAWSを使うべき3つの理由
スタートアップがAWSを使うべき3つの理由
 
Wsfc basic 130720
Wsfc basic 130720Wsfc basic 130720
Wsfc basic 130720
 
JTF2018 FIWARE x robot x IoT
JTF2018 FIWARE x robot x IoTJTF2018 FIWARE x robot x IoT
JTF2018 FIWARE x robot x IoT
 
Typesafe Reactive Platformで作るReactive System入門
Typesafe Reactive Platformで作るReactive System入門Typesafe Reactive Platformで作るReactive System入門
Typesafe Reactive Platformで作るReactive System入門
 
CSCJ_Webcast_20180626_ACI.pdf
CSCJ_Webcast_20180626_ACI.pdfCSCJ_Webcast_20180626_ACI.pdf
CSCJ_Webcast_20180626_ACI.pdf
 
AWSオンリーで実現するIoTクラウド基盤
AWSオンリーで実現するIoTクラウド基盤AWSオンリーで実現するIoTクラウド基盤
AWSオンリーで実現するIoTクラウド基盤
 
OCHaCafe #4 Hyperledger Fabric アプリケーション設計入門ガイドでしゃべった内容+おまけ資料
OCHaCafe #4 Hyperledger Fabric アプリケーション設計入門ガイドでしゃべった内容+おまけ資料OCHaCafe #4 Hyperledger Fabric アプリケーション設計入門ガイドでしゃべった内容+おまけ資料
OCHaCafe #4 Hyperledger Fabric アプリケーション設計入門ガイドでしゃべった内容+おまけ資料
 
The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)
 
Example of exiting legacy system
Example of exiting legacy systemExample of exiting legacy system
Example of exiting legacy system
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
ぜんぜんスマートじゃないプライベートクラウドの現実 運用担当者が苦労する4つの問題と3つの救済案
ぜんぜんスマートじゃないプライベートクラウドの現実 運用担当者が苦労する4つの問題と3つの救済案ぜんぜんスマートじゃないプライベートクラウドの現実 運用担当者が苦労する4つの問題と3つの救済案
ぜんぜんスマートじゃないプライベートクラウドの現実 運用担当者が苦労する4つの問題と3つの救済案
 
クラウド時代を生き残る経営戦略策定のススメ「クラウドは敵か?味方か?」(山口・岡山)
クラウド時代を生き残る経営戦略策定のススメ「クラウドは敵か?味方か?」(山口・岡山)クラウド時代を生き残る経営戦略策定のススメ「クラウドは敵か?味方か?」(山口・岡山)
クラウド時代を生き残る経営戦略策定のススメ「クラウドは敵か?味方か?」(山口・岡山)
 
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
 

More from TIS Inc.

AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現
AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現
AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現TIS Inc.
 
Reactive Systems that focus on High Availability with Lerna
Reactive Systems that focus on High Availability with LernaReactive Systems that focus on High Availability with Lerna
Reactive Systems that focus on High Availability with LernaTIS Inc.
 
可用性を突き詰めたリアクティブシステム
可用性を突き詰めたリアクティブシステム可用性を突き詰めたリアクティブシステム
可用性を突き詰めたリアクティブシステムTIS Inc.
 
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜TIS Inc.
 
JavaからAkkaハンズオン
JavaからAkkaハンズオンJavaからAkkaハンズオン
JavaからAkkaハンズオンTIS Inc.
 
Akka in Action workshop #ScalaMatsuri 2018
Akka in Action workshop #ScalaMatsuri 2018Akka in Action workshop #ScalaMatsuri 2018
Akka in Action workshop #ScalaMatsuri 2018TIS Inc.
 
Preparing for distributed system failures using akka #ScalaMatsuri
Preparing for distributed system failures using akka #ScalaMatsuriPreparing for distributed system failures using akka #ScalaMatsuri
Preparing for distributed system failures using akka #ScalaMatsuriTIS Inc.
 
Akkaで実現するステートフルでスケーラブルなアーキテクチャ
Akkaで実現するステートフルでスケーラブルなアーキテクチャAkkaで実現するステートフルでスケーラブルなアーキテクチャ
Akkaで実現するステートフルでスケーラブルなアーキテクチャTIS Inc.
 
akka-doc-ja
akka-doc-jaakka-doc-ja
akka-doc-jaTIS Inc.
 
10分で分かるリアクティブシステム
10分で分かるリアクティブシステム10分で分かるリアクティブシステム
10分で分かるリアクティブシステムTIS Inc.
 
Typesafe Reactive Platformで作るReactive System
Typesafe Reactive Platformで作るReactive SystemTypesafe Reactive Platformで作るReactive System
Typesafe Reactive Platformで作るReactive SystemTIS Inc.
 
Effective Akka読書会2
Effective Akka読書会2Effective Akka読書会2
Effective Akka読書会2TIS Inc.
 
再帰で脱Javaライク
再帰で脱Javaライク再帰で脱Javaライク
再帰で脱JavaライクTIS Inc.
 
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)TIS Inc.
 
甲賀流Jenkins活用術
甲賀流Jenkins活用術甲賀流Jenkins活用術
甲賀流Jenkins活用術TIS Inc.
 

More from TIS Inc. (15)

AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現
AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現
AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現
 
Reactive Systems that focus on High Availability with Lerna
Reactive Systems that focus on High Availability with LernaReactive Systems that focus on High Availability with Lerna
Reactive Systems that focus on High Availability with Lerna
 
可用性を突き詰めたリアクティブシステム
可用性を突き詰めたリアクティブシステム可用性を突き詰めたリアクティブシステム
可用性を突き詰めたリアクティブシステム
 
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜
 
JavaからAkkaハンズオン
JavaからAkkaハンズオンJavaからAkkaハンズオン
JavaからAkkaハンズオン
 
Akka in Action workshop #ScalaMatsuri 2018
Akka in Action workshop #ScalaMatsuri 2018Akka in Action workshop #ScalaMatsuri 2018
Akka in Action workshop #ScalaMatsuri 2018
 
Preparing for distributed system failures using akka #ScalaMatsuri
Preparing for distributed system failures using akka #ScalaMatsuriPreparing for distributed system failures using akka #ScalaMatsuri
Preparing for distributed system failures using akka #ScalaMatsuri
 
Akkaで実現するステートフルでスケーラブルなアーキテクチャ
Akkaで実現するステートフルでスケーラブルなアーキテクチャAkkaで実現するステートフルでスケーラブルなアーキテクチャ
Akkaで実現するステートフルでスケーラブルなアーキテクチャ
 
akka-doc-ja
akka-doc-jaakka-doc-ja
akka-doc-ja
 
10分で分かるリアクティブシステム
10分で分かるリアクティブシステム10分で分かるリアクティブシステム
10分で分かるリアクティブシステム
 
Typesafe Reactive Platformで作るReactive System
Typesafe Reactive Platformで作るReactive SystemTypesafe Reactive Platformで作るReactive System
Typesafe Reactive Platformで作るReactive System
 
Effective Akka読書会2
Effective Akka読書会2Effective Akka読書会2
Effective Akka読書会2
 
再帰で脱Javaライク
再帰で脱Javaライク再帰で脱Javaライク
再帰で脱Javaライク
 
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
 
甲賀流Jenkins活用術
甲賀流Jenkins活用術甲賀流Jenkins活用術
甲賀流Jenkins活用術
 

リアクティブシステムとAkka

  • 1. Copyright © 2018 TIS Inc. All rights reserved. Reactive Systems と Akka 前出 祐吾 @yugolf
  • 2. Copyright © 2018 TIS Inc. All rights reserved. TIS株式会社  前出 祐吾 @yugolf 最近の研究テーマ  オープン環境で⾼可⽤システムどうやって構築する? 最近翻訳した本 最近書いた記事  ThinkIT:Akka HTTPでWeb APIに仕⽴てる 2 ⾃⼰紹介 本⽇公開
  • 3. Copyright © 2018 TIS Inc. All rights reserved. 3 本⽇のお話 リアクティブシステムが解決する問題が何で、 どう解決するかをAkkaを通じて知る • 注意 - ⾃⾝がAkkaに取り組んでいるモチベーション的観点でお話します - 解決策はいろいろあるので、その⼀つとして聞いてください
  • 4. Copyright © 2018 TIS Inc. All rights reserved. 4 アジェンダ •リアクティブシステムの説明 •Akkaとは •アクターモデル •Akkaのアクター •耐障害性についてもう少し アジェンダ
  • 5. Copyright © 2018 TIS Inc. All rights reserved. 5 リアクティブシステム • メッセージ駆動のアーキテクチャによりユーザーの要求に可能な限り迅速に レスポンスする(即応性)システム • ⾼負荷状況や問題が検出された時でも応答時間を⼀定⽔準に保ち(弾⼒ 性)、部分的な障害が発⽣した時にもシステム全体を危険にさらすことなく 回復させる(耐障害性) ※リアクティブ宣言(https://www.reactivemanifesto.org/ja)より
  • 6. Copyright © 2018 TIS Inc. All rights reserved. 6 つまり、解決する問題は? • システムの利⽤者が増え、扱うデータも増える • それでも、「もっと速く」、「24時間365⽇」
 とユーザーの要求は⾼まるばかり • もうこれまでのアーキテクチャでは限界 必要なのは? リアクティブシステム!! ⾮同期、ノンブロッキング、⾼可⽤性、疎結合、 スケーラビリティ、並⾏、並列、分散、⾼スループット、 低レイテンシー、、、、
  • 7. Copyright © 2018 TIS Inc. All rights reserved. 障害はそれぞれのコンポーネントに封じ込められ、コンポーネント は互いに隔離されるので、システムが部分的に故障してもシステム 全体を危険に晒すことなしに回復することが保証される。 7 デモムービー - 耐障害性(Resilient)編 - 細かい仕組みはひとまずおいておいて デモムービーで雰囲気を掴んでください
  • 8. Copyright © 2018 TIS Inc. All rights reserved. 8 リアクティブプログラミングでリアクティブシステム Future Reactive Streams RxJava RxScala CompletableFuture リアクティブシステム アーキテクチャレベルで4つの原則を適用 例:リアクティブシステムを適⽤して構築されたマイクロサービス マイクロサービス リアクティブプログラミングすれば、必ずしもリアクティブシステムが できあがるとは限らない ✓1つのノードがクラッシュしても回復する⼒があるか? ✓スケールアウト・スケールインできるか? リアクティブプログラミング リアクティブシステムを構築する プログラミング技術のひとつ
  • 9. Copyright © 2018 TIS Inc. All rights reserved. 9 ⼿段となるメッセージ駆動 コンポーネント コンポーネント メッセージ駆動を実現するツールキットAkka リアクティブシステムは⾮同期なメッセージパッシングによっ てコンポーネント間の境界を確⽴する
  • 10. Copyright © 2018 TIS Inc. All rights reserved. Akkaとは 10 第1章 Akkaの紹介
  • 11. Copyright © 2018 TIS Inc. All rights reserved. 11 Akkaとは 並⾏・分散システムを構築するためのツールキット • スケールアップ(並⾏)やスケール アウト(分散)の実現によるアプリ ケーションの複雑化を抑⽌ https://livebook.manning.com/#!/book/akka-in-action/chapter-1/
  • 12. Copyright © 2018 TIS Inc. All rights reserved. 12 単⼀のプログラミングモデルでスケールアップ・スケールアウト アクターモデルはメッセージの送受信を抽象化することにより、 実装とスレッドの数やサーバーの台数に対する結合度を下げる シングルスレッドで実⾏ 複数サーバーで実⾏ 逐次処理 並⾏処理 分散処理 アクターモデル マルチコアで実⾏ 位置透過性
  • 13. Copyright © 2018 TIS Inc. All rights reserved. アクターモデル 13 第2章 最⼩のAkkaアプリケーション
  • 14. Copyright © 2018 TIS Inc. All rights reserved. 14 アクターモデルとは 並⾏的に受信するメッセージに対する以下のふるまいを備える • アクターを作る • アクターにメッセージを送信する • メッセージを受信したときの動作を指定する トラディショナルモデルとの違い トラディショナルモデル アクターモデル 逐次実⾏が基本で部分的に並⾏処理を実装 本質的に並⾏
  • 15. Copyright © 2018 TIS Inc. All rights reserved. 15 本質的に並⾏? 顧客 チケット販売員 Buy Buy Buy メールボックス Akkaを使うことでアクターのプログラミングに集中できる • コンポーネント間のやり取りはメッセージで行う • 関数の応答を待つ必要はなく並行に処理される • アクターはメールボックスを持ち到着順に処理する
  • 16. Copyright © 2018 TIS Inc. All rights reserved. 16 もしあなたがErlangの世界のアクターだった場合 「すごいErlangゆかいに学ぼう!」より https://www.ymotongpoo.com/works/lyse-ja/ja/01_introduction.html あなたは孤独な⼈間で、窓もない暗い部屋に座っていて、 メールボックスにメッセージが届くのを待っている状態で す。 そしてメッセージを受け取ると、それに対して特定の⽅法で 反応します:メッセージを受け取るときにお⾦を払い、誕⽣ ⽇カードには「ありがとう(“Thank you”)」という⽂字で返 事をし、理解出来ない⽂字は無視するという具合です。
  • 17. Copyright © 2018 TIS Inc. All rights reserved. Akkaのアクター 17 第2章 最⼩のAkkaアプリケーション
  • 18. Copyright © 2018 TIS Inc. All rights reserved. 18 トラディショナルスタイルとAkkaを4つのケースで⽐較 Akkaとは/概要/従来型との違い/アクターのプログ ラミングモデル/Akkaのアクター 1)データを保存して耐久性のあるものにしたい 2)インタラクティブな機能を実装したい 3)サービスを分離して疎結合にしたい 4)システム全体の障害を避けたい
  • 19. Copyright © 2018 TIS Inc. All rights reserved. 19 1)データを耐久性のあるものにしたい インメモリーに状態を持ち、ロック制御なしに書き換える 1万円引落し 1万円引落し 残⾼ 1万円 ATM モバイル 1万円引落し 1万円引落し ロック ATM モバイル ⼝座 残⾼ 1万円 トラディショナル Akka ボトルネック
  • 20. Copyright © 2018 TIS Inc. All rights reserved. 20 1)データを耐久性のあるものにしたい 状態をイベントとして永続化しておき(Akka Persistence)、 これらを再⽣することで状態を復元できる • 1万円引落 • 1万円引落 • 3万円預⼊ 「スケールアウトしやすいようステートレスに」、 から「ステートフルでスケーラブルに」 イベントの永続化 イベントの再⽣ 1万円引落し 1万円引落し ATM モバイル ⼝座 残⾼ 1万円
  • 21. Copyright © 2018 TIS Inc. All rights reserved. 21 2)インタラクティブな機能を作りたい メッセージパッシングなので基本プッシュ ポーリング @Bob “こんにちは!” Alice Bob プッシュ Alice Bob チャットサーバー トラディショナル Akka
  • 22. Copyright © 2018 TIS Inc. All rights reserved. チャットサーバー メンションサーバー - 時間的疎結合:メッセージの応答を待たない - 機能的疎結合:送信後どうなったか知らない - 位置的疎結合:別サーバーにいてもいい 22 3)サービスを分離して疎結合にしたい メッセージパッシングなので元々⾮同期で疎結合 • 密結合は複雑度をあげる • 変更容易=技術的負債になりづらい、ほどよい疎結合 「メンション」がメッセー ジを受信したときのふる まいを定義するだけ 「メンション」のふるまい が変わっても「会話」は影 響を受けない チャット エンキュー デキュー 会話 メンションMeメンション トラディショナル Akka
  • 23. Copyright © 2018 TIS Inc. All rights reserved. 23 4)システム全体の障害を避けたい アクターでエラーが発⽣したらスーパーバイザーへ 1万円引落し 故障!! 故障中 システムをダウンさせないよう、 すべての障害を想定しCatch 現⾦引き出し try { Atm.takeOutCash() } catch () { // 障害が発⽣したときの処理 } 障害制御はスーパーバイザーに任せる Dave ATM モバイル スーパーバイザー トラディショナル Akka - 障害制御においても疎結合
  • 24. Copyright © 2018 TIS Inc. All rights reserved. 24 スーパーバイザーヒエラルキー https://doc.akka.io/docs/akka/2.5/general/supervision.html Akkaは適切な単位で障害制御を⾏うため、スーパーバイザー ヒエラルキーを持つ https://livebook.manning.com/#!/book/akka-in-action/chapter-1/
  • 25. Copyright © 2018 TIS Inc. All rights reserved. 25 1)データを耐久性のあるものにしたい DB  インメモリーで状態を持ちイベントを永続化 2)インタラクティブな機能を実装したい ポーリング  メッセージパッシング 3)サービスを分離して疎結合にしたい キュー  アクター間は疎結合 4)システム全体の障害を避けたい 全障害シナリオをキャッチ  コンポーネント間で影響なし トラディショナルスタイルとAkkaを4つのケースで⽐較してみた
  • 26. Copyright © 2018 TIS Inc. All rights reserved. 耐障害性についてもう少し 26
  • 27. Copyright © 2018 TIS Inc. All rights reserved. 27 • サービスのレスポンスが遅いときがある • サービスが使えないときがある 即応性のないサービスを使いますか?
  • 28. Copyright © 2018 TIS Inc. All rights reserved. 28 • サービスのレスポンスが遅いときがある ✓弾⼒性を備え、トラフィックが⾼いときも即応性を維持 ✓RDBMSへのロック&アップデートから脱却 ✓アクターの状態をアップデート ✓アクターは受信したメッセージを順に処理するため競合しない 即応性を持たせるにはどうすればよいか? 1/2 • 1万円引落 • 1万円引落 • 3万円預⼊ イベントの永続化 イベントの再⽣ 1万円引落し 1万円引落し ATM モバイル ⼝座 残⾼ 1万円
  • 29. Copyright © 2018 TIS Inc. All rights reserved. 29 • サービスが使えなくなるときがある ✓耐障害性を備え、部分的な障害で留め全体をダウンさせない ✓Akkaクラスタ使って⼀部のノードに障害が発⽣しても、残りの ノードで処理を継続 即応性を持たせるにはどうすればよいか? 2/2 ノード アクター 正常なノードに移動 障害発⽣
  • 30. Copyright © 2018 TIS Inc. All rights reserved. 30 ダウンしたノードは何もしないため、⾳信不通=ダウンとみなし回復 ダウンした後、使えるようになるまでの時間 - 障害検知 5s - ハートビート間隔 - ハートビートの応答待ち時間 - 誤検知防⽌待ち時間 - クラスタメンバーの状態が浸透するまでの時間 7s※ - 同⼀アクターが複数⽣成されるのを防⽌するマージン 7s※ - アクターの再⽣成 αs ※5ノードの場合の推奨値 ノード間で常時 ヘルスチェック
  • 31. Copyright © 2018 TIS Inc. All rights reserved. 31 • ダウンしたノードを⾃動的に復元するのは危険 • ネッドワーク分断時にSplit Brainが発⽣する • Akka Sprit Brain Resolver(商⽤機能) • 短すぎる設定でも同様の問題が発⽣ 同⼀アクターが複数存在する危険性
  • 32. Copyright © 2018 TIS Inc. All rights reserved. 32 リアクティブジャーニー Akka Actorでトラフィックが⾼いときも即応性を維持 Akka Persistenceでデータに耐久性を サーバー障害時も動作し続ける、レジリエンスなシステムを⽬指し Akka Clusterでクラスタを ネットワーク分断が発⽣したときも⼀貫性を失わないよう Akka Split Brain Resolverを使って不要なノードをダウンさせる データセンター障害時にも備えておきたい! (Akka MultiDCを使って複数データセンターにクラスタを組む)
  • 33. Copyright © 2018 TIS Inc. All rights reserved. 33 Akkaのエコシステム 拡張機能 機能 Akka Actors 低レベルなスレッドプログラミングを⾏わずに並⾏分散シス テムを実現できるモデル Akka Streams ノンブロッキングなバックプレッシャーを備えた⾮同期スト リーム処理を直感的かつ安全に実現 Akka Http モダン、⾼速、⾮同期、ストリームファーストなHTTPサー バーとクライアント Akka Cluster システムを複数ノードに分散させ、レジリエンスと弾⼒性を 実現 Cluster Sharding 識別⼦に基づいてアクターをクラスター全体に分散 Distributed Data 結果整合性、⾼スループット、低レイテンシを実現するデー タ構造 Alpakka 他の技術と統合するためのAkkaStreamのコネクタ Akka Persistence イベントソーシングで再起動後も同じ状態に復元 Akka Management クラウド上でAkkaシステムを運⽤するための拡張(k8s、 AWS) Commercial Addons split brain resolver, Multi-DC Persistenceなどの商⽤機能 https://akka.io/docs/
  • 34. Copyright © 2018 TIS Inc. All rights reserved. 最後に 34 まとめ
  • 35. Copyright © 2018 TIS Inc. All rights reserved. 35 まとめ • リアクティブシステムは4つの原則を満たすアーキテクチャ • トラフィックが増えデータも増える中、24×7とにかく早いレス ポンスが求められる • アクターモデルがメッセージ駆動を実現 • Akkaは並⾏処理や分散システムの構築における複雑度の上昇を 抑⽌してくれるツールキット • Akka Extensionsや商⽤機能を利⽤することでよりレジリエン スなシステムを構築できる 注)ただし、ものごとが並⾏に起こるということをデザインする ことは容易ではない。⼈類には…
  • 36. Copyright © 2018 TIS Inc. All rights reserved. 36 どこからはじめる? • ⼤きいファイルのアップロードにAkka Streamsを使ってみる • バッチ処理の性能改善にAkka Streamsを使ってみる • アクターのタイマーをトリガーに使ってみる 並⾏プログラミングからクラスタリング そして、リアクティブシステムへ
  • 37. Copyright © 2018 TIS Inc. All rights reserved. どうやってはじめる? 37 • Akka実践バイブル(翔泳社) • メニーコア時代のパラダイム リアクティブシステムを知ろう(ThinkIT) Kindle版は固定レイアウトなので電子書籍ならPDF版がオススメ • Reactive Architecture: Introduction to Reactive Systems • Reactive Architecture: Domain Driven Design • Reactive Architecture: Reactive Microservices (Coming Soon!) - 動画(スクリプト付き)で学び、簡単なテストで理解を確認しながら自分 のペースで進められる - コンプリートしたら認定証みたいなのも発行されるので多少達成感もある?
  • 38. Copyright © 2018 TIS Inc. All rights reserved. We are hiring! 38 いっしょに人類の限界に挑戦しませんか? 注)ものごとが並⾏に起こるということをデザインする ことは容易ではない ⼈類には… 究極の可⽤性を⼿に⼊れるべく ダウンタイムの短縮にチャレンジしています。