蓝绿部署(Blue-Green Deployment)
说明
蓝绿部署(Blue-Green Deployment)
是一种服务端应用软件发布模式,可将用户流量从先前版本的应用或微服务逐渐转移到几乎相同的新版本中(两者均保持在生产环境中运行)。蓝绿部署的起源可以参考:https://gitlab.com/-/snippets/1846041。
当前版本的生产环境叫做绿环境
,将要发布版本的生产环境叫做蓝环境
。首先要部署蓝环境
,并在部署完毕后进行冒烟测试
。测试成功后将流量切换到蓝环境
,一旦流量从绿环境
完全转移到蓝环境
。为了保持能够快速回滚,绿环境
会留有一段时间的存活期,以便快速回滚至旧版本。
蓝绿部署过程
- 初始化
蓝环境
。 - 部署新版本应用至
蓝环境
,等待蓝环境
为就绪状态。 - 通过临时路由访问
蓝环境
做测试。 蓝环境
通过测试后为就绪状态,准备替代绿环境
。- 将
绿环境
的流量全部切换到蓝环境
。 绿环境
请求为 0 时表明发布成功。- 如
蓝环境
产生故障或者错误,则将流量切换回绿环境
。此时保留蓝环境
作为故障现场进行进一步分析。 - 如
绿环境
经过一段时间运行正常,则通过回收蓝环境
资源,蓝环境
成为新的绿环境
,等待下一次蓝绿部署
。
使用技巧和注意事项
- 由于
DNS
的TTL
设置不可靠,故不能采用更新DNS
的方式切换环境。 蓝绿部署
需要创建 1:1 相同的资源,在用户流量切换期间和等待期间存在资源浪费。- 如果出现回滚至旧版本(
蓝环境
),下线的绿环境
上会产生“脏数据”。解决“脏数据”的办法是在对每条数据的新增和更新都记录“最后一次修改”对应的应用版本号以应对规模化数据迁移和清洗。以及对于该部分用户的额外运营工作。 蓝绿部署
可以看作是金丝雀发布的一种极端场景。
工具 & 平台
(待补充)