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


    引言

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

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

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

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

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

    • 问题一:发布时服务有上下游依赖关系;本服务的发布,依赖其他服务,要别的服务先发布才行

    • 问题二:发布时需要需要小流量灰度验证

    • 问题三:发布时支持按批次发布,提高发布效率

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

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

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

    一、常见发布方式梳理

    发布方式基本原理常见实现
    灰度发布小流量验证方式一:金丝雀发布,发布的时候先拉入一台验证,正常后发布剩余节点
    方式二:流量染色灰度,通过对请求流量染色选择到特定的节点实现灰度
    方式三:独立灰度环境,上线前现在该环境验证
    滚动发布分批次发布在灰度验证的基础上,通过发布系统选择发布批次
    方式一:按节点比例分批次发布
    方式二:按节点数量分批发布
    蓝绿发布流量调度实现线上同时蓝绿两个应用组提供服务
    步骤一:新版本发布时先将流量从蓝色集群A调度到绿色集群B,绿色集群B独立承担流量
    步骤二:在蓝色集群A发布新版本,从小到大逐步引流到蓝色集群
    步骤三:蓝色验证正常均衡蓝绿两套流量,异常流量调度走即可
    红黑发布弹性扩缩容、流量调度线上只运行一个红色集群
    步骤一:发布时先扩容黑色集群,该集群发布新版本
    步骤二:在黑色集群发布新版本,按比例引流验证
    步骤三:一切正常后,流量调度到黑色集群,红色集群下线

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

    • 颜色的划分不重要,红黑发布时另外一种蓝绿发布

    • 灰度发布多种形式,金丝雀发布、染色区分、物理独立灰度环境等

    二、蓝绿发布架构与流程

    1、蓝绿架构图示

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

    9ceaccd13af490ebbd91499e2d31b186.png


    2.蓝绿环境命名约定
    • 部署需要发布新版本为「蓝色环境」

    • 线上运行的稳定版本为「绿色环境」

    3.流量调度发布流程
    • 七层负载默认按照方法级将进入流量染色染成绿色

    • 系统发布时先经过蓝色环境,当然服务不需要则跳过蓝绿发布

    • 应用上下游服务在蓝色环境部署完成部署

    • 从七层负载按照引蓝色流量验证,方法级别1%流量

    • 蓝色上下游服务验证不符合预期,从七层负载处将蓝色流量染色剔除,还原为绿色染色,此时流量切换到绿色环境

    • 蓝色环境完成验证符合预期,全部流量染成蓝色,流量调度到了蓝色环境

    • 此时绿色环境已无流量,新版本在绿色环境完成发布

    • 通过七层负载出递进式引流到绿色环境【1%~50%】

    • 最后呈现的流量分布,蓝绿流量各50%

    4.流量调度发布图示

    2f29fff0de3be8433633fa9627b55613.png


    三、优先组件改造点梳理

    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、链路透传相关点
    • 网关将蓝绿染色标透传

    • 链路监控建蓝绿染色标可观测显示


  • 相关阅读:
    高阶python | 装饰器
    Antlr4 快速入门 - 编写语法解析器
    与缓存相关的状态码
    spring cloud alibaba之nacos
    工业树莓派结合USB摄像头实现远程网络监控
    springCloud笔记(狂神)
    2022年湖北七大员发证单位是哪里?甘建二告诉你
    集群机器人协同作战关键技术研究综述(中国电子科学研究院-2022)
    双种群协同进化的混合NSGA-II与MOPSO多目标算法(MATLAB)
    Linux快速入门
  • 原文地址:https://blog.csdn.net/gaoliang1719/article/details/127723947