蓝绿部署在大型架构经常被涉及到,下面我重点来详解蓝绿部署@mikechen
什么是蓝绿部署?
蓝绿部署:是一种零停机时间的应用发布技术。
蓝绿部署核心思想是:在部署新版本时,先将新版本部署到一个与当前线上环境(旧版本)、并行的环境中(即“绿环境”)。
绿环境 (Green Environment),这是新版本应用部署的目标环境。
在部署过程中,绿环境通常处于空闲状态或者仅用于内部测试,不接收来自最终用户的生产流量。
蓝环境 (Blue Environment),这是当前正在运行的、服务于生产流量的稳定版本环境。
在验证无误后,通过路由或负载均衡方式将流量从旧环境(蓝环境)切换到新环境,实现无停机上线。
为什么需要蓝绿部署
传统的原地升级,通常需要在更新过程中停止服务,这会导致用户无法访问,造成业务中断和用户体验下降。
并且,传统方式通常是覆盖式发布,存在上线失败即中断服务的风险。
如果采用蓝绿部署,可以在后台部署新版本,并在确认稳定后才切换流量,实现了近乎零停机的发布。
新版本在没有真实用户流量的情况下进行测试,可以发现潜在的问题。
即使在切换少量流量后发现问题,也能够快速回滚到稳定的旧版本,将故障影响范围降到最低。
这比直接在现有生产环境上升级失败导致服务长时间中断要安全得多。
蓝绿部署的原理
蓝绿部署原理,如下图所示:
蓝环境(生产线上运行) ↓(部署新版本) 绿环境(并行环境测试) ↓(验证无误) 切换流量(路由 / DNS / LB) ↓ 蓝环境下线(可保留用于回滚)
双环境部署:同时存在蓝(旧)、和绿(新)两个版本环境。
在新版本部署完成后,需要对绿环境进行全面的测试。
比如:自动化测试(单元测试、集成测试、端到端测试)、冒烟测试,以及可能的性能测试和用户验收测试。
当绿环境通过所有必要的测试并被认为是稳定可靠的,就开始将用户流量从当前的蓝环境切换到绿环境。
请求路由控制,比如:通过 Nginx、Envoy、服务网关或 DNS ,将用户流量从蓝切换到绿。
如果在监控过程中发现新版本存在问题,可以立即将流量切换回仍然运行着稳定旧版本的蓝环境。
当绿环境稳定运行一段时间后,当前的蓝环境可以被更新为下一个新版本。
成为新的“绿环境”,而原来的绿环境则成为新的“蓝环境”,以此循环往复。
总之,蓝绿部署为微服务架构提供了一种安全、可靠且高效的发布策略,能够显著降低部署风险,减少停机时间。