400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

蓝绿发布实践回顾

0缘起

随着蓝绿发布项目落地进入试运行,也对蓝绿发布项目做个简要回顾。

早在2022年初的时候效能、交易和中间件的同学就如何提高发布效率做过讨论,蓝绿发布当时也被提出。由于彼时有更重要的事情去落地,蓝绿发布也被搁置未能成行。

随着染色环境项目的落地,推进接入工作的基本完成。测试开发环境存在的众多问题(多套环境、运维问题、环境冲突、沟通问题)基本得到根治。

测试环境得到根治的同时,生产环境自然就成为接下来的重点。大版本发布时长达7个小时,的确是大家的痛点,我们也希望从根本上提高发布效率。本文主要内容有:

1应用发布诉求

微服务应用发布时有以下诉求:

其中上下游依赖问题最为突出,为解决依赖问题需提前填写发布计划,将应用组织成梯队来规避上下游依赖问题。

由此可见,应用发布的痛点聚焦到了破除上下游上,自然解决方案也以此为中心。

2发布方案对比

发布方式

基本原理

常见实现

灰度发布

小流量验证

方式一:金丝雀发布,发布时先拉入一台验证,正常后发布剩余节点  
方式二:流量染色灰度,通过对请求流量染色选择到特定的节点实现灰度  
方式三:独立灰度环境,上线前先在该环境验证(例如:小得物环境)

滚动发布

分批次发布

在灰度验证的基础上,通过发布系统选择发布批次  
方式一:按节点比例分批发布  
方式二:按节点数量分批发布

蓝绿发布

流量调度实现

线上同时蓝绿两个应用组提供服务  
步骤一:新版本发布时先将流量从蓝色集群A调度到绿色集群B,绿色集群B独立承担流量
步骤二:在蓝色集群A发布新版本,从小到大逐步引流到蓝色集群  
步骤三:蓝色验证正常均衡蓝绿两套流量,异常流量调度走即可

红黑发布

弹性扩缩容、流量调度

线上只运行一个红色集群  
步骤一:发布时先扩容黑色集群,该集群发布新版本  
步骤二:在黑色集群发布新版本,按比例引流验证  
步骤三:一切正常后,流量调度到黑色集群,红色集群下线

熟悉中间件运维的同学怎么运维才是安全的呢?先摘流、运维变更、再逐步引流。

这种方式应用到应用发布系统,即为蓝绿发布。

在生产环境发布时,我们通常有两个版本,线上运行的版本、待发布的版本。

也就是在生产环境区分流量只需要两个颜色即可,蓝绿发布通过两个染色流量来区分线上运行版本和待发布版本。

此外,希望在大版本发布与日常迭代中都能使用蓝绿发布来提效,作为核心应用的选择发布方式。

3蓝绿发布流程​

在发布系统中集成蓝绿发布,与普通发布有何区别,蓝绿发布流程是怎么样的呢?

3.1   蓝绿架构图示

线上的资源容量需能够容纳业务增量的2倍以上,将线上的运行的服务节点资源一分为二,分成蓝色环境和绿色环境。

3.2    蓝绿发布流程

为了避免混淆将蓝绿环境固定,先部署待发布新版本的环境固定为「蓝色环境」,后部署待发布新版本的环境固定为「绿色环境」,应用发布先发「蓝色环境」,后发「绿色环境」。

发布流程梳理如下:

纵观整个发布流程,需要众多部门和组件的联动配合才能完成,下到容器、上到网关,中间贯穿众多核心中间件。

4蓝绿流量调度​

在设计流量调度时分为全局流量调度与局部流量调度,分别应对不同的发布场景。

全局流量调度(单通道发布):所有蓝绿环境的应用都参与流量调度,适用一次发布上百个应用场景、上下游关系难以梳理。

局部流量调度(多通道发布):适用于已知应用依赖发布、日常迭代。

在已知应用依赖的情况下,通过局部流量调度即可满足需求。

4.1   全局流量调度

上面提到「全局流量单通道」在蓝绿环境的服务均会参与调度,流量调度变更涉及全部在蓝绿环境的应用,下面以流量全部调度蓝色环境为例观测各个组件的行为。

伴随着绿色环境被摘流,流量全部在蓝色环境运行。

4.2   局部流量调度

「局部流量多通道」的流量调度比例,由各通道进行自行管控。如下图所示:

  • 局部流量多通道3 :蓝绿切流比例 70%:30%
  • 需要注意的是

    4.3   调度实现原理

    无论是「全局流量单通道」调度还是「局部流量多通道」调度,实现原理都是一样的,下面以RPC调用为例说明,如下图所示。

    工作原理简述如下:

    从流量调度和实现原理来看,流量的调度会与RPC、消费组、分布式调度、发布系统、配置中心、注册中心一起联动。需要把存在的流量出口(例如:网关、消息、分布式调度等)流量管控起来。

    5组件能力支持

    上文中提到流量的调度涉及到众多组件联动与协同,那各个组件需要提供哪些能力呢?下面介绍下这些组件需提供的能力。

    5.1   容器逻辑分组

    蓝绿发布离不开容器的逻辑分组,应用使用蓝绿发布之前,需要将应用的机器实例分布到蓝绿环境中去。容器需要具备的能力如下:

    如下图所示,应用通过容器分组,分布到蓝绿集群。

    5.2   发布系统支持

    发布系统是整个蓝绿发布的入口,用户直接感受的系统。对下与容器交互、对上与元数据中心交互。

    如下图所示,将整个蓝绿发布形成流水线。

    5.3   统一框架支持

    统一框架包含流量调度SDK、与注册中心和配置中心交互,联动整个RPC、Feign/HTTP流量调度。

    节点选择示意图如下:

    如下图所示,框架会将蓝绿环境信息与权重在注册中心注册。

    5.4   消息组件支持

    消息组件根据流量调度SDK的回调,需要将消费流量摘除和激活。

    逻辑实现约定如下:

    蓝绿两个环境均有流量:

    只有绿色环境有流量时:

    只有蓝色环境有流量时:

    如下图所示,蓝绿消费组消费各自对应的消息:

    此外,DTS等组件同步的消息会被「无前缀标记的消费组(例如:melon-consumer)」接管,能够在100%流量调度时摘除消费流量。

    5.5   配置中心支持

    配置中心提供能的能力,主要蓝绿环境的节点选择与其对应的配置集,涉及到SDK和配置中心集群的改动。

    如下图所示,配置中心提供蓝绿不同的版本的配置集。

    5.6   网关调用支持

    如下图所示,流量全部切换到蓝色集群后,网关向下游分发的流量染蓝。

    5.7   分布式调度支持

    如下图所示,在调度时选择对应蓝绿环境的节点。

    5.8    蓝绿监控看板

    蓝绿发布进行流量调度时,需要有一个可观测面板观察HTTP、DUBBO、MQ等的流量比例以及是否被摘流。

    如下图看板所示HTTP流量,蓝色流量占比10%,绿色流量占比90%。

    6后记

    蓝绿发布通过摘流、变更、再引流,因在无流量的情况下发布,相对比较安全。但是基于公司实际情况,有些场景的流量是无法摘除的。

    此外,还有一些注意事项在使用蓝绿发布时需警惕。


    网站题目:蓝绿发布实践回顾
    URL链接:http://www.bluegullmedia.com/article/dhgdegd.html

    其他资讯

    让你的专属顾问为你服务

    0.0408s