单体架构
单体架构一般用于项目初期,方便尽早的将项目搭建起来。主要有以下特点:
- 开发简单,代码和项目集中式管理;
- 运维简单,节省维护成本
- 排查问题简单,方便问题定位
当项目规模变大时,也会遇到以下问题:
- 容易形成瓶颈,当所有功能处于一个程序中,请求量变大后,容易占用过多资源
- 代码管理麻烦,开发人员变多后,容易形成冲突
- 功能耦合严重,模块间相互影响
- 任何小的修改,都需要重新构建、发版、升级
微服务架构
对于单体架构在系统规模变大后,可以能过微服务拆分来解决这些问题。
微服务拆分原则:
- 单一服务内部功能的高内聚和低耦合
- 需要关注服务拆分的粒度,先粗略拆分再逐渐细化
- 拆分的过程,要尽量避免影响产品的日常功能迭代
- 服务接口的定义要具备可扩展性
将系统做微服务拆分之后,并不能一劳永逸解决所有问题,在拆分会引入复杂性的问题。
- 服务接口的调用不再是同一进程内的方法调用而是跨进程的网络调用,这会增加接口响应时间的增加。服务数量的增多,增加了服务地址维护的成本,所以引用注册中心来进行服务的注册与发现。
- 多个服务之间有着错综复杂的依赖关系,为了降低服务间的相互影响, 引入熔断、降级、限流、超时控制等服务治理方法。
- 服务拆分到多个进程后,一条请求会涉及多个服务,对于异常情况如何快速定位问题,引入了分布式追踪及服务端监控。