Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
what is ReactiveSystem
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
petitviolet
December 22, 2016
Technology
220
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
what is ReactiveSystem
2016/12/22の社内勉強会資料
petitviolet
December 22, 2016
More Decks by petitviolet
See All by petitviolet
Stripeで請求書払い&銀行振込を実装する
petitviolet
1
1.7k
ピュアなドメインを支える技術/pure domain model and the technology behind it
petitviolet
14
11k
小さく始めるクラウドネイティブ/small start CloudNative
petitviolet
0
2.2k
2019年だからこそ12factor app/The Twelve-Factor app in 2019
petitviolet
1
1.1k
実践GraphQL on Scala/Real world GraphQL on Scala
petitviolet
8
3.4k
Kubernetesを知る/Introduction Kubernertes
petitviolet
1
710
GraphQL on Scala
petitviolet
3
2.9k
Microservices Batch on GAE
petitviolet
0
2k
Web API Design
petitviolet
18
8.7k
Other Decks in Technology
See All in Technology
SREでアラート疲れを 解決しよう!
kairim0
1
220
カンファレンスに参加した後の浮遊感とセルフケア
pauli
0
320
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.2k
3つのアプローチで目指す チームを強くするAI駆動開発
thkt
0
150
会社説明資料
persolserverworks
0
9.7k
SDDの運用にめげずに向き合った話
sansantech
PRO
1
140
事業活動を AI Ready にする攻めと守りのデータエンジニアリング / data-engineering-for-ai-ready-business
pei0804
7
2.4k
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
0
300
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
760
Running Kotlin + Quarkus with Lambda
nealle
0
380
OSC2026on_the-world-is-waiting-for-your-voice.pdf
naruoga
0
370
転んだ話が背中を預ける理由になる / A_story_about_falling_down_gives_you_a_reason_to_watch_each_other_s_backs.pdf
pauli
3
350
Featured
See All Featured
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
It's Worth the Effort
3n
188
29k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
560
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
620
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
580
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
560
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
470
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Claude Code のすすめ
schroneko
67
230k
Building AI with AI
inesmontani
PRO
1
1.3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Transcript
次世代のシステムが あるべき姿 2016/12/22 @petitviolet
伝えたいこと
全ては Reactive System のために
Agenda • what is `Reactive System` • Reactive Manifesto •
responsibility/resilient/elastic/message driven • why `Reactive System` • `Reactive System` for application engineer • Akka-Actor • OOP/FP • Summary
what is `Reactive System`
http://www.reactivemanifesto.org/ja
http://www.reactivemanifesto.org/ja
Reactive Systemとは • 以下の4つを満たすシステム • 即応性(responsibility) • レジリエンス(resilient) • 弾力性(elastic)
• メッセージ駆動(message driven)
即応性(responsibility) • 迅速な応答時間、つまり高パフォーマンスな システムであること • 即応性はあらゆるシステムにおいて要求され るものであり、何かしら障害が起きたり高負 荷になったとしても、要求される水準のパ フォーマンスを保ち続けること
レジリエンス(resilient) • システムのどこかに障害が発生しても、レプ リケーション・封じ込め・隔離・委譲のいず れかの方法によって即応性を保つ • 単なるレジリエンスではなく、復旧・回復が 入る概念 • 何かしら予期しない障害が発生したとして
も、自律的に回復すること
弾力性(elastic) • リソースを増減させて要求される即応性・ス ループットを保ち続ける • スケーラビリティとの違いは、自動で伸縮す るかどうか • 弾力性のあるシステムは負荷に応じて自動 で伸縮する
メッセージ駆動(message driven) • 前述の即応性、レジリエンス、弾力性を実現するための手段 • 非同期なメッセージパッシングによってシステムを構築する • メッセージは、状態の変化などのイベントが発生した コンポーネントから発信されるデータ •
メッセージの受信者は、普段は休止しているがメッセー ジを受け取ったらそれに反応する • メッセージの送信者と受信者にコンポーネントを時間的・空 間的に分割することによってシステムが疎結合になる • 疎結合が、resilientとelasticのベースになる
メッセージ駆動?
https://speakerdeck.com/naoya/serverless-architecture
ちょっと違う • イベント駆動と似てやや非なるもので、メッセージが中 心にあるかどうか、が大きな違い • イベントは単なる観測可能なもの(`Observable`)でし かないが、メッセージには明確な目的がある • イベント駆動 •
通知のリスナーはイベントの発生源にあり、アドレス 可能なイベントソースが中心 • メッセージ駆動 • アドレス可能なメッセージ受信者が中心
http://www.reactivemanifesto.org/ja
why `Reactive System`
http://www.reactivemanifesto.org/ja
なぜリアクティブシステムなのか • 大規模化・複雑化・分散するシステム • 要求される水準がどんどん高くなってきている
なぜリアクティブシステムなのか • 大規模化・複雑化・分散するシステム • 要求される水準がどんどん高くなってきている • どうやって”いい感じに”まとめあげるか
なぜリアクティブシステムなのか システム全体の指針となる アーキテクチャが必要 • 大規模化・複雑化・分散するシステム • 要求される水準がどんどん高くなってきている • どうやって”いい感じに”まとめあげるか
システム全体の指針となる アーキテクチャが Reactive System
それだけ
Reactive Systemとして 具体的な設計や実装は 提示されていない
Immutable Infrastracture
Microservices
Serverless
昨今のバズワード(だった)ものたち • Immutable infrastracture • Microservices • Serverless
• Immutable infrastracture ⇒ 弾力性、レジリエンス • 負荷に応じてシステムを伸縮させるには不変なインフラがあって低コス トで起動/停止が可能でなければならない • 同じシステムを別のリソースで動かすこと(AZわけるみたいなレプリ
ケーション)が容易 • Microservices ⇒ レジリエンス、メッセージ駆動 • モノリシックだとサービス全体がダウンする可能性がある • マイクロサービスに切り分けていると、全体がダウンすることはなく、 一部のサービスが提供できない程度に被害を抑えられる • 全体としてのユーザー体験をなるべく損なわない • 明確なモジュール境界を設定することとなり、 モジュール間のやり取りは非同期なメッセージパッシングとなる • Serverless ⇒ 弾力性, メッセージ駆動 • shared nothingな"関数"だからこそスケールが容易 • 厳密にはイベント駆動だが、 別のイベントをkickすることも可能でメッセージ駆動ともいえる
`Reactive System` for application engineer
何が出来る? • 前述のバズワードたちはインフラ寄り • 各コンポーネント自体やそれを繋げるのは アプリケーションエンジニア • そこでリアクティブシステムを意識してい ないと台無し
何が出来る? • リアクティブシステムの基盤となる 「メッセージ駆動」という観点からプログラム を考える Scalaエンジニアなら でしょ
Akka(actor)がもたらすもの • メッセージパッシング(fire and forget) • ActorRefへのメッセージ送信がベース • 位置透過性(akka-remote/cluster) •
Let it crash • 障害からの回復(supervisor strategy) • バックプレッシャー(Reactive Stream) • コンポーネント間のメッセージ流量を制御
アクターモデル以外の OOP/FPの出番はない?
OOP/FPの出番はない? • アクターモデルというよりAkkaがリアクティブをサ ポートしているからやりやすいというだけ • 例えば以下のような考え方はアクターに限定されない • 外部サービスの呼び出し等はCircuitBreakerを使う • コンポーネント間で処理能力に差がある場合はス
ロットリングする • スケールアウトしやすいように切り分ける
Reactive Systemを意識して プログラムを書くのが大事
ちなみに、 Reactive Programmingと Reactive Systemは 別物です https://www.oreilly.com/ideas/reactive-programming-vs-reactive-systems
Summary
• 目指すべきはReactive System • 特に、即応性、弾力性、レジリエンスは全てに 共通 • 指針となるシステム全体のアーキテクチャ
• 目指すべきはReactive System • 特に、即応性、弾力性、レジリエンスは全てに 共通 • 指針となるシステム全体のアーキテクチャ • Actorつかわなきゃ!とか一切ない
• プログラミングモデルに左右されない • ScalaでもGolangでもPHPでも
• 目指すべきはReactive System • 特に、即応性、弾力性、レジリエンスは全てに 共通 • 指針となるシステム全体のアーキテクチャ • Actorつかわなきゃ!とか一切ない
• プログラミングモデルに左右されない • ScalaでもGolangでもPHPでも • 即応性を満たすフルマネージドサービス最強 • AWS-xxx, GAE, etc.
参考 • Reactive programming vs. Reactive systems • https://www.oreilly.com/ideas/reactive-programming-vs- reactive-systems
• Why Reactive? • https://www.oreilly.com/learning/why-reactive • Reactive Manifesto • http://www.reactivemanifesto.org/ja • Why Reactive Matters • http://www.slideshare.net/okapies/why-reactive-matters
次世代のシステムが あるべき姿 2016/12/22 @petitviolet