TL;DR

  • 境界づけられたコンテキストは自律的なサブシステムであり、明確に定義された境界を持つことが重要である。
  • 初期段階で特定のアーキテクチャに縛られる必要はない。リファクタリングしやすいモノリスで作り始めるとよい。

内容

境界づけられたコンテキストは自律的なサブシステムであり、明確に定義された境界を持つことが重要である。この制約の下でも、選べるアーキテクチャのスタイルはたくさんある。

  • システム全体を 1 つのデプロイ単位にする(モノリス)
  • 境界づけられたコンテキストごとに、専用のコンテナを個別にデプロイする(サービス指向アーキテクチャ)
  • ワークフローごとに、専用のコンテナを個別にデプロイする(マイクロサービスアーキテクチャ)

プロジェクトの初めから適切な境界を設定することは不可能であり、ドメインについての知識が深まるにつれて境界は変わるので、初期段階で特定のアプローチに縛られる必要はない。

モノリスはリファクタリングしやすいので、最初はモノリスでシステムを作るとよい。必要になったら、疎結合なコンテナにリファクタリングできる。マイクロサービスを選ぶなら、利点が欠点を上回ると確信できない限り、マイクロサービスに伴う追加のコストを払う必要はない。本当に疎結合なマイクロサービスアーキテクチャを実現するのは難しい。1 つのサービスを止めたら他のサービスも失敗するなら、それはただの分散モノリスである。

キーワード