Submit Search
Upload
リアクティブシステムとAkka
•
2 likes
•
847 views
TIS Inc.
Follow
Reactive Systems Meetup in 大阪のスライドです。
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 39
Download now
Download to read offline
Recommended
CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。
Matsushita Satoshi
Akkaで分散システム入門
Akkaで分散システム入門
Shingo Omura
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
Yoshimura Soichiro
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
Scala、DDD、Akkaで立ち向かう 〜広告配信システムに課せられた100msの制約〜
Scala、DDD、Akkaで立ち向かう 〜広告配信システムに課せられた100msの制約〜
MicroAd, Inc.(Engineer)
MLOps入門
MLOps入門
Hiro Mura
Recommended
CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。
Matsushita Satoshi
Akkaで分散システム入門
Akkaで分散システム入門
Shingo Omura
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
Yoshimura Soichiro
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
Scala、DDD、Akkaで立ち向かう 〜広告配信システムに課せられた100msの制約〜
Scala、DDD、Akkaで立ち向かう 〜広告配信システムに課せられた100msの制約〜
MicroAd, Inc.(Engineer)
MLOps入門
MLOps入門
Hiro Mura
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
Yusuke Suzuki
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
分散システムの限界について知ろう
分散システムの限界について知ろう
Shingo Omura
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本
Sotaro Kimura
DDDモデリング勉強会 #6
DDDモデリング勉強会 #6
株式会社Jurabi
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
kazuki kumagai
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Shuto Suzuki
kube-system落としてみました
kube-system落としてみました
Shuntaro Saiba
Akka actorを何故使うのか?
Akka actorを何故使うのか?
Nyle Inc.(ナイル株式会社)
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行について
Shigeru Tatsuta
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
Yuta Okamoto
緊急Ques - コードのメトリクスに基づくリファクタリング戦略
緊急Ques - コードのメトリクスに基づくリファクタリング戦略
Tomoki Kuriyama
スクラムパタン入門
スクラムパタン入門
Kiro Harada
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
まべ☆てっく運営
Vacuum徹底解説
Vacuum徹底解説
Masahiko Sawada
IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache Flink
Takanori Suzuki
オンプレを少しずつコンテナ化する
オンプレを少しずつコンテナ化する
Kenkichi Okazaki
Starting Reactive Systems with Lerna #reactive_shinjuku
Starting Reactive Systems with Lerna #reactive_shinjuku
TIS Inc.
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
心 谷本
More Related Content
What's hot
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
Yusuke Suzuki
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
分散システムの限界について知ろう
分散システムの限界について知ろう
Shingo Omura
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本
Sotaro Kimura
DDDモデリング勉強会 #6
DDDモデリング勉強会 #6
株式会社Jurabi
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
kazuki kumagai
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Shuto Suzuki
kube-system落としてみました
kube-system落としてみました
Shuntaro Saiba
Akka actorを何故使うのか?
Akka actorを何故使うのか?
Nyle Inc.(ナイル株式会社)
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行について
Shigeru Tatsuta
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
Yuta Okamoto
緊急Ques - コードのメトリクスに基づくリファクタリング戦略
緊急Ques - コードのメトリクスに基づくリファクタリング戦略
Tomoki Kuriyama
スクラムパタン入門
スクラムパタン入門
Kiro Harada
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
まべ☆てっく運営
Vacuum徹底解説
Vacuum徹底解説
Masahiko Sawada
IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache Flink
Takanori Suzuki
オンプレを少しずつコンテナ化する
オンプレを少しずつコンテナ化する
Kenkichi Okazaki
What's hot
(20)
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
分散システムの限界について知ろう
分散システムの限界について知ろう
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本
DDDモデリング勉強会 #6
DDDモデリング勉強会 #6
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
kube-system落としてみました
kube-system落としてみました
Akka actorを何故使うのか?
Akka actorを何故使うのか?
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行について
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
緊急Ques - コードのメトリクスに基づくリファクタリング戦略
緊急Ques - コードのメトリクスに基づくリファクタリング戦略
スクラムパタン入門
スクラムパタン入門
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
Vacuum徹底解説
Vacuum徹底解説
IoT時代におけるストリームデータ処理と急成長の Apache Flink
IoT時代におけるストリームデータ処理と急成長の Apache Flink
オンプレを少しずつコンテナ化する
オンプレを少しずつコンテナ化する
Similar to リアクティブシステムとAkka
Starting Reactive Systems with Lerna #reactive_shinjuku
Starting Reactive Systems with Lerna #reactive_shinjuku
TIS Inc.
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
心 谷本
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」
Serverworks Co.,Ltd.
AWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべこと
Keisuke Nishitani
Akkaの並行性
Akkaの並行性
TIS Inc.
[CTO Night & Day 2019] Blockchain on AWS #ctonight
[CTO Night & Day 2019] Blockchain on AWS #ctonight
Amazon Web Services Japan
次世代の企業ITインフラを支えるエンジニアとは
次世代の企業ITインフラを支えるエンジニアとは
Trainocate Japan, Ltd.
スタートアップがAWSを使うべき3つの理由
スタートアップがAWSを使うべき3つの理由
Serverworks Co.,Ltd.
Wsfc basic 130720
Wsfc basic 130720
wintechq
JTF2018 FIWARE x robot x IoT
JTF2018 FIWARE x robot x IoT
Nobuyuki Matsui
Typesafe Reactive Platformで作るReactive System入門
Typesafe Reactive Platformで作るReactive System入門
TIS Inc.
CSCJ_Webcast_20180626_ACI.pdf
CSCJ_Webcast_20180626_ACI.pdf
yojitanaka2
AWSオンリーで実現するIoTクラウド基盤
AWSオンリーで実現するIoTクラウド基盤
Godai Nakamura
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)
Kimihiko Kitase
Example of exiting legacy system
Example of exiting legacy system
TakamchiTanaka
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
ぜんぜんスマートじゃないプライベートクラウドの現実 運用担当者が苦労する4つの問題と3つの救済案
ぜんぜんスマートじゃないプライベートクラウドの現実 運用担当者が苦労する4つの問題と3つの救済案
Kentaro Kamata
クラウド時代を生き残る経営戦略策定のススメ「クラウドは敵か?味方か?」(山口・岡山)
クラウド時代を生き残る経営戦略策定のススメ「クラウドは敵か?味方か?」(山口・岡山)
Serverworks Co.,Ltd.
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_shinjuku
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
実例Javaトラブルシューティング! 〜稼働中のシステムを立て直した半年間の軌跡
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」
2012年03月 経済産業省セミナー「クラウドは敵か?味方か?」
AWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべこと
Akkaの並行性
Akkaの並行性
[CTO Night & Day 2019] Blockchain on AWS #ctonight
[CTO Night & Day 2019] Blockchain on AWS #ctonight
次世代の企業ITインフラを支えるエンジニアとは
次世代の企業ITインフラを支えるエンジニアとは
スタートアップがAWSを使うべき3つの理由
スタートアップがAWSを使うべき3つの理由
Wsfc basic 130720
Wsfc basic 130720
JTF2018 FIWARE x robot x IoT
JTF2018 FIWARE x robot x IoT
Typesafe Reactive Platformで作るReactive System入門
Typesafe Reactive Platformで作るReactive System入門
CSCJ_Webcast_20180626_ACI.pdf
CSCJ_Webcast_20180626_ACI.pdf
AWSオンリーで実現するIoTクラウド基盤
AWSオンリーで実現するIoTクラウド基盤
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)
Example of exiting legacy system
Example of exiting legacy system
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
ぜんぜんスマートじゃないプライベートクラウドの現実 運用担当者が苦労する4つの問題と3つの救済案
ぜんぜんスマートじゃないプライベートクラウドの現実 運用担当者が苦労する4つの問題と3つの救済案
クラウド時代を生き残る経営戦略策定のススメ「クラウドは敵か?味方か?」(山口・岡山)
クラウド時代を生き残る経営戦略策定のススメ「クラウドは敵か?味方か?」(山口・岡山)
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
More from TIS Inc.
AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現
AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現
TIS Inc.
Reactive Systems that focus on High Availability with Lerna
Reactive Systems that focus on High Availability with Lerna
TIS Inc.
可用性を突き詰めたリアクティブシステム
可用性を突き詰めたリアクティブシステム
TIS Inc.
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜
TIS Inc.
JavaからAkkaハンズオン
JavaからAkkaハンズオン
TIS Inc.
Akka in Action workshop #ScalaMatsuri 2018
Akka in Action workshop #ScalaMatsuri 2018
TIS Inc.
Preparing for distributed system failures using akka #ScalaMatsuri
Preparing for distributed system failures using akka #ScalaMatsuri
TIS Inc.
Akkaで実現するステートフルでスケーラブルなアーキテクチャ
Akkaで実現するステートフルでスケーラブルなアーキテクチャ
TIS Inc.
akka-doc-ja
akka-doc-ja
TIS Inc.
10分で分かるリアクティブシステム
10分で分かるリアクティブシステム
TIS Inc.
Typesafe Reactive Platformで作るReactive System
Typesafe Reactive Platformで作るReactive System
TIS Inc.
Effective Akka読書会2
Effective Akka読書会2
TIS Inc.
再帰で脱Javaライク
再帰で脱Javaライク
TIS Inc.
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
TIS Inc.
甲賀流Jenkins活用術
甲賀流Jenkins活用術
TIS Inc.
More from TIS Inc.
(15)
AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現
AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現
Reactive Systems that focus on High Availability with Lerna
Reactive Systems that focus on High Availability with Lerna
可用性を突き詰めたリアクティブシステム
可用性を突き詰めたリアクティブシステム
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜
JavaからAkkaハンズオン
JavaからAkkaハンズオン
Akka 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 #ScalaMatsuri
Akkaで実現するステートフルでスケーラブルなアーキテクチャ
Akkaで実現するステートフルでスケーラブルなアーキテクチャ
akka-doc-ja
akka-doc-ja
10分で分かるリアクティブシステム
10分で分かるリアクティブシステム
Typesafe Reactive Platformで作るReactive System
Typesafe Reactive Platformで作るReactive System
Effective Akka読書会2
Effective Akka読書会2
再帰で脱Javaライク
再帰で脱Javaライク
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
甲賀流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 いっしょに人類の限界に挑戦しませんか? 注)ものごとが並⾏に起こるということをデザインする ことは容易ではない ⼈類には… 究極の可⽤性を⼿に⼊れるべく ダウンタイムの短縮にチャレンジしています。
39.
THANK YOU
Download now