前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >No.177# 蓝绿发布提效方案梳理

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

作者头像
瓜农老梁
发布2022-12-03 09:27:41
4680
发布2022-12-03 09:27:41
举报
文章被收录于专栏:瓜农老梁瓜农老梁

引言

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

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

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

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

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

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

而问题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、链路透传相关点
  • 网关将蓝绿染色标透传
  • 链路监控建蓝绿染色标可观测显示

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 瓜农老梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、蓝绿架构图示
  • 2.蓝绿环境命名约定
  • 3.流量调度发布流程
  • 4.流量调度发布图示
  • 1、发布系统
  • 2、RPC框架
  • 3、消息组件
  • 4、配置中心
  • 5、七层负载
  • 1、分布式调度框架
  • 2、数据库组件染色
  • 3、数据库同步组件
  • 4、链路透传相关点
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档