Skip to content

灰度发布

灰度发布存在很多不同的应用场景,包括解决版本兼容性问题、A/B Test、平滑升级等。本指南将展示如何在 体质指数 应用中使用灰度发布能力。

前言

在您进一步阅读之前,请确保您已阅读了体质指数微服务应用开发,并已成功运行体质指数微服务。

启用

  • 首先需要进行灰度发布策略设计。 在这个实例中,将体重 >= 60 的请求转发到 0.0.2 版本, 将体重 <60 的请求转发到 0.0.1 版本。 灰度发布策略一般使用请求头进行标记, 为了实现这个目的,使用 Java Chassis的Context Mapper机制,将符合请求特征的请求设置不一样的 header。 下面的配置会根据请求特性,设置 x-gray = 1, 或者 x-gray= 0 。

注意:流量特征治理的匹配规则都是 String - String 的键值对。使用 yaml 文件配置的时候,如果涉及数字和特殊字符,需要使用引号,否则会解析为其他类型出现错误。

servicecomb:
  matchGroup:
    bmi-operation: |
      matches:
        - apiPath:
            exact: "/bmi"
    bmi-operation-heavy: |
      matches:
        - apiPath:
            exact: "/bmi"
          queries:
            weight:
              compare: ">=60"
    bmi-operation-thin: |
      matches:
        - apiPath:
            exact: "/bmi"
          queries:
            weight:
              compare: "<60"
  mapper:
    bmi-operation-heavy: |
      target:
        x-gray: "1"
    bmi-operation-thin: |
      target:
        x-gray: "0"
  • 体质指数界面application.yml 文件中添加灰度发布策略:
servicecomb:
  router:
    type: router
  globalRouteRule: |
    - precedence: 2
      match:
        headers:
          x-gray: 
            exact: "1"
      route:
        - weight: 100
          tags:
            version: 0.0.2
    - precedence: 1
      match:
        headers:
          x-gray: 
            exact: "0"
      route:
        - weight: 100
          tags:
            version: 0.0.1

注意:路由控制是在消费者方。

验证

体质指数计算器 微服务进行水平扩展,使其运行实例数为2,即新增一个运行实例。 该实例的版本号是 0.0.2.

mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dservicecomb.rest.address=0.0.0.0:7779 -Dservicecomb.service.version=0.0.2"
  • 访问 http://localhost:8889 ,在身高和体重栏处输入正数,并点击 Submit 按钮。

  • 如果体重大于等于60, 请求始终转发到一个0.0.2版本实例;体重小于60, 请求会转发到0.0.1版本的实例。

灰度发布结果