Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Lightbend Academyでリアクティブシステムの基礎を学ぼう - JJUG LT
Search
Yohei TSUJI
August 26, 2020
Programming
460
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Lightbend Academyでリアクティブシステムの基礎を学ぼう - JJUG LT
Yohei TSUJI
August 26, 2020
More Decks by Yohei TSUJI
See All by Yohei TSUJI
Akka Persistence Typedにおけるドメインオブジェクトの実装パターン / Pattern of Implement Domain Object with Akka Persistence Typed
crossroad0201
1
570
Lightbend Academyオンライントレーニングを受けてみた
crossroad0201
4
1.5k
ドメイン駆動設計でモブワークしました
crossroad0201
5
1.1k
Scalaで自然文っぽくコードを書く
crossroad0201
2
1.1k
エンタープライズ Scala
crossroad0201
4
2.4k
practice-DDD-with-Scala_en
crossroad0201
3
2.8k
scala-on-ddd
crossroad0201
31
16k
Other Decks in Programming
See All in Programming
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.4k
Oxcを導入して開発体験が向上した話
yug1224
4
340
Webフレームワークの ベンチマークについて
yusukebe
0
180
Creating Composable Callables in Contemporary C++
rollbear
0
170
これからAgentCoreを触る方へトレンドはGatewayです
har1101
2
290
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
210
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
360
はてなアカウント基盤 State of the Union
cockscomb
1
910
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
290
1B+ /day規模のログを管理する技術
broadleaf
0
120
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
260
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.5k
Featured
See All Featured
A Soul's Torment
seathinner
6
3k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
210
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
250
Become a Pro
speakerdeck
PRO
31
6k
sira's awesome portfolio website redesign presentation
elsirapls
0
290
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
How to build a perfect <img>
jonoalderson
1
5.7k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
Transcript
Lightbend Academyで リアクティブシステムの基礎を学ぼう 1 2020-08-26 JJUGナイトセミナー 「おうちで!ビール片手にLT大会!」
自己紹介 辻 陽平(Yohei TSUJI) Chatwork株式会社 開発本部 コアテクノロジー開発部 @大阪 2020年5月にChatworkに入社。 Scalaエンジニアやってます。
@crossroad0201
もくじ 1. Lightbend社 と Akka 2. Lightbend Academyとは 3. Architecture
トレーニングパスの紹介 4. まとめ
Lightbend社 • リアクティブシステムの推進とそれを支援するプロダクトを開発。 • Scala向けなイメージが強いが、Javaもけっこうサポートしてる。
Akka • リアクティブシステムの構築を支援するフレームワーク、ライブラリ群。 ◦ 高度な並列処理 ◦ 複数ノードでの分散実行 ◦ 高い耐障害性、回復性 •
Scala用とJava用、2つのDSLをサポート 。 • アクターモデルがベースになっている。
Lightbend Academy • Lightbend 社が提供しているオンライントレーニングプログラム。 • 同社のエンタープライズ向け有償サービス「Lightbend Subscription」で提供され るプログラムのうちのひとつ。(サブスクリプションの価格は要問合せ...) •
現在、無償で受講できる。(Through Summer 2020 っていつまでだろう...) https://www.lightbend.com/academy/register/0010h00001eEJDIAA4
コース • 30のコース(2020年8月時点) • 受講時間は1コース4〜8時間くらい。 • 動画・スライドによる解説、途中の確認テスト、最終テスト。 ◦ 最終テストは1度しか受験できないことに注意!!!
トレーニングパス 各コースは任意の順に受講できるが、目的に応じて体系的に学習するためのトレーニン グパスが提案されている。 1. Architecture 2. Scala Language 3. Akka
Microservices 4. Logom Mictoservices 5. Data Engineering
Architecture トレーニングパス リアクティブシステムとは何なのか、その背景にある要求とそれを解決するための理論 を体系的に学ぶことができるトレーニングパス。 6つのコースから構成されている。 1. Introduction to Reactive 2.
Domain Driven Design 3. Reactive Microservices 4. Building Scalable Systems 5. Distributed Messaging Patterns 6. CQRS & Event Sourcing
1.Introduction to Reactive • なぜ今リアクティブシステムなのか? ◦ 社会生活の中でWebサービスが果たす役割はどんどん大きくなっている。 ◦ 必要なときに使えなければ、ユーザーの信頼を失ってしまう。 ◦
目的は技術的課題の解決ではなく、ユーザーの期待に応えること。 • リアクティブ宣言(https://www.reactivemanifesto.org/ja)を満たしたシステム。 • リアクティブプログラミング をしたからと言って、リアクティブシステムになるわ けではない。
2.Domain Driven Design • リアクティブシステムの構築にも、ドメイン駆動設計の考え方が役に立つ。 • 一貫性は可用性やスケーラビリティにトレードオフな影響を与える。 ビジネス視点から一貫性を保証する単位を決める必要がある。 ◦ Akka
を使う場合は「集約ルート」がアクターの候補になる。 • ドメイン駆動設計の「境界づけられたコンテキスト」が、マイクロサービスの有効 な分割単位になる。
3.Reactive Microservices • リアクティブマイクロサービスでは、マイクロサービス間の通信はすべて非同期/ ノンブロッキングにおこなわれる。 • 4つの観点でマイクロサービスを隔離する。 ◦ 状態:他のマイクロサービスの内部状態に依存しない。 ◦
空間:他のマイクロサービスがどこにデプロイされているかに依存しない。 ◦ 時間:他のマイクロサービスの処理を待たない。 ◦ 障害:他のマイクロサービスの障害の影響を受けない。 • 隔離の方法。 ◦ サーキットブレーカー。 ◦ メッセージ駆動による非同期/ノンブロッキング通信。 ◦ データコピーの保持。
4.Building Scalable Systems • システムに求められる「一貫性」「可用性」「スケーラビリティ」にはトレードオ フな関係があり、ビジネスの優先度からバランスを取らなければならない。 ◦ 一貫性を広く/強く保とうとすると、スケーラビリティが下がる。 ◦ 可用性を高くしようとすると、複製のコストがかかる。
◦ CAP定理のバランスを取る。 • バランスを取るテクニック。 バランス テクニック スケールの方法 デメリット 一貫性と スケーラビリティ シャーディング シャードを増やすことで スケールできる。 可用性がやや犠牲に なる。 可用性と スケーラビリティ CRDT Conflict-free Replicated Data Type レプリカを増やすことで スケールできる。 一貫性は結果整合性 になる。
5.Distributed Messaging Patterns • メッセージ駆動は、リアクティブシステムの基礎となる技術。 • メッセージ駆動では応答を待たないので、リソースの占有を最小限にできる。 ◦ 応答もメッセージとして非同期に返却される。 •
メッセージ駆動ではRDBMSのトランザクションは使えない。 替わりに「Sagaパターン」のような長期トランザクションを実現するテクニックを 使う。 • メッセージを”1回だけ確実に配信する”ことは不可能。 ◦ At most once:最大1回配信。欠損する可能性あり。 ◦ At least once:欠損しないが、2回以上配信される可能性あり。 • マイクロサービス間のメッセージングは、Pub/Subパターンを基本とする。
6.CQRS & Event Sourcing • 書き込み と 読み取り に求められる要件はまったく異なるので、同じモデルを使っ て両方をサポートすることには限界がある。
• CQRS(Command Query Responsibility Segregation) ◦ 書き込み(Command)と読み取り(Query)で別のモデルを使う。 ◦ モデルをわけることで、求められる要件にそれぞれ最適化できる。 ◦ 書き込みは一貫性重視、読み取りは可用性重視。 • ステートソーシング と イベントソーシング。 ◦ イベントソーシングでは過去の履歴がすべて残るので、システム運用開始後に 新しく発生したビジネス要件にも対応しやすい。 • CQRS も イベントソーシング も開発/運用コストがかかるので、ビジネス要件か ら本当に必要かどうかを検討する。
まとめ • これからリアクティブシステムが必要となる場面は増えていくと思います。 • リアクティブシステムの構築は必要に迫られてからすぐには難しいです。 求められる性質とその関係、ビジネス要件から適切な設計判断をする知識やノウハ ウが必要です。 • Lightbend Academy
は、今すぐリアクティブシステムを構築しなくても受講して おくと設計の幅が広がると思います。
求ム Chatworkでは Scala エンジニア を募集中です!! https://hrmos.co/pages/chatwork/jobs/1020001
働くをもっと楽しく、創造的に