基于Java服务网关实现全链路灰度

更新时间:2025-01-23 08:15:22

通过SAE提供的全链路灰度功能,您可以在不更改业务代码的情况下轻松实现全面的流量控制。本文主要介绍如何配置SAE全链路灰度,以Java服务网关为例,介绍如何实现端到端的灰度部署。

名词解释

  • 泳道:为相同版本应用定义的一套隔离环境。只有满足了流控路由规则的请求流量才会路由到对应泳道里的打标应用。一个应用可以属于多个泳道,一个泳道可以包含多个应用,应用和泳道是多对多的关系。

  • 泳道组:泳道的集合。泳道组的作用主要是为了区分不同团队或不同场景。

  • 基线环境:未打标的应用属于基线环境,是其他环境的兜底环境。

场景示例

本文通过模拟真实的调用链路为您演示全链路灰度功能。您无需修改任何业务代码,只需要给入口应用设置流量规则,该流量的标签会通过链路透传到下一个应用中。在每个应用的调用过程中,符合规则的流量会优先调用到对应的灰度应用,如果没有对应的灰度应用则会自动切换回基线应用。

各测试应用部署如下表所示:

测试应用:全链路灰度演示程序.zip,其中包含A、BC三个后端应用和GW(Java网关)服务。这三个后端应用(A、BC)既可以作为基线应用部署,也可以作为灰度应用部署。

应用

基线应用

灰度应用

灰度应用上的标签

应用

基线应用

灰度应用

灰度应用上的标签

A

sae-a

sae-a-a1

alicloud.service.tag:g1

sae-a-a2

alicloud.service.tag:g2

B

sae-b

sae-b-b2

alicloud.service.tag:g2

C

sae-c

sae-c-c1

alicloud.service.tag:g1

sae-c-c2

alicloud.service.tag:g2

Jave服务网关

sae-gw

流量分发示意图如下所示:

image

正常流量调用链路:

Java服务网关 -> 应用sae-a -> 应用sae-b -> 应用sae-c。

标签流量调用链路:

  • t=g1流量:Java服务网关 -> 应用sae-a-a1 -> 应用sae-b -> 应用sae-c-c1。

  • t=g2流量:Java服务网关 -> 应用sae-a-a2 -> 应用sae-b-b2 -> 应用sae-c-c2。

前提条件

已开通MSE微服务治理专业版或企业版。具体操作,请参见开通MSE微服务治理

使用限制

  • 全链路灰度仅适用于20231108日起新建的微服务应用。

  • 全链路灰度功能仅支持在新版控制台中使用。

  • 由于全链路灰度功能整合了标签路由功能(此处指的是MSE微服务治理的标签路由,与MSE云原生网关的标签路由无关),因此不推荐已经加入全链路灰度的应用配置金丝雀发布和标签路由规则。

    限制项与限制值

    限制项

    限制值

    备注

    Spring Cloud版本

    Spring Cloud Edgware及以上版本

    无。

    Dubbo版本

    2.5.3~2.7.8

    Dubbo 3.0及以上版本当前处于灰度中,如有场景需求,请提工单联系MSE技术支持。

    客户端类型

    • Resttemplate

    • Spring Cloud OpenFeign

    无。

    Java应用JDK版本

    目前支持JDK 6、7、8版本应用接入

    JDK 11版本当前处于灰度中,如有场景需求,请提工单联系MSE技术支持。

    负载均衡类型

    • Ribbon 2.0.x及以上版本

    • LoadBalancer 3.0.x及以上版本

    无。

    Spring Cloud Gateway版本

    Spring Cloud Gateway 2.1.0.RELEASE及以上版本

    无。

1. 部署基线应用并为其开通微服务治理功能

1.1 部署基线应用

创建sae-a、sae-b、sae-csae-gw(Java服务网关)四个应用。本文只介绍关键步骤,具体的操作步骤,请参见应用部署

  1. 登录SAE控制台,在左侧导航栏选择应用管理 > 应用列表,然后选择目标地域和目标命名空间,最后单击创建应用

    xxQdc1LHvq

  2. 应用基础信息向导页,在基础信息设置区域和容量设置区域配置相关信息。

    本示例中,选择通过上传代码包的形式部署sae-a、sae-bsae-c三个基线应用。
  3. 单击一键创建应用

    (可选)如果您需要配置高级设置,请单击下一步:高级设置前往高级设置向导页进行配置,配置完成后单击创建应用。高级配置的相关介绍,请参见应用部署

