单体架构
所有的代码操作,都集成在一个服务里,并且只使用这个服务进行维护开发,只需要部署在一台服务器即可,也就是共同使用同一个WEB服务器运行。 图片示例:
优点:
- 容易部署与维护
- 小型服务容易开发与上线
缺点:
- 耦合度极大,如果后期需要扩展,基本扩展不了。
- 一个地方出问题,其他地方一样受到牵连。
垂直架构
将单体架构中的每个模块分成多个模块运行在多个服务器,一个单体项目就是一个模块。例如:当前有两个模块分别是首页和评论,如果是单体架构,那么他们都是在同一个服务下。垂直架构就是把他们拆成两个,分别放置不同的单体服务下,运行在两个不同的web服务器上。
示例图;和单体架构的图基本一样,只是垂直变成了多个而已。
优点:
- 拆分后每个模块独立运行,扩展和优化都方便。
- 并发的能力得到提升。
- 出现故障后不影响其他服务
缺点:
- 某些业务代码会有重叠,增加了耦合度。
- 他们之间不能互相调用,除非开放接口通过HTTP调用
- 如果端口发生改变,后续每个服务也要修改端口号。
分布式架构
在垂直架构的基础上,使用了分层概念。例如:前台controller和后台service。
- 前台负责对外部的发送消息,接收消息,对后台发送消息和接收消息,前台就是一个中转站。
- 后台负责处理逻辑,在把逻辑传给前台。每个服务模块重复的代码也会统一封装,供别的服务调用。
示例图:分布式和垂直架构类似,比垂直架构多了公共模块的抽离,和分层概念。
优点:
- 把公共类抽离,去除每个服务上的冗余代码。
- 每个服务可以单独优化和扩展
- 分层让入口统一发送到一个模块,不需要每个模块都设置接口。
- 分层以后架构更多清晰,每个模块功能单一,扩展性更强
缺点:
- 耦合度集中在公共模块,分布式还是以传统的http进行交互。
- 调用类的关系变得复杂,维护成本变高。
SOA架构
在分布式的基础上,增加服务注册中心,相当于增加一个nacos,对比分布式,可以丢弃老的http发送机制,通过nacos统一调用和获取每个服务的资源。
示例图:和分布式的类似。
优点:
- 服务注册中心,可以解决每个服务自动发现,注册,调度问题。
- 就算某个服务的地址更改也不影响其他服务对他的请求。
缺点:
- 每个服务高度依赖注册中心,如果注册中心宕机,会引起每个服务调用资源失败。
- 调用链路变长,如果下游服务发送错误,会导致上游服务调用失败。
微服务架构
是SOA架构的一种扩展,微服务会创建一个大的管理服务,然后在这个服务下创建每个小型服务,每个服务对应一个模块,打包,部署等都是自己完成,不与其他模块耦合。 与以前不同的是,SOA以前的架构都是一个包一个模块,微服务则是,一个包多个模块,每个模块又是一个包。
示例图:
优点:
- 服务独立拆分,单独打包,部署,连接不同DB,方便升级。
- 服务之间可以通过注册中心,RPC,REST调用。
- 每个服务可单独放在不同电脑上,理论上可以无限扩展。
缺点:
- 数据一致性问题。
- 分布式事务问题。
- 各服务调用的时候,因网络可能会抖动,不清楚具体要设置多少时间等待调用。