Micro Services †
- アプリケーションの様々な側面を、小さな単位に分割し、それぞれ独立して変化していくことを重視した設計スタイル
何をばらばらにするか? †
- 実行環境
- 個々のサービスは、独立した実行環境に、任意のタイミングでばらばらに配置可能にする
- 処理タイミング、トランザクション
- サービス間の結合度合いを小さくし、できるだけ異なるタイミングで実行できる設計にする
- データ管理
- 意思決定
- 小さな単位に分割し、独立性が高くなれば、個々のサービスの設計や実施可否などの意思決定単位を小さくすることができる
- ソフトウェアのライフサイクル
- 個々のサービスは、企画・開発・運用・保守・廃棄のライフサイクルがばらばらになる
- 配置作業(ビルド、テスト、デプロイ)
サービスの組み合せパターン †
- 同期-直列
- 非同期-直列
- 同期-並列
- 非同期-並列
サービスの分け方 †
適切な分け方かできているかのチェックポイント †
- それぞれのサービスはお互いに独立性が高いか
- 隠蔽性 ... お互いの内側を知らずに利用できる
- 交換可能性 ... 他のサービスの変更なしに入れ替えできる
- サービスが切り分けられていることで技術的な選択肢が広げられるか
- 低コストで高パフォーマンスを発揮できる
- 競争優位性が得られる
- サービスが切り分けられていることで開発効率を高められるか
ドメインの境界で分ける †
再利用性の高いものを分ける †
プログラミング言語や採用技術で分ける †
開発サイクルやプロセスの違いで分ける †
組織構造に合わせて分ける †
サービスのアーキテクチャ †
同期的なサービス †
非同期的なサービス †
Backends For Frontends †
関連ツール †
Akka Streams †
Swagger †
Dapr †