一、SpringCloud概念
1、应用框架的演变
单体------>分布式------>SOA------>微服务
①、单体应用架构
所有的模块、组件都在一个应用中,应用最终会被封装成一个(jar、war)包,只使用一个容器(Tomcat)进行部署,通常情况只搭配一个数据库进行使用。
在单体应用中通常分为三个组成部分:持久层、业务层、表现层
单体架构优点:
- 易于开发,架构简单,开发成本低
- 易于测试,所有功能在一个项目中
- 易于部署,一个Tomcat就可以实现部署
单体架构缺点:
- 代码臃肿可读性差,不利于维护
- 因为处在一个项目中,编译启动较慢
- 技术选型单一
- 项目可扩展性较差
- 对大数据、高并发量的处理不占优势
- 代码/业务耦合度高
②、集群
集群就是多个应用分散在不同的服务器,每个应用跑的是同一套代码做的是相同的工作,以提高系统的整体性能,类似1+1=2
③、分布式
分布式就是将一个完整的业务按照功能/应用进行拆分,多个子应用分别部署在不同的服务器,子应用一同工作、相互协调配合才能完成一个完整的业务,类似0.5+0.5=1
④、SOA
首先SOA也是分布式架构,SOA是面向服务的架构,它的思想是每个子应用可以通过网络通信协议向其他子应用提供服务或者消费服务
简单理解就是,传统的表现层有对应的服务层,如果服务需要相互调用,只能在服务层进行调用(通过IOC),但是SOA中服务层中包含了业务逻辑和相关流程,只需要对外暴露服务即可,在表现层中进行任意的调用即可
SOA的优点:
- 功能拆分,相互之间使用API进行通信,代码/业务耦合性降低
- 项目功能拆分后,每个子应用的业务相对简单,代码便于开发
- 不同人员开发不同子应用,开发效率提升
- 提高服务之间的重用性,业务逻辑可以组合
SOA的缺点:
- 服务之间的API开发增加开发量
- 子应用的增加,需要相对增加开发人员,加大人力物力
- 应用之间的相互调用需要考虑网络影响
⑤、微服务
微服务与SOA架构很像,可以说微服务是将单一应用的颗粒度划分为多个小/微服务,每个微服务独立运行,并且只要专注自己所负责应用即可,同时每个微服务可以用自己对应的数据库,服务之间通过协调配合完成整个系统业务
微服务优点:
- 服务拆分,单个服务代码简单,利于开发,
- 代码、业务高度解耦,服务升级迭代互不影响
- 轻量级HTTP通信机制,使得的不同的服务可以采用不同的编程语言
- 微服务有极强的扩展性,理论上微服务可以进行无限次拆分
- 更大的负载能力与容错能力
- 适用于现在流行的敏捷开发
- 对于新手上手比较快
微服务缺点:
- 分布式事务,分布式部署增加了事务的复杂性
- 部署麻烦,因为微服务多,部署起来相对麻烦,要借助容器技术与自动化部署技术
- 技术成本高,微服务架构本身比较复杂,技术成本较高
- 服务之间的通信对性能的损耗,微服务架构一定要考虑服务通信延迟对服务调用性能的损耗问题
2、如何选择
当项目规模较大,用户体量,并发较大的时候,微服务总体性能占优势,所以我们应该根据项目类型以及项目规模来决定应用架构的选型,如大型电商,物流,售票等系统我们可以选择使用微服务架构,对于中小型的企业级应用我们依然可以选择单体架构。