1.2 为基线应用开通微服务治理功能

重要

全链路灰度为MSE微服务治理专业版功能,链路中所有涉及应用(包括Java服务网关应用)均需开启微服务治理功能才能使用。

应用列表页面,单击应用名称,在左侧导航栏选择微服务治理 > 应用概览,单击开启微服务治理

说明
  • 应用开通的微服务治理功能的版本与MSE版本保持一致。

  • 如果您的应用未接入MSE商业版,请参见一键升级微服务治理功能文档一键升级微服务治理功能。

  • 开启过程应用的所有实例将触发一次重启,请在业务低峰期进行操作。

3JVeLD4e3p

开启过程需要1~2分钟,请您耐心等待。

2. 部署灰度应用

基于基线应用部署灰度应用:

  • 其中基线应用sae-a部署两个灰度应用,分别为sae-a-a1应用和sae-a-a2应用。

  • 其中基线应用sae-b部署一个灰度应用,为sae-b-b1。

  • 其中基线应用sae-c部署两个灰度应用,分别为sae-c-c1应用和sae-c-c2应用。

具体操作步骤,如下所示。

  1. 应用列表页面,单击基线应用右侧的CBDwvZhrJR图标,然后单击创建灰度应用

    说明

    如果您没有开启基线应用的微服务治理功能,则无法创建灰度应用。开启步骤,请参见为基线应用开通微服务治理功能

  2. 应用基本信息向导页,配置以下信息,然后单击下一步:高级设置

    1. 基础信息设置区域,设置灰度应用名称并选择以镜像或代码包的方式部署灰度应用。具体操作,请参见应用部署

      说明
      • 灰度应用的命名空间配置会自动继承基线应用的相关配置,因此您无需对其进行额外修改。

      • 应用部署方式也会自动继承基线应用的部署方式。在本示例中,您无需重新上传代码包进行部署,但在实际的生产环境中,请根据需要进行相应的配置调整。

    2. 灰度标签区域,设置标签。本示例灰度应用标签的配置,请参见场景示例

      kn0LtwJRWy

    3. 容量设置区域,配置单个实例的资源规格和实例数量。

  3. 高级设置向导页,根据实际需求配置相关功能。具体操作,请参见高级配置

  4. 单击创建应用

3. 创建泳道组及泳道

3.1 创建泳道组

  1. 灰度应用创建成功后,返回应用列表页面,在左侧导航栏选择微服务治理 > 全链路灰度,在全链路灰度页面选择目标命名空间,然后单击创建泳道组及泳道

    wCisG7DnY9

  2. 在弹出的创建泳道组面板,配置以下参数信息,然后单击确定

    1. 自定义泳道组名称

    2. 入口类型选择Java服务网关

    3. 泳道组流量入口选择已创建的Java服务网关应用(本示例中为sae-gw应用)。

    4. 泳道组涉及应用选择所有的基线应用。

    YcsWYRGZ1w

3.2 创建泳道

在整个泳道组内,支持创建基于按内容灰度的泳道和基于按比例灰度的泳道。然而,一旦第一个泳道创建成功,后续创建的泳道将无法更改灰度模式。

以下表格中的示例均为本文场景的配置示例。在实际的生产环境中,请根据具体需求进行相应的调整。
创建基于按内容灰度的泳道
创建基于按比例灰度的泳道

按照以下说明创建两个泳道。

  1. 全链路灰度页面,单击点击创建第一个分流泳道

    重要

    第一个泳道创建完成后,单击创建泳道来创建第二个泳道。

  2. 在弹出的创建泳道面板,配置以下参数信息,然后单击确定

    JtJgtKILOE

    配置项

    示例

    说明

    泳道名称

    • 第一个泳道名称:test-1

    • 第二个泳道名称:test-2

    自定义泳道名称,每条泳道名称不能重复。

    泳道标签

    • 第一个泳道的标签:g1

    • 第二个泳道的标签:g2

    在下拉列表中选择需要给请求打标的标签值,此标签为创建灰度应用时配置的标签。

    泳道状态

    两个泳道的状态均为开启。

    泳道状态是默认开启的。

    Path

    两个泳道的Path均为/A/a

    设置路由需要匹配的请求路径,若为空则代表匹配所有路径。

    输入请求路径后按Enter即可添加成功。

    灰度模式

    两个泳道的灰度模式均选择按内容灰度

    选择按内容灰度,此模式的具体说明,请参见控制台。

    灰度条件

    • 第一个泳道的灰度条件:

      • 以下条件同时满足

      • 参数类型:Header

      • 参数:t

      • 条件:==

      • 值:g1

    • 第二个泳道的灰度条件:

      • 以下条件同时满足

      • 参数类型:Header

      • 参数:t

      • 条件:==

      • 值:g2

    当请求满足所配置的灰度条件时,会被打上前面指定的泳道标签。

    • 支持以下两种筛选条件:

      • 以下条件同时满足:当请求都满足下面的条件时,才会被打上灰度标签。

      • 以下条件任意满足:当请求满足下面的任意一个条件时,都会被打上灰度标签。

    • 支持通过以下几个参数字段进行条件筛选:

      • 参数类型:支持HeaderCookieParameter

      • 参数:支持自定义。

      • 条件:支持==!=in、百分比、正则匹配和前缀匹配。

      • 值:支持自定义。

