Spring Cloud Alibaba 教程 | 前世今生
Spring Cloud Alibaba是什么
先来看一下官方是怎么定义Spring Cloud Alibaba的:
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
从官方的文档可以看出Spring Cloud Alibaba是一个微服务一站式解决方案,提供了对Spring Cloud的标准实现,即包含了多个治理微服务的组件。 我们之前使用Spring Cloud的时候其实是在使用Spring Cloud Netflix的解决方案,使用到了Netflix中大家都非常熟悉的组件:Eureka、Zuul、Hystrix、Ribbon等,下面是Spring Cloud Netflix的官方介绍:
Spring Cloud Netflix provides Netflix OSS integrations for Spring Boot apps through autoconfiguration and binding to the Spring Environment and other Spring programming model idioms. With a few simple annotations you can quickly enable and configure the common patterns inside your application and build large distributed systems with battle-tested Netflix components. The patterns provided include Service Discovery (Eureka), Circuit Breaker (Hystrix), Intelligent Routing (Zuul) and Client Side Load Balancing (Ribbon)..
简单翻译一下:Spring Cloud Netflix提供了Netflix OSS集成到Spring Boot应用,通过自动化配置、绑定到spring环境和其他的习惯的spring编程模型。通过少量的注解你就可以快速启用和配置通用模式到你的应用,使用经过Netflix实战检验的组件去构建大型分布式系统。这个模式提供了包含服务发现(Eureka)、断路器(Hystrix)、智能路由(Zuul)、客户端负责均衡(Ribbon)等组件。
到目前为止我们可以将Spring Cloud Alibaba和Spring Cloud Netflix做一个比较(阿里巴巴官方也是将Spring Cloud Alibaba和Spring Cloud Netflix做比较),他们俩都是Spring Cloud标准实现的微服务一站式解决方案提供商。下图是阿里官方开发者社区在介绍关于Spring Cloud Alibaba文章时,将其与各大提供商做比较的对比图:

进驻Spring Cloud孵化器
2018年10月31日,Spring Cloud Alibaba正式入驻Spring Cloud官方孵化器并发布了第一个预览版本。我们知道Spring Cloud 本身其实只是一套微服务规范,并不是一个拿来即可用的框架,而 Spring Cloud Alibaba 的开源为开发者们提供了这套规范的实现方式。同时,Spring Cloud Alibaba 提供的完整的微服务组件、中文文档和本地化的开源服务提高了开发者们接入微服务的速率,并降低了后续的运维难度。
Spring Cloud for Alibaba 0.2.0 released

Spring Cloud for Alibaba项目包含了阿里巴巴开源组件和多个云产品。该项目旨在实现并公开众所周知的Spring Framework模式和抽象,以便给使用阿里巴巴产品的 Java 开发者带来使用 Spring Boot 和 Spring Cloud 的更多便利。
Spring Cloud Alibaba进入到官方孵化器之后,预计将在2019年的某个时候将从孵化器毕业,并加入Spring Cloud 发布列车。下面是官方博客原文:
Spring Cloud Alibaba will work towards graduating from incubation to officially join a Spring Cloud Release Train sometime in 2019
如果读者朋友们想及时了解Spring官方社区的动态信息,可以通过下面的方式邮件订阅Sring官方博客内容:

Spring Cloud Netflix进入维护模式
2018年12月12日,在这个双12的喜庆日子里,Spring官方社区发生了一件震惊Java界的大事,Netflix官方宣布了旗下大部分的微服务组件进入了Maintenance Mode(维护模式)。
博文连接 :spring-cloud-greenwich-rc1-available-now

最近,Netflix 宣布 Hystrix正在进入维护模式。自2016年以来,Ribbon已处于类似状态。尽管Hystrix和Ribbon现已处于维护模式,但它们仍然在Netflix大规模部署。
Hystrix Dashboard和Turbine已被Atlas取代。这些项目的最后一次提交别是2年和4年前。Zuul 1和Archaius 1都已经被后来不兼容的版本所取代。
以下Spring Cloud Netflix模块组件和相应的Starter将进入维护模式:
1.spring-cloud-netflix-archaius
2.spring-cloud-netflix-hystrix-contract
3.spring-cloud-netflix-hystrix-dashboard
4.spring-cloud-netflix-hystrix-stream
5.spring-cloud-netflix-hystrix
6.spring-cloud-netflix-ribbon
7.spring-cloud-netflix-turbine-stream
8.spring-cloud-netflix-turbine
9.spring-cloud-netflix-zuul

