1. 蓝绿发布基础概念
1.1 什么是蓝绿发布
蓝绿发布(Blue-Green Deployment)是一种零停机的应用发布策略,通过维护两套完全独立的生产环境(蓝环境与绿环境),实现流量的平滑切换与快速回滚。在任意时刻,只有一套环境承载全部生产流量,另一套环境保持空闲或用于部署新版本。
核心定义:蓝绿发布 = 两套独立环境 + 流量瞬间切换 + 快速回滚能力。它不是灰度发布,而是全量切换的原子操作。
1.2 蓝绿发布的核心思想
蓝绿发布的设计哲学围绕三个关键原则展开:
- 环境隔离:蓝、绿两套环境在基础设施层面完全独立,包括计算资源、网络配置、数据库连接等,避免相互干扰。
- 流量路由:通过负载均衡器或网关层实现流量的瞬间切换,切换粒度可以是全量(100% 流量)或按比例(结合灰度策略)。
- 快速回滚:一旦新版本出现故障,只需将流量切回旧环境即可完成回滚,回滚时间通常在秒级,无需重新部署。
1.3 蓝绿发布与传统发布的区别
传统发布(如滚动更新、停机发布)与蓝绿发布在多个维度存在本质差异。下表从关键指标维度进行对比:
| 对比维度 | 蓝绿发布 | 滚动更新 | 停机发布 |
|---|---|---|---|
| 停机时间 | 零停机(切换瞬间) | 接近零停机(逐实例替换) | 分钟级停机 |
| 回滚速度 | 秒级(流量切回) | 分钟级(逐实例回滚) | 分钟级(重新部署旧版本) |
| 环境成本 | 高(需两套完整环境) | 低(单套环境) | 低(单套环境) |
| 数据库兼容 | 需向前/向后兼容 | 需向后兼容 | 无特殊要求 |
| 流量控制粒度 | 全量切换 / 按比例 | 逐实例(Pod/VM) | 全量一次性 |
| 测试验证 | 可在生产环境预验证 | 需在预发环境验证 | 需在预发环境验证 |
| 适用场景 | 核心服务、高可用要求 | 无状态服务、资源受限 | 低频维护、非关键系统 |
SRE 视角:蓝绿发布并非银弹。当数据库 schema 变更无法做到向前兼容时,蓝绿切换可能导致数据不一致。此时需要配合 并行运行 或 扩展的蓝绿模式(如蓝绿数据库代理)来解决。
1.4 蓝绿发布的关键组件与流程
一个标准的蓝绿发布流程包含以下核心组件与步骤:
- 环境准备:部署两套独立环境(蓝/绿),确保网络、存储、配置完全隔离。
- 版本部署:将新版本部署到空闲环境(如绿环境),执行自动化测试与健康检查。
- 流量切换:通过负载均衡器或 DNS 将流量从蓝环境切换到绿环境。
- 验证与监控:在绿环境上运行冒烟测试,监控错误率、延迟、吞吐量等黄金指标。
- 回滚决策:若新版本异常,立即将流量切回蓝环境;若正常,保留蓝环境作为回滚备份。
常见误区:蓝绿发布不等于灰度发布。蓝绿发布是全量切换,灰度发布是逐步放量。实践中常将两者结合:先在绿环境进行内部灰度验证,再执行蓝绿全量切换。