
112
まずは、業務機能の観点でシステムを論理的にサブシステムへ分割し
ます。このとき、ドメイン駆動設計(DDD)の分析手法により「境界づ
けられたコンテキスト」として分割を行う方法も有効です(境界づけら
れたコンテキストは、サービスの粒度としてマイクロサービスと相性が
よいと言われることも多いです)。
論理的な分割を行った後、物理的なサービス分割を検討します。モノ
リシックアーキテクチャと分散アーキテクチャそれぞれのメリットやデ
メリット、そしてサービスベースアーキテクチャやマイクロサービス
アーキテクチャなどのアーキテクチャスタイルが持つ特徴を踏まえて、
アーキテクチャドライバを実現する最善解を見つけるのです。
論理分割されたサブシステム(あるいは境界づけられたコンテキス
ト)の一つ一つが必ずしもマイクロサービスとなるとは限りません。最
初からすべてをマイクロサービスとしてシステムを構築することはアン
チパターンとされることもあります。なぜなら、システムの初期構築段
階から最適なサービス境界を見出すことはなかなか難しく、不用意で行
き過ぎた分割によって生み出された複雑さがシステムの運用保守コスト
を肥大化させてしまう危険性もあるからです。
トランザクション境界
サービスの分割において特に考慮しておきたいのはトランザクション
境界です。複数サービスをまたがる分散トランザクションは、とても扱
いが厄介な存在です。トランザクションの整合性を確実に担保するな
ら、2フェーズ・コミットをサポートするプロトコルやミドルウェアの ...