官方还特意解释了什么是Maintenance Mode(维护模式)。
将模块组件置于维护模式,意味着Spring Cloud团队将不会再为这些模块组件添加新的功能。但是我们将修复blocker级别的bug以及安全问题,我们也会考虑并审查社区的小型pull request。
我们打算继续为这些模块提供至少一年的支持,直到Greenwich的发布版本基本可用为止。
笔者认为,Netflix的组件短期内使用还是没有问题的,毕竟是已经被业界广泛使用过的,是经得住大规模生产环境的考验的,所以对于还在使用Netflix组件的企业来说也不必惊慌失措,但是由于不再会有新特性的出现,维护力度持续下降,长期使用肯定是不被推荐的了。对于国内的Java开发者来说,对Spring Cloud Alibaba的开源组件可能会更加的期盼,我认为它将会是Spring Cloud Netflix的完美替代者,并且我坚信Spring Cloud Alibaba的组件一定会更加符合国情,对于国内的开发者会更加人性化,所以Netflix进入维护模式这件事情反而更加激发了我对学习、研究Spring Cloud Alibaba的兴趣,并且期盼它能够尽早地从Spring 社区它孵化成功。我相信到那时Spring Cloud Alibaba将会帮助更多的国内企业更好更快地落地微服务。
Spring Cloud Alibaba正式毕业
终于在经过了大约10个月的孵化器期之后,2019年7月24日Spring官方社区在一篇关于简化Spring Cloud发布系列的官方博文中宣布了Spring Cloud Alibaba正式从 Spring Cloud Incubator 孵化器毕业,成为了Spring社区的正式项目。
simplifying-the-spring-cloud-release-train


出于这些原因,Spring Cloud团队决定采用一种简化发布流程的模型,使我们能够在保持所有可观收益的同时解决弊端。方案就是IaaS服务提供商将在自己的GitHub组织中托管和维护其代码。这种方式同样适用于当前发布系列中已经存在的集成项目。Spring Cloud Azure还没有加入发布系列,Spring Cloud Alibaba团队已经从孵化器组织毕业,并且已经开始采用这种新的方式管理项目。
至此Spring社区中将会加入一个也是唯一一个国产的开源项目Spring Cloud Alibaba。Spring Cloud Alibaba毕业后发布了适配Spring Cloud中Edgware、Finchley、Greenwich三个版本的对应版本。

Spring Cloud Alibaba采用上面提到的新的项目管理方式,代码仓库迁移到Github Alibaba仓库下,maven坐标如下:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
同时国内版Github码云也提供了Spring Cloud Alibaba极速下载镜像。
Java界引发热议
笔者和技术圈的朋友讨论过Spring Cloud Alibaba,他们一致认为Spring Cloud Alibaba的出现一定会在国内的Java业界引起热议,果不其然,还没有等到Spring Cloud Alibaba孵化成功,那些所谓的“自媒体大佬”就蠢蠢欲动,开始了对Spring Cloud Alibaba的评头论足,一时间国内Java圈议论纷纷,有赞赏的、也有贬低的,下面是几篇访问量较大的文章,感兴趣的朋友可以到网上了解一下,当个吃瓜群众也是很Nice的。



Spring Cloud Alibaba技术栈
通过前面的介绍,我们已经知道了Spring Cloud Alibaba从孵化到毕业的周期,也知道了它是一个和Spring Cloud Netflix类似的解决方案,同时也被国内Java圈被誉为是在Spring Cloud Netflix进入维护模式之后微服务最好的替代方案,下面我们就从整体方向来了解一下Spring Cloud Alibaba的技术栈。
主要功能
- 服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
- 服务注册与发现:适配Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
- 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。 消息驱动能力:基于 Spring Cloud Stream为微服务应用构建消息驱动能力。
- 分布式事务:使用 @GlobalTransactional 注解,高效并且对业务零侵入地解决分布式事务问题。
- 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
- 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron
表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。 - 阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
组件
Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。
Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品。
Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
技术选型

