一、蓝绿部署简介
蓝绿部署是一种通过运行相同的环境来减少风险和故障时间的部署技术。这些环境被称为蓝色环境和绿色环境。其中只有一个环境是活动环境,该环境服务于所有生产流量。
如图1所示,在蓝绿部署中,一共有两套系统:一套是正在给生产提供服务的系统,标记为“绿色环境”;另一套是准备发布的系统,标记为“蓝色环境”。这两套系统,只是系统版本和对外服务情况不同,正在对外提供服务的旧系统是绿色系统,新部署的系统是蓝色系统。
图1 蓝绿部署示意图
蓝色环境不对外提供服务,用来做什么?
- 用来做发布前的测试工作,测试过程中发现的任何问题可以在蓝色环境上进行修改,不干扰用户正在使用的系统。
- 用来做发布后的验证工作,经过验证确定达到上线标准之后,直接将用户切到蓝色环境,切换后的一段时间内,仍旧是蓝绿两套环境并存,但是用户访问的已经是蓝色环境。这段时间内观察蓝色环境的工作状态,如果出现问题,直接切回到绿色环境。
- 当确信对外提供服务的蓝色环境工作正常,不对外提供服务的绿色环境已经不再需要的时候,蓝色环境可以正式成为对外提供服务的环境,成为新的绿色环境。原先的绿色环境可以将资源释放出来,用来部署下一个蓝色环境。
蓝绿部署的目的是减少发布的中断时间,发布出现问题后可以快速撤回发布,两套环境没有耦合的时候才能百分百保证不干扰。
二、为什么要选择蓝绿部署
蓝绿部署技术能够有效的提升用户体验,保障业务连续性,对安全运营有较大的意义,以下将从部署优点和选型要求两个方面介绍移动办公平台(简称GDJ)选择蓝绿部署的原因。
1、蓝绿部署的优点
蓝绿部署有以下几个优点,这些优点可以充分应对当前安全运营面临的挑战,无缝升级和随时部署对用户无感发布,减少版本部署带来的风险。切换方便和瞬间回滚、缩短回退时长,迅速从故障场景中恢复,最大限度保障系统高可用性。
- 无缝升级:蓝绿部署通过在新的生产环境中测试新版本应用程序,尽早发现应用程序发布后的缺陷。如果系统运行符合预期,可以在没有中断的情况下切换到新环境,无缝升级,对用户无感知。
- 瞬间回滚:如果版本发布后出现问题,可以通过切换蓝绿环境很容易地回滚到旧版本。这种方式可以避免对用户产生负面影响,并保证系统的高可用性。
- 随时部署:使用蓝绿部署可以随时发布应用,版本上线时间不受停机窗口与时间的限制,无需等待维护窗口,为应用的快速发布提供了有利的支撑。
- 切换方便:蓝绿部署具备瞬间切换的能力,新版本验证完成后,用户可以快速切换到新版本。
- 配合灰度发布:蓝绿部署可以配合灰度发布使用。灰度发布可以逐步将新版本应用程序部署到生产环境中的一小部分用户中,以确保新版本应用程序可以正常运行。这种方式可以避免出现系统范围内的问题,降低应用程序缺陷带来的风险,并逐步将新版本应用程序发布给所有用户。
2、什么样的架构适合蓝绿部署
为了支持蓝绿部署,系统应当满足如下的架构设计要求:
- 应用无状态:在蓝绿部署中,新版本的应用程序被部署到蓝色环境中,而旧版本的应用程序继续在绿色环境中运行。因此,应用必须是无状态的,即新版本的应用程序可以无缝地接替旧版本的应用程序,而不会出现数据丢失或者不一致的状态。应用程序的无状态也可以保证在运行实例之间无缝切换,而不会丢失状态,这通常需要使用到无状态微服务。
- 可扩展性强:系统架构应该能支持运行多个实例,以便同时运行两个环境,且系统横向扩展简单,操作快速。如果一个系统部署组件复杂,本身的可扩展性较差,那么将会给蓝绿部署改造和切换带来诸多困难。
- 负载均衡:系统应该能够自动分配流量到蓝色环境和绿色环境,以确保平滑的流量转换。这通常需要使用负载均衡器。
- 自动化程度高:蓝绿部署在自动化程度高的系统下可以起到事半功倍的作用。使得自动化的构建、测试、部署和回滚可以更加快速、可靠。
正是由于蓝绿部署自身的诸多优点,以及移动办公平台本身具有应用无状态、基于容器化的微服务横向高可扩展性架构、通过反向代理服务器进行负载均衡转发请求的特点,决定了移动办公平台适用蓝绿部署的方式。
三、蓝绿部署实践
结合G行移动办公平台,从应用架构改造、应用部署原则、蓝绿环境切换策略、应用验证几个方面介绍蓝绿部署落地实践过程。
1、应用架构改造
移动办公平台原有物理架构如图2所示,反向代理服务器将来自互联网区域的https请求转发至webserver,由其将请求交由后台服进行简单处理并和数据库服务器等完成一系列的交互。在原有架构中业务处理层中的后台服务只有一套容器环境,数据层数据库相关机器为虚拟机。改造的核心在于业务处理层复制新增一套容器环境,两套完全不耦合的容器环境共用一套数据库服务器,避免两套系统之间的业务数据不一致,以及如何同步等带来的复杂性问题。
图2 旧有架构
在蓝绿环境改造的过程中,接入层和业务处理层原有的反向代理服务器以及webserver等物理机不发生变动,业务处理层横向扩展一套后台服务独立的容器环境作为蓝色环境,与原有的生产环境构成蓝绿环境供蓝绿部署以及生产使用,同时需要开通网络访问关系保证网络可达。为了应对两套环境可能给数据库内存等带来的压力,数据层数据库相关的机器也需要从虚拟机迁移到物理机器上。移动办公平台改造后的架构如图3所示,来自于webserver的流量具备到达其中任意一套环境的条件,并在两套环境中可以随时进行切换。
图3 现有架构
2、应用部署原则
在前文蓝绿部署简介中,应用部署只需在蓝环境中进行,蓝绿环境相差一个版本,但是基于金融行业的行业特殊性,针对移动办公平台蓝绿部署我们制定了以下的原则。
- 针对涉及安全漏洞修复的应用发布首先在绿环境进行部署,等待稳定运行后尽快在蓝环境进行同样的部署,蓝绿环境版本相同,这是基于金融行业对安全性的较高要求所决定的。
- 不涉及安全漏洞修复的应用发布则只需在蓝环境进行部署。后续择机在绿环境当中进行部署。
3、蓝绿环境切换策略
移动办公平台的蓝绿环境切换支持多种方式,主要有用户切换和流量切换两种方式,用户切换对用户归属环境进行切换,不同环境下具有不同的用户。流量切换将请求进行切换,实现对不同的请求转发至指定环境。
- 用户切换
用户切换的动作是在移动办公平台系统的管理控制台中通过将对应的用户和机构添加至相应的环境来完成操作,其本质是修改数据库当中蓝绿环境下的用户信息表决定环境下哪些用户。这样当蓝环境部署完毕之后可以将部分或者全部用户添加至此环境,完成用户的切换动作。
- 流量切换
流量切换工作,是通过修改反向代理服务器的配置文件完成的,修改配置文件后,需要重新加载新的配置文件以生效新地址后进行流量切换。配置文件通过reload的方式进行,也可以选择restart的方式,但是restart的方式会重启服务。这个重启会造成服务一瞬间的中断,造成原有请求无法正常返回。通过reload的方式加载新的配置文件,反向代理服务是不会中断的,新的请求会导向蓝环境,而原有已经进入绿环境的请求,已经建立到绿环境后端服务器的通信信道不会中断,直到原有请求处理完成返回结束。在流量切换的瞬间是不会对原有请求造成影响。通过修改配置以及reload生效后,反向代理将请求默认转发到蓝环境完成请求流量的切换动作。
应用验证
应用部署完毕后,对蓝绿环境进行切换,蓝环境将承担生产所有流量,承载真实业务。此时,必须高度关注应用的验证情况,如果发现验证出问题,或者运行指标有下降,则需要及时进行应急处理,应用的主要验证方式有两种,一种是交易量验证,一种是日志验证。
- 交易量验证
移动办公平台架构改造新增蓝环境之后,同时需要完善相应的生产监控策略。依托于G行BPC监控系统,改造之后在BPC交易中新增蓝环境交易链路监控,健全对全链路交易的监控策略,补充交易量、成功率,响应率,响应时间等监控指标。在蓝绿环境切换后可以通过对交易量的监控验证生产流量切换是否成功。如图4所示,切换成功后,可以看到一边环境的交易量已下降为零。
图4 BPC交易量验证
- 日志验证
通过对反向代理服务器日志中的请求标签进行捕捉,在切换后相应标签的关键字随着时间的推移将越来越多,请求已全部转发至指定环境。
图5 日志验证
四、蓝绿部署带来的收益
蓝绿部署的使用为移动办公平台应用版本的发布带来了诸多收益,其主要收益有以下几点:一是变更开始时间不再受限,由之前的凌晨24点业务低峰期前移至下午18点,即使是在紧急情况下办公业务高峰性也可以进行变更操作。二是系统回退时间大幅缩短,未使用蓝绿部署之前,回退需要重新在容器云部署旧版本并进行启停操作,单AZ回退花费时间15分钟,当前版本回退只需进行蓝绿环境的切换,切换时长只需3分钟左右,应急回退能力得到显著提升。三是版本无感发布,不会对用户的正常使用产生影响,提升用户使用体验。
五、行业应用现状
蓝绿部署是银行业应用部署中的一种重要策略,可以确保应用程序的高可用性、高性能和高可靠性,从而帮助银行实现业务运营的稳定和可持续发展。在银行的应用现状中,许多银行已经采用了蓝绿部署策略来管理其核心应用程序的部署和更新。这些应用程序包括交易系统、支付系统等。
在互联网厂商当中,蓝绿部署已经成为了许多云原生应用开发和部署的标准实践之一。大多数云服务提供商(如AWS、Azure、Google Cloud等)都提供了蓝绿部署的相关服务和工具,如AWS CodeDeploy、Azure DevOps等。此外,也有很多第三方开源工具和框架,如Spinnaker、Jenkins、Kubernetes等,都支持蓝绿部署的实现。
总结与展望
本文从蓝绿部署的概念、特点以及应用部署三个方面介绍了蓝绿部署在G行移动办公平台的应用实践。蓝绿部署为移动办公平台新版本的发布带来了广泛的便利性,新版本上线时间由原来的深夜大幅前移至业务低峰时段。未来随着G行IT架构转型的持续深入,越来越多的系统将部署在全栈云平台。依托于全栈云容器平台以及蓝绿部署等一系列持续发布的新技术,应用系统新版本的无中断随时上线将得到深入的推广,为用户的使用带来更好的体验。