按照以下说明创建两个泳道。

  1. 全链路灰度页面,单击点击创建第一个分流泳道

    重要

    第一个泳道创建完成后,单击创建泳道来创建第二条泳道。

  2. 在弹出的创建泳道面板,配置以下参数信息,然后单击确定

    mPg0nzc8QL

    配置项

    示例

    说明

    泳道名称

    • 第一个泳道名称:test-1

    • 第二个泳道名称:test-2

    自定义泳道名称,每条泳道名称不能重复。

    泳道标签

    • 第一个泳道的标签:g1

    • 第二个泳道的标签:g2

    在下拉列表中选择需要给请求打标的标签值,此标签为创建灰度应用时配置的标签。

    泳道状态

    两个泳道的状态均为开启。

    泳道状态是默认开启的。

    Path

    两个泳道的Path均为/A/a

    设置路由需要匹配的请求路径,若为空则代表匹配所有路径。

    输入请求路径后按Enter即可添加成功。

    灰度模式

    两个泳道的灰度模式均选择按比例灰度

    选择按比例灰度,此模式的具体说明,请参见控制台。

    流量比例

    • 第一个泳道的流量比例:50%

    • 第二个泳道的流量比例:50%

    为所选路由或Path设置流量比例,在默认情况下,泳道内所有的路由或Path都将使用统一的流量比例。

4. 结果验证

4.1 灰度流量验证

按内容灰度流量验证
按比例灰度流量验证
  1. 使用curl命令测试基线流量:

    #测试命令
    curl 8.130.XX.XX/A/a
    # 测试结果
    A[192.168.XX.XX][config=base] -> B[192.168.XX.XX] -> C[192.168.XX.XX]
    说明

    命令中的 8.130.XX.XX是服务网关暴露的IP地址。

  2. 使用curl命令测试灰度流量:

    # 测试命令
    curl 8.130.XX.XX/A/a -H "tag: ${tag}" 
    
    # 测试结果
    A${tag}[192.168.XX.XX][config=base] -> B[192.168.XX.XX] -> C${tag}[192.168.XX.XX]
    说明

    例如:当Header的参数中带上tag: ${tag}时,会命中灰度标签,并向后透传。

使用curl命令测进行验证:

#测试命令
curl 8.130.XX.XX/A/a
# 测试结果
A[192.168.XX.XX][config=base] -> B[192.168.XX.XX] -> C[192.168.XX.XX]
# 测试结果
Agray[192.168.XX.XX][config=base] -> B[192.168.XX.XX] -> Cgray[192.168.XX.XX]
说明

命令中的 8.130.XX.XX是服务网关暴露的IP地址。

4.2 微服务治理可观测

SAE控制台全链路灰度页面,在泳道组及涉及的应用区域单击目标应用,在应用QPS监控区域,可查看对应泳道基线版本和灰度版本的流量情况。选择回放时间,展示所选时间对应的指标数据。

说明

您也可以在应用QPS监控区域单击流量详情,查看更为详细的信息。

r0kv7sfzUC

  • 本页导读 (1)
  • 名词解释
  • 场景示例
  • 前提条件
  • 使用限制
  • 1. 部署基线应用并为其开通微服务治理功能
  • 1.1 部署基线应用
  • 1.2 为基线应用开通微服务治理功能
  • 2. 部署灰度应用
  • 3. 创建泳道组及泳道
  • 3.1 创建泳道组
  • 3.2 创建泳道
  • 4. 结果验证
  • 4.1 灰度流量验证
  • 4.2 微服务治理可观测
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等