基于spring-cloud实现的全链路灰度发布
灰度发布(Gray Release,也称为灰度发布或金丝雀发布)是指在软件或服务发布过程中,将新版本的功能或服务以较小的比例引入到生产环境中,仅向部分用户或节点提供新功能的一种发布策略。 在传统的全量发布中,新版本的功能会一次性全部部署到所有的用户或节点上。然而,这种方式潜在的风险是,如果新版本存在缺陷或问题,可能会对所有用户或节点产生严重的影响,导致系统崩溃或服务不可用。 相比之下,灰度发布采用较小的规模,并逐步将新版本的功能引入到生产环境中,仅向一小部分用户或节点提供新功能。通过持续监测和评估,可以在发现问题时及时回滚或修复。这种逐步引入新版本的方式可以降低风险,并提高系统的稳定性和可靠性。
- 在使用 Nacos 作为服务发现的业务系统中,一般是需要业务根据其使用的微服务框架来决定打标方式。
- 如果 Java 应用使用的 Spring Cloud 微服务开发框架,我们可以为业务容器添加对应的环境变量来完成标签的添加操作。
- 比如我们希望为节点添加版本灰度标,那么为业务容器添加spring.cloud.nacos.discovery.metadata.version=gray,这样框架向Nacos注册该节点时会为其添加一个标签verison=gray。
功能模块
模块 | 描述 |
---|---|
spring-cloud-gray-core | 框架核心包 |
spring-cloud-gray-core | 灰度数据模型工具类,所有组件通用 |
spring-cloud-gray-loadbalancer | 灰度客户端与spring cloud loadbalancer集成的插件 |
spring-cloud-gray-openfeign | 灰度客户端与spring cloud openfeign集成的插件 |
spring-cloud-gray-gateway | 灰度客户端与spring cloud gateway集成的插件 |
项目已经实现了灰度的内核,如果要与其它的注册中心或者负载均衡中间件集成,只需实现相应的组件即可,spring cloud gray已经提供了loadbalancer、feign以及spring cloud gateway的组件,添加相应的组件依赖即可。
- spring-cloud版本:2023.0.1
- spring-boot版本:3.2.4
- spring-cloud-alibaba版本:2023.0.1.2
- main 分支对应的是 Spring Cloud 2023.0.1、spring-cloud-alibaba 2023.0.1.2 与 Spring Boot 3.2.4,最低支持 JDK 17。
Spring Cloud 使用 Maven 来构建,最快的使用方式是将本项目 clone 到本地,然后执行以下命令:
mvn clean install -Dmaven.test.skip=true
网关引入gateway灰度组件
<dependency>
<groupId>org.github.opensource</groupId>
<artifactId>spring-cloud-gray-gateway</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
普通服务引入loadbalancer、openfeign灰度组件
<dependency>
<groupId>org.github.opensource</groupId>
<artifactId>spring-cloud-gray-loadbalancer</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.github.opensource</groupId>
<artifactId>spring-cloud-gray-openfeign</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>