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
470
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
580
Lightbend Academyオンライントレーニングを受けてみた
crossroad0201
4
1.5k
ドメイン駆動設計でモブワークしました
crossroad0201
5
1.1k
Scalaで自然文っぽくコードを書く
crossroad0201
2
1.2k
エンタープライズ Scala
crossroad0201
4
2.4k
practice-DDD-with-Scala_en
crossroad0201
3
2.9k
scala-on-ddd
crossroad0201
31
16k
Other Decks in Programming
See All in Programming
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
640
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
270
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
680
AIエージェント時代のコードレビューを設計する
nogu66
6
2.5k
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
260
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
290
「AI時代、配布するPythonコードをどう守るか: 難読化の実験と判断軸」 #PyconJP2026
pkshadeck
PRO
2
170
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
260
PyO3 で既存 Python 評価器を Rust core 化する ー wasm-bindgen でブラウザにも配るための設計
kdash
1
430
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
850
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
1.7k
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
7k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
How to Ace a Technical Interview
jacobian
281
24k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
310
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
290
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Embracing the Ebb and Flow
colly
88
5.2k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
290
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
970
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
働くをもっと楽しく、創造的に