如何使用SpringCloud进行灰度发布?
2021-06-30 - kblog
灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
在开发或者测试的时候,或者线上发布,线上服务多版本控制的时候,需要对服务提供权重路由,最常见的使用就是,一个服务有两个版本,旧版本V1,新版本v2。在线上灰度的时候,需要通过网关动态实时推送,路由权重信息。比如95%的流量走服务v1版本,5%的流量走服务v2版本。
如何使用SpringCloud进行灰度发布呢?将分一下四步:
第一,设置网关权重路由设置
Spring Cloud Gateway中提供了org.springframework.cloud.gateway.handler.predicate.WeightRoutePredicateFactory去实现根据分组设置权重进行路由,因此使用起来相对比较简单,有兴趣的可以debug阅读源码。
我们通过在Spring Cloud Gateway中会配置不同的权重信息到不同URL上,Spring Cloud Gateway会根据我们配置的路由权重信息,将请求分发到不同的源服务组,权重信息如ch4/ch4-gateway中的application.yml所示,主要配置信息如下。
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: order-service1
uri: lb://order/order/create1
order: 8000
predicates:
- Path=/order/create
filters:
- StripPrefix=1
- Weight=order-service, 95
- id: order-service2
uri: lb://order/create2
order: 8000
predicates:
- Path=/order/create
filters:
- StripPrefix=1
- Weight=order-service, 5
Weight=order-service1, 95,Weight=service1, 5就是路由的权重信息。
第二、源服务配置
源服务在本案例中为order模块源服务,主要提提供Gateway Server权重路由对应的后端源服务。因为比较简单因此不做详细说明,主要代码如下所示。
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class OrderController {
@RequestMapping("/create1")
public String orderCreateV1() {
//此处写业务逻辑代码
return "success";
}
@RequestMapping( "/ceate2")
public String v2() {
//此处写业务逻辑代码
return “success”;
}
}
第三、进行测试
分别启动gateway,order进行访问:http://localhost:5001/order/create 测试,发现会根据所设权重进行路由。
第四,使用zookeeper config实现动态权重路由
到第三步完成以后,现在可以通过修改配置的如何根据现有的服务在线动态更新权重呢?使用zookeeper作为spring cloud的注册和配置中心,gateway模块和order模块配置监控配置的变化,如果想做动态灰度发布,增加后台在线配置管理界面,并在线修改gateway的配置,实现动态的灰度发布,而不用每次修改都要重新启动gateway。
spring:
cloud:
zookeeper:
enabled: true
connect-string: localhost:2181
config:
root: /config
enabled: true
watcher:
enabled: true
第五,使用zkui进行配置修改
使用ZKUI来可视化管理Zookeeper,登录ZKUI->import 选择对应文件导入即可。ZKUI安装使用请自行百度。
以上就是我使用spring cloud进行灰度发布的过程记录。
- END -
微服务中消息总线架构设计应用1

当一个O2O电商系统到达一定规模之后,就需要考虑系统的可扩展性、松耦合和组件化。一般采用的都是基于时下比较流行SpringCloud和Dubbo的分布式的微服务的架构模式,虽然模块间能够独立部署了,但是模块间的还是强依赖关系,每次改动都需要重新发版上线,产品迭代速度又快,使用分布式的消息总线设计就可以解决这些问题。
10分钟生成一张永久免费的SSL证书

SSL证书激活SSL协议,实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露,保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否是真实可靠。是网站正常的运行的必备。