No.177# 蓝绿发布提效方案梳理

2022-12-03 09:27:41 浏览数 (1)

引言

开发测试环境通常我们使用染色来区分不同流量,进入不同的开发测试联调分支组成的染色场。

由于大量的项目、分支去满足不同的需求,避免不同的分支之间互相影响调试、测试,需要不同的染色予以区分;每次的染色调试都是一个不同的染色标。

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

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

常见生产发布存在什么诉求呢?

  • 问题一:发布时服务有上下游依赖关系;本服务的发布,依赖其他服务,要别的服务先发布才行
  • 问题二:发布时需要需要小流量灰度验证
  • 问题三:发布时支持按批次发布,提高发布效率

而问题1往往最为突出,很多发系统依赖人工填写发布计划来解决。

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

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

一、常见发布方式梳理

发布方式

基本原理

常见实现

灰度发布

小流量验证

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

滚动发布

分批次发布

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

蓝绿发布

流量调度实现

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

红黑发布

弹性扩缩容、流量调度

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

小结:下面对这些发布模式进行简要提点。

  • 颜色的划分不重要,红黑发布时另外一种蓝绿发布
  • 灰度发布多种形式,金丝雀发布、染色区分、物理独立灰度环境等

二、蓝绿发布架构与流程

1、蓝绿架构图示

在业务基本容器化后,扩缩容变得容易,而线上的资源容量假设能够容纳业务增量的2倍以上,将线上的运行的服务一分为二,分成蓝色环境和绿色环境。

2.蓝绿环境命名约定
  • 部署需要发布新版本为「蓝色环境」
  • 线上运行的稳定版本为「绿色环境」
3.流量调度发布流程
  • 七层负载默认按照方法级将进入流量染色染成绿色
  • 系统发布时先经过蓝色环境,当然服务不需要则跳过蓝绿发布
  • 应用上下游服务在蓝色环境部署完成部署
  • 从七层负载按照引蓝色流量验证,方法级别1%流量
  • 蓝色上下游服务验证不符合预期,从七层负载处将蓝色流量染色剔除,还原为绿色染色,此时流量切换到绿色环境
  • 蓝色环境完成验证符合预期,全部流量染成蓝色,流量调度到了蓝色环境
  • 此时绿色环境已无流量,新版本在绿色环境完成发布
  • 通过七层负载出递进式引流到绿色环境【1%~50%】
  • 最后呈现的流量分布,蓝绿流量各50%
4.流量调度发布图示

三、优先组件改造点梳理

1、发布系统
  • 发布系统支持蓝绿发布通道,支持将节点在蓝绿环境分配
  • 发布系统作为入口与其他系统联动简化操作
  • 使用蓝绿发布的应用需要保持绿色环境有应用部署
2、RPC框架
  • 优先根据链路蓝绿标,选择本环境节点调用
  • 蓝色环境没有节点,选择绿色环境节点
  • 绿色环境没有节点,选择不带颜色节点
  • 无染色流量优先选择绿色环境节点
3、消息组件
  • 蓝绿流量均发送到统一主题
  • 在消息属性标识x-infr-flowtype=CE_BLUE和x-infr-flowtype=CE_GREEN
  • 蓝色环境启动,改写元消费组,例如__BLUE-Test-Consumer订阅原主题
  • 绿色环境使用默认消费组Test-Consumer
  • 蓝色环境只消费属性标识为CE_BLUE的流量
  • 绿色环境消费属性标识为CE_GREEN的流量
  • 绿色环境作为兜底同时消费属性无蓝绿标识的流量
  • 绿色流量调度到蓝色环境后需要等待绿色环境积压消费结束
4、配置中心
  • 配置中心提供蓝色配置集,原配置集作为绿色配置集
  • 蓝色环境应用选择蓝色配置集
  • 绿色环境应用选择绿色配置集
5、七层负载
  • 支持按照方法级别透传染色标识
  • 支持按照流量梯度流量切换

四、其他组件改造点梳理

1、分布式调度框架
  • 通过namespace区分蓝绿环境调度
  • 需要根据场景是否启用,避免两个环境同时调度对业务影响
  • 先暂缓实施,根据实际需要再考虑实施
2、数据库组件染色
  • 数据库增加染色字段区分蓝绿
  • 数据库组件根据链路标记更新染色字段
  • 查询时在流量中赋值染色标记
3、数据库同步组件
  • 根据表染色字段,同步时在发送消息时赋上染色属性
4、链路透传相关点
  • 网关将蓝绿染色标透传
  • 链路监控建蓝绿染色标可观测显示

0 人点赞