monolith 将所有功能打包成单个可部署单元;microservices 将该功能分割成许多独立可部署的服务。核心区别在于部署单元和模块之间的边界。
| 方面 | Monolith | Microservices |
|---|
| 部署 | 单个单元 | 多个独立单元 |
| 数据库 | 通常是一个共享 DB | 每个服务一个 DB |
| 扩展 | 扩展整个应用 | 单独扩展各个服务 |
| 通信 | 进程内调用 | 网络 (HTTP/gRPC/events) |
| 团队耦合 | 高 | 低 (按服务所有权) |
| 故障影响范围 | 整个应用 | 通常仅限于一个服务 |
| 运维复杂度 | 低 | 高 |
MONOLITH best when:
✓ small team / early-stage product
✓ domain not yet well understood
✓ simplicity and fast iteration matter most
MICROSERVICES best when:
✓ large org with many teams
✓ parts have very different scaling needs
✓ you need independent deploy cadence
模块化不当的 monolith 分割后不会神奇地改善——你只会得到一个分布式混乱。先修复边界。
选择错误的架构风格代价很高:过早拆分会为小团队带来延迟、运维成本和调试困难。
大多数成功的系统都从结构良好的 monolith 开始,只有当团队规模或扩展压力明确地证明其合理性时,才会提取服务。