本文通过示例演示如何在SAE上实现全链路灰度发布, 可以在不需要修改您的任何业务代码的情况下,实现全链路流量控制。
准备工作
本文通过示例为您演示ALB网关全链路灰度功能。假设应用的架构由ALB网关以及后端的微服务架构(Spring Cloud)组成,后端调用链路有3个微服务:购物车(A)、交易中心(B)、库存中心(C),可以通过客户端或HTML来访问后端服务,这些服务之间通过Nacos注册中心实现服务发现。
部署SAE Demo应用
下载Demo。
部署主干链路应用。
部署主干链路应用(A、B、C)。具体操作,请参见将Spring Cloud应用托管到SAE。
部署灰度链路应用(A-gray、B-gray、C-gray),在启动命令中添加启动参数
-Dalicloud.service.tag=gray
用于区别主干链路应用。
部署时,如果需要使用独立的注册中心,需要添加启动参数-Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false
。
部署Spring Cloud Gateway或Zuul网关
应用可以使用相同域名,通过不同路径流量转发实现请求路由分发。具体操作,请参见为应用配置网关路由(CLB)。
为流量配置特定Header实现全链路灰度
有些客户端无法改写域名,希望能在访问www.base.com
时,通过传入不同的Header来路由到灰度环境。例如下图中,通过添加x-mse-tag:gray
这个Header,来访问灰度(gray)环境。
x-mse-tag
这个Header仅适用于本文描述的场景。请勿在其他场景中,尤其是在应用的灰度规则中使用该Header。
结果验证。
访问
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]
如果想访问灰度环境,只需要在请求中增加一个Header:
x-mse-tag:gray
。执行以下curl命令:
curl -H"Host:www.base.com" -H"x-mse-tag:gray" http://106.14.XX.XX/a
执行结果:
Agray[172.18.XX.XX] -> Bgray[172.18.XX.XX] -> Cgray[172.18.XX.XX]%
可以看到CLB Ingress根据这个Header直接路由到了A的灰度(gray)环境中。