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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Tech Leverages Tech Leverages
March 04, 2025
5.5k

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

Avatar for Tech Leverages

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. アーキテクチャパターンの紹介