Monoliths vs Microservices | System Design Handbook | JR Academy

Trade-off 快览

monolith-vs-microservices

小型产品常以 monolith 起步,随着规模增长再拆成 microservices 以提升敏捷性与可扩展性。

Monoliths

Monolith 是一个自包含、独立的应用,作为单一单元构建与部署。它不仅负责某个局部任务,而是承担满足业务需求的完整流程。

monolith

Advantages

Disadvantages

Modular Monoliths

Modular Monolith 是在保持单体部署的前提下,把代码按业务功能拆成独立模块。这能降低模块依赖,使单个模块可独立演进而不影响其他模块。做得好可以降低系统增长带来的复杂度。

Microservices

Microservices 架构由多个小型自治服务组成,每个服务自包含,负责单一业务能力(bounded context)。Bounded context 是业务逻辑的自然边界,边界内有自己的 domain model。

microservices

每个服务有独立 codebase,可由小团队维护。服务可独立部署,团队可以更新单个服务而无需重建整个系统。

服务负责自己的数据持久化(database per service),不同于传统模式里统一的数据层。

Characteristics

Advantages

Disadvantages

Best practices

Pitfalls

Beware of the distributed monolith

Distributed Monolith 指表面上像 microservices,但内部依然紧耦合的系统。以下情况说明你可能只是构建了分布式单体:

Microservices 的核心价值是 scalability 与解耦。如果服务彼此强依赖,就会引入复杂度,失去 microservices 的好处。

Microservices vs SOA

Service-oriented architecture (SOA) 有时被拿来和 microservices 混用,但本质不同,差异在于 scope

SOA 强调通过服务接口复用软件组件,使用统一通信标准,追求应用级复用;microservices 则更强调小而自治的服务单元,关注 team autonomy 与解耦。

为什么你可能不需要 microservices

architecture-range

Monolith 并不一定是坏选择。通常建议从 monolith 起步,因为 microservices 不是银弹,它主要解决组织与协作问题。

在决定迁移到 microservices 前,可以先问:

如果你的应用不需要拆成 microservices,那就没必要引入它。

我们常被 Netflix 等公司案例影响,但忽略了规模与阶段差异。他们经历了大量迭代,microservices 对他们是为了解决特定问题。

所以关键是判断你的业务是否真的需要 microservices。Microservices 解决的是复杂组织问题,如果业务还不复杂,就别引入过度复杂度。