最終更新:
モノリスとマイクロサービスの違いは?分割する前の判断基準
モノリスって古い設計なの?
マイクロサービスは何が違うの?
業務のまとまりごとにサービスを分け、独立して変更・デプロイできることを目指す設計だよ。単にプロセスを分けても、毎回すべて同時に更新しないと動かないなら、独立性の利点は得にくいね。
分ければ障害も小さくなる?
影響を隔離する設計はできるけれど、自動でそうなるわけではないよ。呼び出し先が遅いと連鎖して詰まることもある。タイムアウト、再試行回数、代替動作などを決め、障害時も観測できるようにするんだ。
検索だけ混んでいたら?
データベースも全部分けるの?
Sagaなら全部元どおりになる?
Sagaはローカルな処理をつなぎ、失敗時に補償処理を行う設計だね。ただし一括のロールバックとは違う。送信したメールは取り消せないし、返金も別の業務処理。途中状態、再試行、重複、補償の失敗まで考える必要があるよ。
ESBとマイクロサービスは同じ?
ESBは複数システムをつなぐ通信・変換などの統合基盤として使われるもの。マイクロサービスはアプリの分割と運用の設計だよ。中央へ業務ロジックを集めるのか、サービスごとに責任を持つのかも違いになる。どちらも小さく分ける技術、とは整理できないね。
小さいチームならどう始めればいい?
分割の利点と、引き受ける仕事
| 観点 | モノリス | マイクロサービス |
|---|---|---|
| デプロイ | アプリ全体を一単位として更新 | 独立した更新を目指す。API互換性の維持が必要 |
| データ更新 | 一つのDBで完結する処理は扱いやすい | 複数サービスでは整合性・再試行・補償を設計 |
| 調査 | 同一プロセス内で追いやすい | ログの相関IDや分散トレーシングが役立つ |
| 運用 | 管理対象をまとめやすい | 各サービスの監視・権限・当番体制が必要 |
注文サービスを分ける前に考える例
注文・在庫・決済を分けるなら、「在庫確保に成功したが決済に失敗」「決済成功の応答だけ届かなかった」を考えます。決済を無条件で再試行すると二重請求につながるため、処理IDによる重複防止や結果照会、補償の責任を決めます。
まず内部モジュールの責任を整理し、独立して変更したい業務と、強い整合性が必要な範囲を洗い出してください。「有名企業が使っている」だけでは分割の理由になりません。
参考資料
確認日:2026年9月27日。製品の仕様・料金・対応環境は導入時にも確認してください。
- Lewis / Fowler: Microservices:独立デプロイ、業務境界、分散管理、ESBとの設計上の違い。
- Fowler: Monolith First:境界設計と分散化のコスト。
- Microsoft: Saga pattern:ローカルトランザクション、補償、再試行の考え方。