本文介绍如何通过ALB Ingress网关,在不需要修改您的任何业务代码的情况下,为您的SAE应用实现全链路流量控制。

背景信息

微服务架构下,有些开发需求会导致微服务调用链路上的多个微服务同时发生改动,通常每个微服务都会有灰度环境或分组来接收灰度流量。此时希望进入上游灰度环境的流量,也能进入下游灰度的环境中,确保1个请求始终在灰度环境中传递,即使这个调用链路上有一些微服务没有灰度环境。通过SAE提供的全链路灰度能力,能够在不需要修改任何您的业务代码的情况下,轻松实现上述能力。

准备工作

本文通过示例为您演示ALB网关全链路灰度功能。假设应用的架构由ALB网关以及后端的微服务架构(Spring Cloud)组成,后端调用链路有3个微服务:购物车(A)、交易中心(B)、库存中心(C),可以通过客户端或HTML来访问后端服务,这些服务之间通过Nacos注册中心实现服务发现。

部署SAE Demo应用

  1. 下载Demo
  2. 部署主干链路应用。
    部署主干链路应用(A、B、C)。具体操作,请参见将Spring Cloud应用托管到SAE
  3. 部署灰度链路应用(A-gray、B-gray、C-gray),在启动命令中添加启动参数-Dalicloud.service.tag=gray用于区别主干链路应用。
说明 部署时,如果需要使用独立的注册中心,需要添加启动参数-Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false

部署Ingress网关路由

应用可以使用相同域名,通过不同路径流量转发实现请求路由分发。具体操作,请参见为应用配置网关路由(ALB)为应用配置网关路由(CLB)

为流量配置特定Header实现全链路灰度

有些客户端无法改写域名,希望能在访问www.base.com时,通过传入不同的Header来路由到灰度环境。例如下图中,通过添加x-mse-tag:gray这个Header,来访问灰度(gray)环境。dg_microservice_end_to_end_canary_release_by_allowing_automatic_dyeing_of_traffic_that_flows_through_nodes_via_alb_Ingress_gateway
结果验证。
  • 访问www.base.com路由到基线(base)环境。
    • 执行以下curl命令:
      curl -H"Host:www.base.com" http://106.14.XX.XX/a
    • 执行结果:
      A[172.18.XX.XX] -> B[172.18.XX.XX] -> C[172.18.XX.XX]%
  • 如果入口应用A没有灰度(gray)环境,访问到A的基线(base)环境,又需要在A→B的时候进入灰度环境,则可以通过增加一个特殊的Header:x-mse-tag来实现,Header的值是流量走向的环境的标签,例如gray
    • 执行以下curl命令:
      curl -H"Host:www.base.com"  -H"x-mse-tag:gray" http://106.14.XX.XX/a
    • 执行结果:
      A[172.18.XX.XX] -> Bgray[172.18.XX.XX] -> Cgray[172.18.XX.XX]%

      可以看到,首先进入了A的基线(base)环境,但是A→B的时候又重新回到了灰度(gray)环境。

    说明 您在ALB网关中配置好规则,当某个应用需要灰度发布时,只需要在灰度环境中部署好应用,灰度流量会进入到灰度节点中。如果验证无误,则将灰度的镜像发布到基线环境中;如果一次变更中有多个应用需要灰度发布,则把他们都加入到灰度环境中即可。