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

アクターモデルによる効率的な分散システム設計

Tech Leverages
March 04, 2025
86

 アクターモデルによる効率的な分散システム設計

Tech Leverages

March 04, 2025
Tweet

More Decks by Tech Leverages

Transcript

  1. | © 2024 Levtech Co., Ltd. 2 レバテック開発部 山川 太一 TAICHI

    YAMAKAWA 2024年1月にレバレジーズに入社し、現在はレバテックプラットフォームの開発を担当している。Scala と Akka を 使った分散システムの開発やコンサルティングの経験がある。関数型プログラミングやアーキテクチャ設計に強い関心 がある。
  2. | © 2024 Levtech Co., Ltd. 3 お話しすること 1. 分散システムとアクターモデル 2.

    イベントソーシング 3. CQRS: Command Query Responsibility Segregation 4. クラスタシャーディング 5. アーキテクチャパターンの紹介
  3. | © 2024 Levtech Co., Ltd. 5 • 分散システムを使用している ◦ AWS,

    GCP, Azure, TiDB, etc... • 分散システムを開発している ◦ 複数のコンピュートリソース ◦ リレーショナルデータベース ◦ インメモリデータベース ◦ メッセージキュー ◦ etc... なぜ分散システムが重要なのか Fargate, RDS, ElastiCache などを使う分散システム TiDB のアーキテクチャ https://docs.pingcap.com/tidb/stable/tidb-architecture より引用
  4. | © 2024 Levtech Co., Ltd. 7 並行処理や分散システムを効率的に構築する概念モデルの1つ 以下が有名である: • Erlang/OTP:

    プログラミング言語とライブラリ • Akka: Java や Scala のライブラリ アクターモデル The actor model adopts the philosophy that everything is an actor. This is similar to the everything is an object philosophy used by some object-oriented programming languages. Actor model - Wikipedia より引用
  5. | © 2024 Levtech Co., Ltd. 11 • Actor 同士がお互いの情報を直接操作しない •

    Mutex や Semaphore を使用しなくてよい • 基本的にデッドロックは発生しない 並行処理が容易である Actor Model の特徴
  6. | © 2024 Levtech Co., Ltd. 12 • 位置透過性がある ◦ アクターの物理的な場所を意識することなく、

    同じ方法で他のアクターと通信できる • 同じ記述方法で 簡単にスケールアウトすることができる スケーラビリティが高い Actor Model の特徴
  7. | © 2024 Levtech Co., Ltd. 13 • アクターは階層構造で管理する • Supervision

    ◦ Child Actors の監視が可能である ◦ 発生したエラーに応じて Child Actors に次の指示ができる ▪ 停止 ▪ 再起動 ▪ 再開 エラーハンドリングが容易である Actor Model の特徴
  8. | © 2024 Levtech Co., Ltd. 16 • 操作による出来事を記録する • 活用例

    ◦ 状態の再構築 ◦ 監査 ◦ デバッグ ◦ ビューへの投影 イベントソーシング
  9. | © 2024 Levtech Co., Ltd. 17 • Akka Persistence により実現する

    • アクターは状態を保持している • イベントを通じて自身の状態を更新する アクターによるイベントソーシング Akka Persistence
  10. | © 2024 Levtech Co., Ltd. 18 • アクターは状態を保持している • READ

    処理ではイベントストアにアクセスしない • 通信やデータI/Oをしないため処理が高速である READ は高速に処理できる Akka Persistence
  11. | © 2024 Levtech Co., Ltd. 20 • 基本的にイベントは追加されるのみ ◦ 次第に大量のイベント履歴を扱うことに...

    • イベントリプレイにかかる時間増加が問題となりうる イベント履歴の肥大化 Akka Persistence
  12. | © 2024 Levtech Co., Ltd. 21 • 特定時点の状態をスナップショットして保存する • スナップショットから状態を復元する

    • イベントリプレイを減らして高速化できる スナップショットによるリカバリの高速化 Akka Persistence リカバリ スナップショット 取得
  13. | © 2024 Levtech Co., Ltd. 25 • Akka Projection により実現する

    • イベント履歴をビューとして非同期的に投影する Read Data Store の構築 Akka Projection
  14. | © 2024 Levtech Co., Ltd. 33 一般的なアーキテクチャパターンを活用する機会も多い。 これらを組み合わせることで、より良い分散システムが設計できる。 アーキテクチャパターンの紹介 •

    リトライと冪等性 • 補償トランザクション • サーキットブレーカー • バルクヘッド • スロットリング • Saga • etc... おすすめのウェブサイト • Cloud design patterns - Azure Architecture Center | Microsoft Learn • Cloud design patterns, architectures, and implementations - AWS Prescriptive Guidance • A pattern language for microservices
  15. | © 2024 Levtech Co., Ltd. 34 まとめ 1. 分散システムとアクターモデル 2.

    イベントソーシング 3. CQRS: Command Query Responsibility Segregation 4. クラスタシャーディング 5. アーキテクチャパターンの紹介