引言
开发测试环境通常我们使用染色来区分不同流量,进入不同的开发测试联调分支组成的染色场。
由于大量的项目、分支去满足不同的需求,避免不同的分支之间互相影响调试、测试,需要不同的染色予以区分;每次的染色调试都是一个不同的染色标。
在生产环境发布时,我们通常有两个版本,线上运行的版本、待发布的版本。
也就是在生产环境区分流量只需要两个颜色即可,蓝绿发布通过两个染色流量来区分线上运行版本和待发布版本。
常见生产发布存在什么诉求呢?
- 问题一:发布时服务有上下游依赖关系;本服务的发布,依赖其他服务,要别的服务先发布才行
- 问题二:发布时需要需要小流量灰度验证
- 问题三:发布时支持按批次发布,提高发布效率
而问题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、链路透传相关点
- 网关将蓝绿染色标透传
- 链路监控建蓝绿染色标可观测显示