资讯专栏INFORMATION COLUMN

如何使用SpringCloud进行灰度发布

Jackwoo / 1015人阅读

摘要:灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。如何使用进行灰度发布呢将分一下四步第一,设置网关权重路由设置中提供了去实现根据分组设置权重进行路由,因此使用起来相对比较简单,有兴趣的可以阅读源码。

灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行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进行灰度发布的过程记录。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72300.html

相关文章

  • 这款分布式配置中心,会是微服务的降维打击利器吗?

    摘要:于是,市面上出现了分布式的配置中心。为什么呢因为要结合分布式配置中心微服务,才能真正实现我们所理解的。所谓灰度发布,是说一个微服务集群里面,比如有个订单系统,做了一些配置上的更新。数人云分布式统一配置中心数人云分布式统一配置中心,取名。 本文来自1月18日数人云资深工程师在IT大咖说平台的线上直播分享。 今天主要探讨这几方面: 一、配置中心的定位二、云化的微服务对于配置中心的要求三、微...

    zhaofeihao 评论0 收藏0
  • 微服务化的基石——持续集成

    摘要:一持续集成对于微服务的意义拆之前要先解决合的问题在很多微服务化的文章中,很少会把持续集成放在第一篇,因为大多数的文章都会将如何拆的问题,例如拆的粒度,拆的时机,拆的方式。二持续集成就是不断的尝试在一起集成就是在一起。 此文已由作者刘超授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 一、持续集成对于微服务的意义:拆之前要先解决合的问题 在很多微服务化的文章中,很...

    Yangyang 评论0 收藏0
  • 微服务架构:如何用十步解耦你的系统?

    摘要:导言耦合性,是对模块间关联程度的度量。模块间的耦合度是指模块之间的依赖关系,包括控制关系调用关系数据传递关系。 导言: 耦合性,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。软件设计中通常用耦合度和内聚...

    willin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<