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最好的网关解决方案)。