一、微服务架构

1、架构的演变

1.1、单一应用架构

当网站流量很小时,只需要一个应用,所有功能部署在一起,减少部署节点成本的框架称之为集中式框架。此时,用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键。

1.2、 垂直应用架构

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。

1.3、分布式服务架构

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

1.4、面向服务(SOA)架构

典型代表有两个:流动计算架构和微服务架构;

(1)流动计算架构

当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。流动计算架构的最佳实践阿里的Dubbo。

(2)微服务架构

与流动计算架构很相似,除了具备流动计算架构优势外,微服务架构中的微服务可以独立部署,独立发展。且微服务的开发不会限制于任何技术栈。微服务架构的最佳实践是SpringCloud及Spring Cloud Alibaba

2、微服务架构

​ 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP协议的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。

二、spring cloud:

1、介绍:

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包.

2、与dubbo的比较
2.1、来源(背景):

(1)Dubbo:是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点。
(2)Spring Cloud:是Spring Source的产物,除了Spring Source之外,还有Pivotal和Netfix是其强大的后盾与技术输出。其中Netflix开源的整套微服务架构套件是Spring Cloud的核心。

2.2、传输:

(1)Dubbo:由于是二进制的传输,占用带宽会更少;
(2)Spring Cloud:是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大。但是在国内95%的公司内,网络消耗不是什么太大问题,如果真的成了问题,通过压缩、二进制、高速缓存、分段降级等方法,很容易解。

2.3、开发难度:

(1)Dubbo的开发难度较大,原因是dubbo的jar包依赖问题很多大型工程无法解决;
(2)Spring Cloud的接口协议约定比较自由且松散,需要有强有力的行政措施来限制接口无序升级

2.4、后续改进:

(1)Dubbo通过dubbofilter,很多东西没有,需要自己继承,如监控,如日志,如限流,如追踪
(2)Spring Cloud自己带了很多监控、限流措施,但是功能可能和欧美习惯相同,国内需要进行适当改造,但更简单,就是ServletFilter而已,但是总归比dubbo多一些东西是好的;

2.5、注册中心:

(1)Dubbo的注册中心可以选择zk,redis等多种;
(2)Spring Cloud:的注册中心只能用eureka或者自研;

2.6、配置中心:

(1)dubbo:如果我们使用配置中心、分布式跟踪这些内容都需要自己去集成,无形中增加了使用难度。
(2)Spring Cloud:提供了微服务的一整套解决方案:服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等

2.7、核心部件的比较:

(1)Dubbo:

Provider:暴露服务的提供方,可以通过 jar 或者容器的方式启动服务。
Consumer:调用远程服务的服务消费方。
Registry:服务注册中心和发现中心。
Monitor:统计服务和调用次数,调用时间监控中心。(Dubbo 的控制台页面中可以显示,目前只有一个简单版本。)
Container:服务运行的容器。

(2)Spring Cloud:

Service Provider: 暴露服务的提供方。
Service Consumer:调用远程服务的服务消费方。
EureKa Server: 服务注册中心和服务发现中心。
2.8、架构的完整度:

(1)Dubbo只是实现了服务治理;
(2)Spring Cloud下面有17个子项目(可能还会新增)分别覆盖了微服务架构下的方方面面,服 务治理只是其中的一个方面;一定程度来说,Dubbo只是Spring Cloud Netflix中的一个子集。

2.9、服务依赖方式:

(1)Dubbo:服务提供方与消费方通过接口的方式依赖,服务调用设计如下:

Interface 层:服务接口层,定义了服务对外提供的所有接口。
Molel 层:服务的 DTO 对象层。
Business层:业务实现层,实现 Interface 接口并且和 DB 交互。

因此需要为每个微服务定义各自的 Interface 接口,并通过持续集成发布到私有仓库中。调用方应用对微服务提供的抽象接口存在强依赖关系,开发、测试、集成环境都需要严格的管理版本依赖。通过 maven 的 install & deploy 命令把 Interface 和 Model 层发布到仓库中,服务调用方只需要依赖 Interface 和 Model 层即可。在开发调试阶段只发布 Snapshot 版本,等到服务调试完成再发布;Release 版本,通过版本号来区分每次迭代的版本。通过 xml 配置方式即可接入 Dubbo,对程序无入侵。
总之:服务提供方与消费方通过接口的方式依赖,Dubbo 服务依赖略重,需要有完善的版本管理机制,但是程序入侵少。

(2)Spring Cloud:
服务提供方和服务消费方通过 Json 方式交互,因此只需要定义好相关 Json 字段即可,消费方和提供方无接口依赖。通过注解方式来实现服务配置,对于程序有一定入侵。
通过 Json 交互,省略了版本管理的问题,但是具体字段含义需要统一管理,自身 Rest API 方式交互,为跨平台调用奠定了基础。

3、版本说明

SpringCloud是一系列框架组合,为了避免与框架版本产生混淆,采用新的版本命名方式,形式为大版本名+子版本名称
  大版本名用伦敦地铁站名
  子版本名称三种
    SNAPSHOT:快照版本,尝鲜版,随时可能修改
    M版本,MileStone,M1表示第一个里程碑版本,一般同时标注PRE,表示预览版
    SR,Service Release,SR1表示第一个正式版本,同时标注GA(Generally Available),稳定版

另外:
    最新版本已经更新了不再以地铁名为依据,并移除掉了一些组件例如:spring cloud netflex 中的一些组件
新的命名方式说明大家可以看下官方说明:

https://spring.io/blog/2020/04/17/spring-cloud-2020-0-0-m1-released
4、Springboot与Springcloud版本对应 

官方对应关系:https://start.spring.io/actuator/info

 三、Spring cloud alibaba

1、介绍

同 Spring Cloud 一样,Spring Cloud Alibaba 也是一套微服务解决方案,包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

我们这⾥为什么选择SpringCloud Alibaba呢,主要因为SpringCloud Netflix的组件:服务注册与发现的Eureka、服务限流降级的 Hystrix、⽹关 Zuul都已经停⽌更新了,当然继续使⽤是没问题的,只是出现问题,官⽅不维护,需要⾃⾏解决。

2、与Spring Cloud的关系

依托 Spring Cloud Alibaba,只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。Spring Cloud 和Spring Cloud Alibaba的关系:可以简单理解成 集团和子公司的关系。

https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md
3、版本说明

重要:鉴于SpringBoot与SpringCloud关系,SpringBoot建议采用2.2.x版本或者2.3.x,这里我们采用的版本为:

Hoxton SR9
spring boot 2.3.8

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