图片来自于阿里官方的开发者社区博文,根据上面的架构图,依托 Spring Cloud Alibaba,只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
但是接入阿里微服务解决方案是有代价的,Spring Cloud Alibaba的组件并不是全部开源免费的,Alibaba Cloud ACM、Alibaba Cloud OSS、Alibaba Cloud SchedulerX、Alibaba Cloud SMS这四个组件是不开源的,换句话说是需要花钱的,并且会和阿里云平台绑定,这些是需要开发者去考虑的。
当业务需要这些组件时其实市面上也还是有替代方案的,Alibaba Cloud ACM其实不需要使用,开源的Nacos已经非常强大。Alibaba Cloud OSS对象存储服务可以使用Redis、memcache这样的NoSQL数据库代替,使用FastDFS也是不错的选择。对于Alibaba Cloud SchedulerX定时任务组件,可以使用elastic-job和xxl-job代替,这两个开源框架都已经在很多企业中使用,是非常成熟的Java分布式定时任务解决方案。Alibaba Cloud SMS短信服务,短信服务提供商非常多,这个应该是不会困扰到企业的技术选型的。
缺少网关组件
使用Spring Cloud Alibaba的所有开源组件已经可以搭建出适用大部分企业的基础架构,满足一般需求是没什么问题的了。如果说Spring Cloud Alibaba还有什么缺点的话,我认为除了哪些不开源的组件之外,缺少网关组件是Spring Cloud Alibaba不足的另外一个地方,但好在Spring官方社区还有网关组件Spring Cloud Gateway,或者使用开源的网关Soul(号称Java最好的网关解决方案)。
关注公众号了解更多原创博文
Spring Cloud Alibaba 教程 | 前世今生的更多相关文章
- Spring Cloud Alibaba 教程 | Nacos(一)
什么是Nacos Nacos是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台. Nacos 致力于帮助您发现.配置和管理微服务.Nacos提供了一组简单易用的特性集,帮助您快速实现动态 ...
- 详细剖析Spring Cloud 和Spring Cloud Alibaba的前世今生
我们知道spring cloud可以用来开发微服务,但是应该很少有人真正知道Spring Cloud是什么. 官方的解释是:spring cloud提供了一些可以让开发者快速构建分布式应用的工具,这些 ...
- Spring Cloud Alibaba 教程 | Nacos(五)
扩展配置(extended configurations) 通过之前的学习,我们知道应用引入nacos配置中心之后默认将会加载Data ID= ${prefix} - ${spring.profile ...
- Spring Cloud Alibaba 教程 | Nacos(三)
使用Nacos作为配置中心 前面我们已经介绍过滤Nacos是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台.所以它可以作为注册中心和配置中心,作为注册中心Nacos可以让我们灵活配置多 ...
- Spring Cloud Alibaba 教程 | Nacos(二)
源码解析客户端注册过程 nacos作为注册中心,包含了nacos服务端(注册中心服务)和nacos客户端,nacos注册中心服务上面一讲已经介绍过了它是一个用Java语言编写开源web项目,并且拥有自 ...
- Spring Cloud Alibaba教程:Nacos
Nacos是什么 Nacos 致力于帮助您发现.配置和管理微服务,它 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. 注册中心 nacos-server 可以 ...
- Spring Cloud Alibaba 教程 | Nacos(四)
Nacos环境隔离 Nacos管理台有一个单独的菜单"命名空间",里面默认存在一个名为"public"的默认命名空间,我们在使用Nacos时不管是作为注册中心还 ...
- Spring Cloud Alibaba 教程 | Nacos(六)
集群模式部署 前面我们已经学习了Nacos作为注册中心.配置中心的相关功能,但是我们之前启动Nacos是通过单实例模式启动的,只适合在学习和开发阶段,生产环境需要保证Nacos的高可用,所以今天我们来 ...
- Spring Cloud与Dubbo的完美融合之手「Spring Cloud Alibaba」
很早以前,在刚开始搞Spring Cloud基础教程的时候,写过这样一篇文章:<微服务架构的基础框架选择:Spring Cloud还是Dubbo?>,可能不少读者也都看过.之后也就一直有关 ...
随机推荐
- 阿里云https+nginx服务搭建
购买证书 通过控制台进入CA证书服务,点击右上角的购买证书,进入如下图的界面,选择免费的Symantec的DV SSL. 一路点过去,然后回到证书服务主页,会出现一条订单信息,点击补全,如下图所示. ...
- 接口补偿机制需求分析&方案设计
接口补偿机制需求分析&方案设计文章目录接口补偿机制需求分析&方案设计需求分析背景解决方案业务示例注意事项示例业务Controller实现重试信息类&数据处理入库接口重试的主要方 ...
- Delphi IDFtp用法,包含断点续传
1 连接远程服务器procedure Connect(AAutoLogin: boolean; const ATimeout: Integer);2 改变目录procedure ChangeDir ...
- printf的封装与实现
1 UART通信协议 1.1 UART通信的物理连接 图1 UART的物理连接 1.2 逻辑电平 用电平表示逻辑1和逻辑0,逻辑1和逻辑0用来组织计算机层面的数据. 1.3 电平标准 根据通讯使用的电 ...
- 官网英文版学习——RabbitMQ学习笔记(九)总结
RabbitMQ与spingboot相整合,主要步骤也很简单: 一.首先需要的是添加依赖 二.需要设置属性,属性主要是设置rabbitmq的地址端口,用户名密码回调等需要用到的一些常量,在整合过程中, ...
- mariadb galera启动问题
搭建了mariadb galera集群后,整个集群停掉后如何启动呢,我们要先启动那个节点呢,今天我尝试把集群机器全部停掉,然后任意启动一个节点,发现报如下的错误: 170620 21:32:55 [E ...
- Spring Boot2(005):关于代码结构
spring boot 对于工程代码结构并没有特殊得要求,但以下几个有用的最佳实践建议参考参考: 1.不鼓励而且应该避免使用 default 包 没有 package 声明的类被认为是在 defaul ...
- R语言 plot()函数 基础用法
plot(x=x轴数据,y=y轴数据,main="标题",sub="子标题",type="线型",xlab="x轴名称" ...
- 十九、JavaScript之数组
一.代码如下 二.执行效果如下 <!DOCTYPE html> <html> <meta http-equiv="Content-Type" cont ...
- IISHelper操作iis
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
