Microservices Architecture(MSA)のメモ

MSA実現に向けてのメモ。随時更新。

  • ねらい
    • ビジネス環境の変化にすばやく対応
    • 技術の進歩にすばやく対応
    • 耐障害性,スケーラビリティ,デプロイ容易性
  • 懸念
    • パフォーマンス
      • スケーラビリティはあるがそもそも高レイテンシになりそう。
    • データ整合性
    • テスト
      • 非同期なMS群の協調動作の再現が大変そう。
    • 運用管理
      • 管理対象が増えて監視とか大変そう。
    • 障害対応
      • どこで何が起きたのかを把握するのが大変そう。
  • システム全体
    • 設計
      • コンテキストマップ
        • Bounded Context
          • Core Domain,Generic Subdomain
        • 組織パターン
          • パートナーシップ,別々の道,順応者,顧客/供給者
        • 統合パターン
          • 共有カーネル,公開ホストサービス(OHS),公表された言語(PL),腐敗防止層(ACL)
    • 運用環境
      • Kubernetes
      • Docker + Harbor
      • Ansible
      • fluentd
      • Zipkin
    • エンドツーエンドテスト
      • ???
  • Microservices統合
  • Microservice開発
    • 設計
      • PoEAA
      • オニオンアーキテクチャ
      • CQRS
        • コマンドとクエリの分割 => Write DBとRead DBの分割
      • イベントソーシング
        • 更新イベントをデータストアに格納
        • ドメインモデルは入力値を検証して更新イベントを発生させる
        • ラムダアーキテクチャ
          • イベントソーシングのリアルタイム性確保
        • とりあえずはステートソーシングのままでいい?
      • ドメインモデル
        • Entity,Value Object,Aggregate,Aggregate Root,Service,Module,Repository,Specification
        • ドメインイベント
          • event storeにためてcommit時にdispatch
      • 他MSのデータ取得
        • REST + ドメインイベント => キャッシュ
          • 適当なタイミングでポーリングしてもいい
      • セッション共有・レプリケーション
        • Spring Session/Redis
    • 実装
    • 単体テスト
      • JUnit,Mockito,AssertJ
        • push時に実行して失敗したらGithubのmergeをブロックしたい
      • Fixture Factory
    • 結合テスト
      • Spring Test,DbSetup
    • サービステスト
      • ???
    • data store
    • 開発環境
    • デプロイ
      • Jenkins,Travis CI
      • 無停止デプロイ
        • グレースフルシャットダウン

以上