集群:一个业务模块部署在多台服务器上。(很多人一起干一件事)
分布式:一个大业务模块,拆分多个小的业务模块,分别部署在不同的机器上。(很多人一起干多件小事,合起来为一件大事)
集群和分布式的使用保证了
系统的高性能、高可用、可伸缩、高可扩展性
架构演进过程
单体架构
所有业务实现一股脑放在一块。
优点:
- 简单,开发部署方便,适合小型项目
缺点:
- 项目启动慢
- 可靠性差 :一个小功能坏了,其他的功能都用不了
- 可伸缩性差
- 扩展性和可维护性差
- 性能低
垂直架构
将单体架构的多个模块拆分成多个独立项目。拆分出的多个独立项目之间不进行任何交互。
缺点:
- 重复功能太多
- 一旦需要修改,涉及到的重复模块每个都要修改
分布式架构
在垂直架构的基础上,将公共业务模块抽取出来,作为独立服务,供其他调用者消费,以实现服务的共享和重用。
RPC:Remote Produce Call 远程过程调用。
缺点:
服务提供方一旦产生变更,所有消费方都需要变更
SOA架构
SOA:(Service-Oriented Architecture,面向服务的架构)是一个组件模型,它将应用程序的不同功能单元(服务)进行拆分,并通过这些服务之定义良好的接口和契约联系起来。
ESB:(Enterparise Servce Bus)企业服务总线,服务中介。主要是提供了一个服务于服务之间的交互。ESB包含的功能:负载均衡、流量控制、加密处理、服务监控、异常处理、监控告急等。
微服务架构
业务需要彻底的组件化和服务化
是在SOA上做的升华,原有的单个业务系统拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。
微服务架构=80%的SOA服务架构思想 + 100%的组件化架构思想 + 80%的领域建模思想。
特点:
- 服务实现组件化:开发者可以自由选择开发技术。也不需要协调其他团队。
- 服务之间交互一般使用API
- 去中心化:每个微服务有自己私有的数据库持久化业务数据。
- 自动化部署:把应用拆分成为一个一个独立的单个服务,方便自动化部署、测试 、运维
缺点:
- 服务太多,每个都访问自己的数据库,分布式事务、跨服务数据一致性问题。
- 服务之间调用耗时
- 级联失败(雪崩问题)
为了实现微服务之间的调用和保证服务健壮性,也就引出了:
Nacos、Eureka、OpenFeign、服务保护、分布式事务等。