作者 | 铖朴
什么是 Spring Cloud Alibaba?
Spring Cloud Alibaba 是由阿里巴巴(后文简称:阿里)中间件团队于 2018 年 7 月开源,为业界提供的一套基于阿里内部分布式技术的一站式微服务构建解决方案。其基于 Spring Cloud 微服务框架标准,针对微服务架构中的服务注册与发现、分布式消息、服务限流降级以及分布式事务等核心模块,都提供了相应的面向业界的成熟解决方案,其与Spring Cloud之间的关系如下图所示:
依托 Spring Cloud Alibaba,用户仅需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建稳定可靠的分布式应用系统。
新版本预览
本次隆重发布的 Spring Cloud Alibaba 2021.0.1.0 版本在 Spring Cloud 2021.0.1、Spring Boot 2.6.3 的基础上对其中包括注册配置中心、分布式消息等在内的众多组件进行重大升级:
- Nacos:升级 Nacos 客户端到 1.4.2 版本,修复了 Nacos 1.4.1 所存在的相关问题,支持了 Nacos 服务发现失败容错等相关能力。
- RocketMQ:升级到了 4.9.2,并将之前项目中的 RocketMQ 单独分支融入到了项目主分支,跟随大版本一起发布迭代,使用户可在最新 Spring Cloud Alibaba 中直接使用 RocketMQ 新支持的批量消息、异步消息回调处理、Push 模式下指定消费起始位等众多新特性。
- Sentinel:升级到了 1.8.3,除了修复部分之前版本所存在的问题外,还提供了丰富的针对 FeignClient 的容错能力,支持针对全局 FeignClient 配置默认熔断规则,支持对单个 FeignClient 配置特定容错规则以及支持针对单个方法配置熔断规则等能力。
- Spring Boot:在Spring Boot 2.6.3 版本基础上,支持了 spring.config.import 的应用配置方式,方便用户更友好地在应用中配置和使用 Nacos 配置中心。
除了组件升级,另外也修复了很多之前版本所存在的问题,进一步提升了 Spring Cloud Alibaba 使用的稳定性与健壮性。更多资料可参见发版公告 [1]。
Spring Cloud Alibaba 与 Spring Cloud 和 Spring Boot 当前各版本对应关系可参见文末官网 Wiki 版本说明 [2]。
升级指导
1、版本号
由于 Spring Cloud 版本号经历了一轮从英文名到以年份开头的命名方式的变化,了解到社区内外用户对于 Spring Cloud Alibaba 与 Spring Cloud 版本号之间对应关系经常感到困惑。为了让大家今后在使用 Spring Cloud Alibaba 能便捷的知道其所对应的 Spring Cloud 版本,经过社区核心成员之间在双周会上的讨论以及与 Spring Cloud 社区负责人的沟通后决定,从 2021.0.1.0 开始,Spring Cloud Alibaba 版本将会对应 Spring Cloud 版本, 前三位为 Spring Cloud 版本,最后一位为扩展版本,比如针对Spring Cloud 2021.0.1对应的 Spring Cloud Alibaba 第一个版本的版本号就是 2021.0.1.0,第二个版本的版本号便是 2021.0.1.1。
2、升级操作
如果项目中需要使用 Spring Cloud Alibaba 2021.0.1.0 版本,请在项目中添加如下依赖:
<dependencyManagement> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.6.3</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2021.0.1</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2021.0.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencyManagement>
注意事项:spring-cloud-starter-alibaba-nacos-config 模块移除了 spring-cloud-starter-bootstrap 依赖,如果你想以旧版的方式使用,你需要手动加上该依赖,现在推荐使用 spring.config.import 方式引入配置。完成以上步骤就能无缝切换到 spring cloud alibaba 2021.0.1.0 版本。03
3、新特性以及使用方式
1、支持 spring.config.import
这里假设有一个配置文件(bootstrap.yml),升级到新版本应该怎么配置呢?
# bootstrap.yml spring: cloud: nacos: config: name: test.yml group: DEFAULT_GROUP server-addr: 127.0.0.1:8848 extension-configs: - dataId: test01.yml group: group_01 - dataId: test02.yml group: group_02 refresh: false
这两个配置是等价的:
# application.yml spring: cloud: nacos: config: group: DEFAULT_GROUP server-addr: 127.0.0.1:8848 config: import: - optional:nacos:test.yml # 监听 DEFAULT_GROUP:test.yml - optional:nacos:test01.yml?group=group_01 # 覆盖默认 group,监听 group_01:test01.yml - optional:nacos:test02.yml?group=group_02&refreshEnabled=false # 不开启动态刷新 - nacos:test03.yml # 在拉取nacos配置异常时会快速失败,会导致 spring 容器启动失败
注意事项:
- 如果使用 spring.config.import 就不能使用 bootstrap.yml/properties 引入配置的方式了 !!!
- 如果引入了 spring-cloud-starter-alibaba-nacos-config,并且使用 import 方式导入配置, 项目启动时会自动检测是否引入了 nacos: 条目,如果没有 import nacos 条目,会出现如下错误:
The spring.config.import property is missing a nacos: entry Action: Add a spring.config.import=nacos: property to your configuration. If configuration is not required add spring.config.import=optional:nacos: instead. To disable this check, set spring.cloud.nacos.config.import-check.enabled=false.
你可以手动通设置 spring.cloud.nacos.config.import-check.enabled=false 关闭它,但是不建议这么做,这个功能可以帮助你检查是否引入多余依赖
- 假如想保留以前的使用方式 (bootstrap引入配置),你只需要添加依赖 spring-cloud-starter-bootstrap 依赖,不需要修改一行代码
2、Nacos 容错能力
新增配置项 spring.cloud.nacos.discovery.failure-tolerance-enabled, 设置为 true (默认 false) 开启 nacos 服务发现失败容错能力,该功能会在 nacos 获取实例失败时返回上一次获取的实例,可以在 nacos server 网络不稳定时提供容错能力,不会导致请求全部挂掉。
3、支持 FeignClient 灵活的熔断配置
当 Sentinel 作为 Spring Cloud 断路器实现时,支持为每个 FeignClient 添加断路器配置。
添加依赖:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-circuitbreaker-sentinel</artifactId> </dependency>
这里有两个 FeignClient:
@FeignClient(value = "user", fallback = UserFallback.class) public interface UserClient { @GetMapping("/{success}") String success(@PathVariable Boolean success); } @FeignClient(value = "order", fallback = OrderFallback.class) public interface OrderClient { @GetMapping("/{success}") String success(@PathVariable Boolean success); @GetMapping("/{success}") String error(@PathVariable Boolean success); }
现在有如下需求:
- 想要对全局的 FeignClient 配置一个默认熔断规则。
- 想要对 user FeignClient 配置熔断规则。
- 想要对 order FeignClient 的指定方法(error)配置熔断规则。
添加以下配置:
feign: circuitbreaker: enabled: true sentinel: default-rule: default # 全局规则名称 rules: # 全局配置,这些参数的意思请查看 com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule # 可配置多条规则 default: - grade: 2 count: 1 timeWindow: 1 statIntervalMs: 1000 minRequestAmount: 5 - grade: 2 count: 1 # 针对 user FeignClient user: - grade: 2 count: 1 timeWindow: 1 statIntervalMs: 1000 minRequestAmount: 5 # 针对 order FeignClient error 方法,注意中括号,不然会解析出来的值会不一致 "[order#error(Boolean)]": - grade: 2 count: 1 timeWindow: 1 statIntervalMs: 1000 minRequestAmount: 5
该功能还支持从配置中心动态刷新,可以将上述配置放入配置中心(nacos,consul),修改规则会立刻生效,如果不需要该功能可以通过 feign.sentinel.enable-refresh-rules=false 来禁用它。
注意事项:如果你使用的是 spring-cloud-starter-alibaba-sentinel,请不要配置 feign.sentinel.enable=true,会使配置失效。
4、升级建议
- 在 spring boot 2.6 之后默认开启了禁止循环引入,建议大家不要关闭,这是一种不好的编码习惯,如果你的项目里出现了循环引用,请选择重构它。
- 抛弃 bootstrap 引入配置的方式,使用 spring.config.import 方式引入配置,spring boot 2.4 对这一块做了很大的优化工作,不再需要全量启动一个容器来刷新配置。
回顾展望
经过三年多的飞速发展,截止到当前,Spring Cloud Alibaba 共发布了 27 个版本,在 GitHub 上的累计 stars 数目超过了 2.15w,fork 数达到了 6.7k,用户数达到了 21k 之多,各项关键数据遥遥领先国内外各大云厂商推出的同类开源微服务产品。
除了支撑阿里巴巴经济体日常复杂的微服务应用场景,Spring Cloud Alibaba 也被数千家外部企业用户在生产场景中广泛使用。
未来 Spring Cloud Alibaba 会继续对齐 Spring Cloud 主流版本发展演进,近期会同时支持以 Spring Cloud 2021.x 和 Hoxton 两个当前主流版本对应的 Spring Cloud Alibaba 2021.x 和 2.2.X 版本迭代。社区未来除了会持续为 Spring Cloud 应用使用阿里巴巴微服务解决方案中的 Nacos、Sentinel、RocketMQ 等组件的稳定性和易用性上持续努力外,为 Spring Cloud 应用提供开源的服务契约、标签路由等微服务治理能力上支持努力,非常欢迎有兴趣的同学加入我们一起做一些有意思的事情!
社区建设
1、开发角色
Spring Cloud Alibaba 项目开发者包含 Steering Committee Member、Committer、Contributor 三种角色,每种角色的标准定义如下。
1、Steering Committee Member
Steering Committee 作为 Spring Cloud Alibaba 项目的技术发展指导委员会,其成员是对Spring Cloud Alibaba项目的演进和发展做出显著贡献的个人。具体包含以下的标准:
- 完成多个关键模块或者工程的设计与开发,是项目的核心开发人员;
- 持续的投入和激情,能够积极参与社区、官网、issue、PR 等项目相关事项的维护;
- 在社区中具有有目共睹的影响力,能够代表 Spring Cloud Alibaba 参加重要的社区会议和活动;
- 具有培养 Committer 和 Contributor 的意识和能力;
2、Committer
Committer 是具有仓库写权限的个人,包含以下的标准:
- 能够在长时间内做持续贡献 issue、PR 的个人;
- 参与 issue 列表的维护及重要 feature 的讨论;
- 参与 code review;
3、Contributor
Contributor 是对项目有贡献的个人,标准为:
- 提交过 PR 并被合并;
2、开发团队
本页面展示了 Spring Cloud Alibaba 的开发团队成员,我们一直都在持续扩充中,欢迎加入社区:)
Steering Committee Member 成员:
姓名 | Github 账号 | 角色 | 联系方式 | 组织 |
方剑 | fangjian0423 | Steering Committee Member | fangjian0423@gmail.com | 阿里巴巴 |
肖京 | flystar32 | Steering Committee Member | flystar32@163.com | 阿里巴巴 |
马昕曦 | mercyblitz | Steering Committee Member | mercyblitz@gmail.com | 自由职业 |
任浩军 | HaojunRen | Steering Committee Member | 1394997@qq.com | Nepxion社区 |
陈曦 | theonefx | Steering Committee Member | chenxilzx1@gmail.com | 阿里巴巴 |
Committer 成员:
姓名 | Github账号 | 角色 | 联系方式 | 组织 |
廖春涛 | chuntaojun | Committer | liaochuntao@live.com | 腾讯 |
余黄彬 | yuhuangbin | Committer | danielyu96@163.com | ~ |
赵奕豪 | sczyh30 | Committer | sczyh16@gmail.com | 阿里巴巴 |
张开兆 | zkzlx | Committer | kiss_maple@163.com | 得物 |
饶子昊 | steverao | Committer | zihaorao@126.com | 阿里巴巴 |
刘梁文 | DanielLiu1123 | Committer | llw599502537@gmail.com | 在校学生 |
冷冷 | lltx | Committer | wangiegie@gmail.com | ~ |
echooymxq | echooymxq | Committer | echooy.mxq@gmail.com | ~ |
3、双周会
为了提供一个社区成员之间进行沟通交流的时间和机会,Spring Cloud Alibaba 社区从2021 年 12 月决定正式启动双周会制度,到目前为止已经持续了 4 次。在双周会中,社区核心开发成员会对社区近期的 issues、PR 以及社区未来发展规划进行介绍,让社区内外同学更好地了解和使用 Spring Cloud Alibaba。Spring Cloud Alibaba 社区的双周会无特殊情况一般定在每隔一周的星期四晚上 8 点进行,会议开始前一周内社区会及时将本次会议接入方式在 GitHub 相关 issues [3] 上进行同步,欢迎社区内外的同学有时间多多参与。
4、新 Committer 介绍
Spring Cloud Alibaba 社区近几个月涌现了一些积极参与社区维护迭代的外部贡献者,在此,向他们表示感谢!另外,对于其中多次提交有重要贡献 feature 的同学,社区按照推荐制度在近期双周会中正式提名其为 Committer,在此也向其表示祝贺。欢迎更多外部同学关注 Spring Cloud Alibaba 开源社区和贡献开源社区。
Spring Cloud Alibaba 企业版
除了开源的 Spring Cloud Alibaba 以外,针对企业级用户复杂繁重的微服务治理诉求,,阿里云中间件团队推出的阿里云微服务引擎(Microservices Engine,MSE)提供了包括全链路灰度、无损上下线、服务预热、离群实例摘除等在内的大量企业级微服务治理功能,让用户可不改一行代码即可将应用接入 MSE 便捷、低成本地拥有企业级微服务治理能力。除了微服务治理,MSE 还提供了企业级的 Nacos 注册配置中心和企业级云原生网关等众多产品,帮助企业用户迅速拥抱云原生微服务。
相关链接
[1]发版公告:https://github.com/alibaba/spring-cloud-alibaba/releases/tag/2021.0.1.0
[2]官网 Wiki 版本说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
[3]GitHub 相关 issues:https://github.com/alibaba/spring-cloud-alibaba/issues/2333
[4]过往的会议纪要:https://www.yuque.com/spring-cloud-alibaba/xgu1l3/pgmd2a
点击了解更多 Spring Cloud Alibaba 企业版相关详情~