Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Lightbend Academyでリアクティブシステムの基礎を学ぼう - JJUG LT

Lightbend Academyでリアクティブシステムの基礎を学ぼう - JJUG LT

Yohei TSUJI

August 26, 2020
Tweet

More Decks by Yohei TSUJI

Other Decks in Programming

Transcript

  1. 1.Introduction to Reactive • なぜ今リアクティブシステムなのか? ◦ 社会生活の中でWebサービスが果たす役割はどんどん大きくなっている。 ◦ 必要なときに使えなければ、ユーザーの信頼を失ってしまう。 ◦

    目的は技術的課題の解決ではなく、ユーザーの期待に応えること。 • リアクティブ宣言(https://www.reactivemanifesto.org/ja)を満たしたシステム。 • リアクティブプログラミング をしたからと言って、リアクティブシステムになるわ けではない。
  2. 2.Domain Driven Design • リアクティブシステムの構築にも、ドメイン駆動設計の考え方が役に立つ。 • 一貫性は可用性やスケーラビリティにトレードオフな影響を与える。 ビジネス視点から一貫性を保証する単位を決める必要がある。 ◦ Akka

    を使う場合は「集約ルート」がアクターの候補になる。 • ドメイン駆動設計の「境界づけられたコンテキスト」が、マイクロサービスの有効 な分割単位になる。
  3. 3.Reactive Microservices • リアクティブマイクロサービスでは、マイクロサービス間の通信はすべて非同期/ ノンブロッキングにおこなわれる。 • 4つの観点でマイクロサービスを隔離する。 ◦ 状態:他のマイクロサービスの内部状態に依存しない。 ◦

    空間:他のマイクロサービスがどこにデプロイされているかに依存しない。 ◦ 時間:他のマイクロサービスの処理を待たない。 ◦ 障害:他のマイクロサービスの障害の影響を受けない。 • 隔離の方法。 ◦ サーキットブレーカー。 ◦ メッセージ駆動による非同期/ノンブロッキング通信。 ◦ データコピーの保持。
  4. 4.Building Scalable Systems • システムに求められる「一貫性」「可用性」「スケーラビリティ」にはトレードオ フな関係があり、ビジネスの優先度からバランスを取らなければならない。 ◦ 一貫性を広く/強く保とうとすると、スケーラビリティが下がる。 ◦ 可用性を高くしようとすると、複製のコストがかかる。

    ◦ CAP定理のバランスを取る。 • バランスを取るテクニック。 バランス テクニック スケールの方法 デメリット 一貫性と スケーラビリティ シャーディング シャードを増やすことで スケールできる。 可用性がやや犠牲に なる。 可用性と スケーラビリティ CRDT Conflict-free Replicated Data Type レプリカを増やすことで スケールできる。 一貫性は結果整合性 になる。
  5. 5.Distributed Messaging Patterns • メッセージ駆動は、リアクティブシステムの基礎となる技術。 • メッセージ駆動では応答を待たないので、リソースの占有を最小限にできる。 ◦ 応答もメッセージとして非同期に返却される。 •

    メッセージ駆動ではRDBMSのトランザクションは使えない。 替わりに「Sagaパターン」のような長期トランザクションを実現するテクニックを 使う。 • メッセージを”1回だけ確実に配信する”ことは不可能。 ◦ At most once:最大1回配信。欠損する可能性あり。 ◦ At least once:欠損しないが、2回以上配信される可能性あり。 • マイクロサービス間のメッセージングは、Pub/Subパターンを基本とする。
  6. 6.CQRS & Event Sourcing • 書き込み と 読み取り に求められる要件はまったく異なるので、同じモデルを使っ て両方をサポートすることには限界がある。

    • CQRS(Command Query Responsibility Segregation) ◦ 書き込み(Command)と読み取り(Query)で別のモデルを使う。 ◦ モデルをわけることで、求められる要件にそれぞれ最適化できる。 ◦ 書き込みは一貫性重視、読み取りは可用性重視。 • ステートソーシング と イベントソーシング。 ◦ イベントソーシングでは過去の履歴がすべて残るので、システム運用開始後に 新しく発生したビジネス要件にも対応しやすい。 • CQRS も イベントソーシング も開発/運用コストがかかるので、ビジネス要件か ら本当に必要かどうかを検討する。