最初はモジュールに分けたモノリスで始め、チームや負荷の都合で必要になったら分ける。
モノリスは、アプリ全体を1つのコードベース・1つのデプロイで動かす形、マイクロサービスは、機能ごとに小さなサービスに分け、それぞれを別にデプロイし、ネットワーク越しに呼び合う形です。
| 項目 | モノリス | マイクロサービス |
|---|---|---|
| 開発の始めやすさ | 簡単。1つ動かせば全部動く | 準備が多い(通信・認証・デプロイの仕組み) |
| デプロイ | 全体を一度に。チームが増えるとぶつかる | サービスごとに独立してできる |
| スケール | 全体をまとめて増やす | 負荷の高い所だけ増やせる |
| データの整合性 | 1つの DB のトランザクションで守れる | サービスをまたぐと難しい(Saga・イベント) |
| 障害 | 1か所のバグで全体が落ちることがある | 一部だけ落ちる。ただし呼び出しの連鎖で広がることも |
| 調べやすさ | 1つのログ・スタックトレース | 分散トレースがないと追えない |
| 向いている組織 | 少人数〜数チーム | 多数のチームが独立して動く大きな組織 |
面接ではこう答える
モノリスはアプリ全体を1つのコードベースと1つのデプロイで動かす形、マイクロサービスは機能ごとに小さなサービスに分けて、ネットワーク越しに呼び合う形です。モノリスは始めやすく、1つの DB のトランザクションで整合性を守れます。マイクロサービスはチームごとに独立してデプロイでき、負荷の高い所だけ増やせますが、運用の負担と整合性の難しさが増えます。多数のチームが独立して動く大きな組織に向いています。
Webとの関わりアーキテクチャの議論の出発点で、面接でもよく聞かれる判断です。