searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

全链路灰度技术原理介绍

2023-12-06 07:50:33
14
0

单体应用下的服务发布

在单体服务架构中,服务一般划分为前端、接入网关、后端逻辑层、数据存储层;其中逻辑层一般只包括少量服务,业务的迭代也主要集中在这一层。

单体应用发布时一般在网关处做流量控制,基于蓝绿或者金丝雀等发布策略实现应用的发布,

在蓝绿发布中,有两个环境同时存在:蓝色环境和绿色环境,它们分别代表了旧版本和新版本的应用程序

  1. 蓝色环境(Blue Environment): 蓝色环境是当前稳定版本的应用程序所在的环境。在此环境中,用户流量正常运行,并且应用程序稳定运行。

  2. 绿色环境(Green Environment): 绿色环境是新版本的应用程序所在的环境。在绿色环境中,新版本的应用程序已经部署并准备好接受流量。然而,在初始阶段,绿色环境中的应用程序不会接收任何用户流量。

  3. 切换流量: 在蓝绿发布的核心部分,将流量从蓝色环境切换到绿色环境。这通过在接入网关的配置来实现。切换后,用户流量开始流向绿色环境,他们开始使用新版本的应用程序。

  4. 验证和测试: 在绿色环境中,您可以进行必要的验证和测试,确保新版本的应用程序在生产环境中正常工作。这可以包括性能测试、安全性测试和用户体验测试。

  5. 回滚和切换: 如果在绿色环境中发现问题,您可以随时切换回蓝色环境,恢复到之前的稳定版本。这种能力使得您能够在出现问题时快速回滚,降低风险。

  6. 平滑过渡: 一旦在绿色环境中确认新版本没有问题,您可以逐步增加绿色环境的流量份额,同时减少蓝色环境的流量。这样,用户会逐渐过渡到新版本,而不会在短时间内面临大规模的变化。

  7. 完全切换: 最终,当绿色环境的流量份额增加到足够高的程度,且您对新版本的可靠性和性能充满信心时,您可以完全切换到绿色环境,停用蓝色环境。

除了蓝绿发布之外,还有金丝雀发布策略,通过选择小部分用户将流量切换到新的版本,测试新版本的稳定性、性能和用户体验。这种策略主要包括以下步骤:

  1. 选择目标用户群: 金丝雀发布的第一步是选择一小部分用户或用户群体作为目标。这可以是特定的用户组、少量特权用户或者随机选择的一小部分用户。

  2. 新版本引入: 新版本的应用程序或功能会在这个目标用户群中进行部署和启用。这些用户会开始使用新版本,而其他用户仍然使用旧版本。

  3. 监测和评估: 在金丝雀发布期间,您应该密切监测新版本的性能、稳定性和用户体验。这可以包括指标如响应时间、错误率、页面加载时间等。

  4. 逐步扩展: 如果新版本在目标用户群中表现良好,您可以逐步扩大金丝雀发布的范围,将更多的用户引入新版本。这可以通过逐步增加新版本的用户比例来实现。

  5. 回滚策略: 如果在金丝雀发布过程中发现问题,以迅速将受影响的用户切换回旧版本。这是确保系统稳定性的重要一环。

  6. 用户反馈: 您可以收集来自金丝雀用户的反馈,了解他们对新版本的感受。这些反馈可以帮助您做出调整和改进。

  7. 全面发布或回滚: 最终,如果新版本在金丝雀发布阶段表现良好,您可以考虑将新版本推广到所有用户。或者,如果问题无法解决,您可以回滚到旧版本。

 

微服务架构下的灰度发布

 

 

微服务架构下,单体服务被拆分为多个微服务,一个版本迭代中可能对多个服务同时发布,此时的灰度策略跟单体服务有几个不同:

1. 除了需要在网关处做灰度策略,还需要在微服务调用之间实现灰度

2. 微服务之间的调用灰度实现方式问题,可以基于注册中心+服务发现SDK方式,也可以基于代理(中心代理或者sidecar代理)方式,本文以代理方式为例说明

3. 微服务调用链路的灰度方式要统一,主要是统一按照相同的标识做灰度策略,比如特定的请求头部

 

组件说明

1. 服务治理控制面用于实现灰度策略配置管理、下发

2. 接入网关负责流量接入,并且将请求分发到第一跳微服务;接收控制面下发的策略

3. 中心网关负责微服务内部调用的转发和灰度策略执行;接收控制面下发的策略

 

要实现微服务架构下的全链路灰度,我们首先考虑全链路要基于相同的灰度标识做流量策略,比如可以基于同一个请求头部

1. 在接入网关层,基于请求头部配置路由策略到第一跳微服务

2. 在微服务内部,同样基于请求头部配置路由策略,策略执行是在中心网关处

3. 调用链路内需要透传路由标识,该功能可以基于链路追踪实现;一般情况下链路追踪的实现都要求在链路内透传请求的traceid,我们基于链路追踪提供的机制,同时透传路由标识,这样可以在微服务之间的每一跳都使用相同的标识进行路由控制

 

<button class="cursor-pointer absolute right-6 bottom-[124px] md:bottom-[180px] lg:bottom-[120px] z-10 rounded-full border border-gray-200 bg-gray-50 text-gray-600 dark:border-white/10 dark:bg-white/10 dark:text-gray-200"></button>
0条评论
0 / 1000