本文我们来讨论下最近很流行的单体架构和微服务的选择问题。
概念介绍
先来简单介绍下单体架构和微服务的概念:
- 单体架构(Monolith):所有的功能在一个服务中实现,使用同一个数据库,各种方法进行内部调用。注意,单体架构并不一定是单点的,单体架构也可以部署在多台服务器上进行水平扩展,数据库也可以部署为主从结构的。
- 微服务(Micro Services):将功能进行拆分,由每个小服务单独实现,每个服务有独立的数据库,服务之间进行远程调用。一般将所有服务接入网关,统一对外服务。
优势和劣势
单体架构
- 优点:
- 适合于小团队开发,节省微服务之间的交互讨论时间
- 代码移动少,不需要考虑功能的拆分,运维成本小
- 重复代码少,对于一些通用功能不需要重复实现
- 调用速度快,本地调用即可,不需要远程调用
- 缺点:
- 新成员上手速度慢,需要理解所有代码
- 发布较复杂,任何改动都需要部署整个系统
- 单个服务器职责较多,某个功能出错将整体不可用
微服务
- 优点:
- 功能易扩展,在微服务体系中增加一个服务即可
- 新成员上手较快,仅需理解某一个服务的功能
- 不同服务可以并行开发,提高开发效率
- 可以针对某一服务,而不是整体服务进行水平扩展
- 缺点:
- 需要一些设计技巧,一般将相同功能放在同一服务中。另外,如果两个服务是单向依赖,并且和其他服务没有依赖关系,可以考虑合并为一个服务。
小结
单体架构和微服务是两种不同的架构方式,各自都有很好的代表,比如StackOverflow就是单体架构的代表,在实际应用中可以按需选择。上述提到的各自的优缺点也不是绝对的,某些缺点是可以通过一些方法来避免的。目前在分布式设计中,使用微服务是更常见的方式。
欢迎大家订阅专题,其中包含了系统设计基础系列的全部文章:System Design
网友评论