モノリスは1つにまとめた形、マイクロサービスはサービスごとに分けて独立してデプロイする形。チームの数と運用の力で選ぶ。
EM はアーキテクチャの細部を決める立場ではありませんが、システムの形とチームの形はつながっているので、全体像は説明できるようにしておきます。
| モノリス | マイクロサービス | |
|---|---|---|
| 向いている規模 | 1〜数チーム | たくさんのチームが独立してリリースしたいとき |
| よい点 | 作りやすい・テストしやすい・データの整合が簡単 | チームごとに独立してデプロイ・拡張できる |
| つらい点 | 大きくなると変更の影響が読みにくく、リリースが詰まる | ネットワーク越しの失敗、分散したデータの整合、監視・運用の手間 |
| 必要な土台 | よいテストとモジュールの境界 | CI/CD・監視・分散トレース・オンコールの体制 |
間をとるモジュラーモノリス(1つのアプリのまま、中を機能の境界で分ける)から始め、チームが増えて境界がはっきりしてから切り出す、という進め方がよくとられます。「マイクロサービスにすれば速くなる」とは限らず、運用の土台がないまま分けると障害の調査がかえって難しくなります。
面接ではこう答える
モノリスはアプリと DB を1つにまとめた形で、作りやすくデータの整合も簡単ですが、大きくなると変更の影響が読みにくくなります。マイクロサービスはサービスごとにデプロイと DB を分ける形で、チームが独立して動けますが、ネットワーク越しの失敗や監視・運用の手間が増えます。私はまずモジュラーモノリスで境界をきれいにし、チームが増えてリリースが詰まるようになってから切り出すのが現実的だと考えています。
EMとの関わりチームを分けるときの判断、マイクロサービス化の提案への評価、運用体制の見積もりに直結します。