分解パターン
モノリシックからMSAへ移行する際、1つのサービスを複数のサービスに分解する方法について課題が存在します。
どのような判断基準に基づいてサービスを分離するかに関するパターン、つまり「分解」を解決するためのパターンです。
1. ビジネス能力に基づく分解 (Business Ability)
「ビジネス能力」を基準にサービスを分解する方法です。
例えば、銀行の送金サービスでは、残高確認、送金先口座の確認、口座状態の確認など多くの機能を持ち、これらが1つの「ビジネス」であるという概念です。
送金を分離した場合、「ビジネス能力」に基づいてMSAを分離したと言えます。
長所
- ビジネスが複雑で大規模な組織の場合に適している
- ビジネスの特性上、内部サービス間の通信が頻繁に発生する場合に有効
短所
- サービス間の凝集度、結合度、依存性が増加
- プロセスが進むにつれて構造が曖昧になる可能性がある
2. サブドメインパターンによる分解 (Sub-Domain) from DDD
サブドメインを基準に、サービスを1つずつ作成するという概念です。
複雑なビジネスであっても、内部のサブドメイン単位で分離します。
例えば送金サービスを分離する場合、口座管理、内部残高、外部銀行との通信など、複数のサブドメインが存在します。この場合、送金サービスはこれらのサブドメインをすべて呼び出して利用する形になります。
長所
- サービス間の独立性と隔離性が向上し、結合度が低下
- サービス間の影響度が減少し、依存性を最小化
- 障害の影響を最小限に抑えることが可能
- MSAの理念に合致したパターン
短所
- サービス間の不要な通信が発生する可能性がある
- HTTPやgRPCの呼び出し回数が増加し、トラブルシューティングが困難になる可能性
- サービスが過度に細分化されるリスク
- 大規模システムでは非効率性が増加する可能性