架构发展
当一个系统涉及到很多的功能,比如一个购物网站,涉及到订单处理、商品处理、优惠券、积分活动等等时,初始的单个系统已无法承受负载,因此可以把多个功能拆分出来,形成多个系统,每个系统都是一个服务,分别单独部署,互不影响但是可以相互调用。
但是相互调用的时候是错综复杂的,因此就出现了SpringCloud中的一系列微服务组件,让我们可以治理和协调这些服务之间的调用。 SpringCloud是提出了以为服务为中心的一系列标准。 Netflix也是基于SpringCloud实现的,SpringCloud Alibaba也是基于SpringCloud实现的。
架构演变
单体应用架构————>垂直应用架构—————>分布式架构—————>SOA架构————>微服务架构,还有Service Mash(服务网格化)
单体应用架构
在学校的时候,我们会学习一些SSH、SSM框架,然后自己写一个小项目包含很多的功能,比如图书管理系统、学生管理系统等,部署到Tomcat中进行访问。这就是一个最简单的垂直应用架构系统。 互联网早期、网站的流量小,只需要把所有的功能代码部署在一起就可以,比如一个电商系统,包含用户管理、商品管理、订单管理、物流管理等等,以多个模块的来进行构建,作为一个web项目,然后部署到Tomcat中,部署到一台服务器上。
- 优点:
- 项目架构简单、小型项目成本低
- 项目部署在一个节点上,维护方便
- 缺点
- 业务需求增加时,项目庞大后难以维护和扩展开发
- 项目模块紧密耦合,单点容错率低,一个模块出现问题会导致整个服务的宕机
- 无法针对不同模块进行针对性优化和水平扩展
垂直应用架构
将单体架构拆分成多个架构,一个应用拆分为多个应用以提升行效率,当流量增多,只需要对流量大的架构进行扩展。 比如电商单体应用可以拆分为:
-
电商系统(用户管理 商品管理 订单管理)
-
后台系统(用户管理 订单管理 客户管理)
-
CMS系统(广告管理 营销管理)
这样当用户访问增大,只需要增加电商系统的节点就可以了,而无需增加后台和CMS节点
- 优点
- 系统拆分实现了流量分担,解决了并发问题,可以针对不同的模块进行优化和水平扩展
- 一个系统的问题不会影响他的系统,提高容错率
- 缺点
- 系统之间相互独立,无法互相调用
- 互相独立,会有重复的开发任务
这种架构在互联网行业较少,在传统行业比如OA ,仓储管理系统,物流管理系统,供应链管理系统等系统常用垂直架构。
分布式架构
针对垂直应用越来越多,可以将一些公共模块抽取出来,形成一个个服务进行单独部署,由前端控制层调用不同的业务层服务。也就是常见的前后端分离的思想。服务层(后端)包含业务逻辑,表现层(前端)负责处理和页面的交互,业务逻辑都是调用服务层的服务来实现的。
-
优点
- 抽取公共的功能为服务层,提高代码复用性
-
缺点
- 系统间的耦合度变高,调用关系错综复杂,难以维护
刚起步的公司可以使·用这种分布式架构
SOA架构
在分布式架构中,当服务逐渐增多,容量的评估,小服务资源浪费问题逐渐出现,可以增加一个调度中心对集群进行实时管理。资源调度和治理中心是关键点(SOA Service Oriented Architecture)
- 优点
- 治理中心(ESB\Dubbo可以解决调用时不同语言,不同请求协议形式之间的转换)解决了服务间调用关系的自动调节
- 缺点
- 服务间会有依赖关系,一旦某个环节出错会影响较大
- 服务关系复杂,运维、测试部署困难
微服务架构
某种程度上是SOA架构的后续发展,强调服务的彻底拆分,比SOA架构粒度更加精细,让专业的人去做专业的事情。
SOA架构中数据库存储可能会共享,微服务强调每个服务都是单独的数据库,保证服务之间互不影响。
项目特现在为服务架构比SOA架构更适合互联网公司敏捷开发、快速迭代版本。
- 优点 - 服务原子化拆分、独立打包、部署和升级,保证每个微服务清晰的任务划分,利于扩展 - 微服务之间采用Restful等轻量级http协议互相调用
- 缺点
- 分布式系统开发的技术成本高(容错、分布式事务等)
- 复杂性更高。各个微服务进行分布式独立部署,当进行模块调用时,分布式将变得很麻烦
高并发服务,缓存服务等交给不同的人维护。
常见问题
- 如何管理(服务治理 注册中心(服务注册 发现 剔除) nacos)
- 服务之间如何通讯(restful rpc dubbo fegin)httpclient("url",参数) JSON数据 spring boot提供了restTemplate("url",参数)自动进行序列化和反序列化 fegin
- 客户端如何访问(所有的请求都要经过网关gateway)
- 一旦服务出现问题,如何自处理(容错 sentinel)
- 一旦出现问题,如何排错(链路追踪)
K8S+Docker进行各个服务的部署。
常见微服务架构
1、 Dubbo:zookeeper+dubbo+SpringMVC/SpringBoot
- 配套 通信方式 rpc
- 注册中心:zookeeper/redis
- 配置中心:diamond 2、SpringCloud:全家桶+轻松嵌入第三方组件(Netflix现在已经闭源了)
- 配套 通信方式http restful
- 注册中心:eruka/consul
- 配置中心:config
- 断路器:hystrix
- 网关:zuul
- 分布式链路追踪:sleuth+zipkin 3、 SpringCloud Alibaba springcloud是针对分布式系统开发所作的通用抽象,是标准模式的实现。是springcloud的构建图。图中包含很多的 Micro service,也就是微服务实现,周围就是辅助的信息事情都是微服务运行时所依赖的必不可少的支持性功能。因此Spring Cloud是以微服务为核心的分布式系统的一个构建标准。
SpringCloud Alibaba
微服务的开发的一站式解决方案,包含了开发微服务架构的必须组件。方便开发人员通过springcloud编程模型来使用这些组件构建微服务架构,只需要通过添加一些注解和少量配置。
- 对spring cloud的标准实现
- 以微服务为核心的整体解决方案
- 开源与平台服务分开维护
后续写各个中间件,包含
-
Nacos:juejin.cn/post/723000…
-
Ribbon: juejin.cn/post/723376…
-
OpenFeign,Nacos-Config配置,Sentinel,Seata,GateWay,SkyWalking
参考
视频:【B站Spring Cloud Alibaba教程全集(2022最新版)】 www.bilibili.com/video/BV1pF…