引子:

上文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全生命周期开发者社区

更多推荐