引子:

上文Spring Cloud Alibaba专题–服务层的架构演进(二)中说到,微服务的架构搭建因为门槛过高,尝试搭建微服务架构的过程像更像是从入门到放弃的劝退过程。就像初期的Spring一样。Spring虽然相比老一代strus2架构搭建简单了很多,但是其配置复杂度仍然让很多人诟病。针对这个问题,Spring官方推出了Spring Boot。通过约定大于配置的规范,以及大量默认开箱即用的Starter,使得Spring的配置极大的简化,那么微服务门槛高的问题是不是也能照葫芦画瓢解决呢?答案是肯定的,这个类似于Spring Boot的产品就是Spring Cloud

一:Spring Cloud介绍

Spring Cloud为开发人员提供了快速构建分布式系统的能力
1.Spring Cloud制定了譬如服务端负载均衡,配置发现,消息总线等等相关的标准,通过这些标准,任何实现了标准的相关领域的中间件都可以非常轻松的接入Spring Cloud。基于同一标准实现的中间件可以直接替换。

2.在提供这一系列标准后,Spring Cloud官方实现了套自己的实现,比如服务发现中心Eureka,配置中心Spring Cloud Config,负载均衡器Ribbon等等
3.处理自家的实现,Spring Cloud也人性化的给常用的其他的中间件做了接入Spring Cloud的驱动,即对应的spirng-cloud-xxxx.starter(自己家的产品当然也有这个),比如配置中心Consul,Zookeeper等等

(1)Spirng Cloud支持的组件

功能 翻译 选择
Distributed/versioned configuration 分布式/版本化配置管理 Spring Cloud Config、Consul、Nacos、Zookeeper
Routing 路由 Zuul、Spring Cloud Gateway
Service-to-service calls 端到端的调用 RestTempalte、Feign
Service registration and discovery 端到端的调用 Euraka、Consul、Nacos、Zookeeper
Load balancing 负载均衡 Ribbon
Circuit Breakers 断路器 Hystrix、Sentinel、Resilience4J
Global locks 全局锁 Spring Cloud Cluster(已经迁移到Spring Integration)
Leadership election and cluster state 选举与集群状态 Spring Cloud Cluster(已经迁移到Spring Integration)
Distributed messaging 分布式消息 Spring Cloud Stream+Kafka/RabbitMQ/RocketMQ

(2)Spirng Cloud组件能力脑图

在这里插入图片描述

注:以上图片来自互联网

二:Spring Cloud Alibaba

Spirng Cloud Alibaba已经2019年8月1日成功孵化。可以在Spring的官网中看到
在这里插入图片描述

1.Spring Cloud Alibaba简介

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

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

主要功能
  • 服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
  • 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
  • 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
  • 消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
  • 分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。
  • 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  • 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
  • 阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

注:以上文字来自Spring Cloud Alibaba官网

可以看到,虽然Spring Cloud Alibaba是Spring Cloud的一个子项目,但是这个子项目同样是和Spirng Cloud一样是微服务开发的一站式解决方案,这不是重复了吗?

2.为什么要使用Spring Cloud Alibaba

  • 一个很重要的原因就是SpringCloud中一些组件闭源了,不再维护,如果在生产环境出现了问题,官方不再免费维护了。比如:注册中心Eureka在2.0版本之后宣布闭源了,容错组件Hystrix、网关组件Zuul也已经宣布停止维护了
  • 虽然说SpringCloud在官方给出了最优的替换方案,但是那些替换方案不再属于SpringCloud技术栈。换句话说:就是SpringCloud的技术栈不再完整了!此时,我们就有必要寻找一个新的完整的技术栈

同样是业界一流的开源大厂,相对于Spring官方,Alibaba不仅拥有众多的开源产品,而且开源的很多产品都是经过内部双11、双12大促的考验,在不断总结和优化后开源出来的产品。这个时候以Alibaba的技术背景下的分布式一站式解决方案进入孵化器,也就是现在的Spring Cloud Alibaba

所以:在当前的背景下,Spring Cloud Alibaba是作为首选的分布式一站式解决方案

3.使用Spring Cloud Alibaba的好处

1.既然是一站式解决方案,常见的分布式组件的集成,适配及标准实现,官方都已经做了,分布式环境搭建将变得非常简单,再也不用为了集成某个组件,辛苦的写Starter以及初始化数据了(写的还不一定好使=_=!!)
2.依赖这Spring Cloud这座大山(虽然部分组件不在维护,但丝毫不能影响Spirng Cloud在分布式解决方案中做的铺垫),出了支持原来Spring Cloud的能力外,对于阿里系的Dubbo等相关的技术站同样支持,而且,针对Spirng Cloud能力做增强(以前不支持的能力)和优化(自家的东西优化)
3.几年前,很多人还在为了争论用Dubbo好还是用Spring Cloud好(当然,这两个东西在一块比并不合适),现在,Spring Cloud Alibaba在分布式解决方案上形成了大统一

4.版本说明

(1)组件版本关系

在这里插入图片描述

(2)毕业版本依赖关系(推荐使用)

在这里插入图片描述

(3)本专题使用的版本

虽然Spring Cloud Alibaba 2021.1版本已经可以使用了,最新版虽然拥有更强的功能,但是同样可能存在更多的bug,这里选择当前时间次新的版本2.2.5RELEASE

5.Spring Cloud Alibaba的使用

Spring Cloud Alibaba基于Spring Cloud,而Spring Cloud又是基于Spring Boot,按照上面的版本对应关心,Spring Cloud Alibaba使用的是2.2.5.RELEASE,Spring Cloud的版本应为Hoxton.SR8,而Spring Boot的版本应为2.3.2.RELEASE

依赖版本声明

Spring Cloud Alibaba,Spring Cloud以及Spring Boot都提供了依赖版本声明的pom,我们可以使用Maven的dependencyManagement来控制依赖版本,这样,只要是对应的pom中规定了的依赖包,我们引入的时候就不必声明版本号了,注意,使用Spring Cloud Alibaba,或Spring Cloud的任意一个驱动包,都会自动将对应的Spring Cloud依赖以及Spring Boot的依赖加入,项目中一旦引入一个,就不用再自己声明依赖Spring Cloud或Spring Boot了

 <properties>
        <java.version>1.8</java.version>
        <spring-cloud-alibaba.version>2.2.5.RELEASE</spring-cloud-alibaba.version>
        <dubbo.version>2.7.8</dubbo.version>
        <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
    </properties>
 <dependencyManagement>
        <dependencies>
            <!--spring-cloud-alibaba dependencies pom 依赖包-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring-cloud-alibaba dependencies pom 依赖包-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring-cloud dependencies pom 依赖包-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
</dependencyManagement>
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