持续部署
在软件自动化过程中,特别是敏捷开发及DevOps领域,自动部署是一个非常重要的环节。单一系统的部署与系统所采用的技术有很大的关系,通常会有对应的解决方案。但随着应用系统的复杂度不断增加,用户对系统服务持续在线的要求越来越高,同时系统也在不断向规模化,集群化方向扩展,人工部署的模式再也无法满足业务的需求。
当前常见的自动部署模式包括:蓝-绿部署(Blue-Green Deployment)和金丝雀部署(Canary Deployment)。这些部署模式仅作为系统自动部署的指导性原则,具体实践还需要与实际的技术,环境及工作流程相结合,进而支撑A/B测试和灰度发布等各种需求。
蓝-绿部署(Blue-Green Deployment)
蓝-绿部署是通过创建两个版本的应用程序(蓝色和绿色),通过在两个版本之间安全切换,确保应用提供的服务实时在线的一种方式。
如上图所示,应用程序的新版本(绿色)部署后,如果通过功能及性能测试,可以在当前版本(蓝色)应用处理完所有的流量、请求及待处理操作后通过路由切换的方式将新的流量、请求调度给新的版本(绿色)。如果新版应用系统(绿色)出现问题,可以及时回滚到原有版本(蓝色);如果一切正常可以停止原有版本(蓝色),回收资源。在发布新版本时,继续重复上述操作。
关于蓝-绿部署的详细过程,请参考Martin Fowler的文章。
蓝-绿部署的优点包括:1)上线过程对用户透明,不影响用户的体验;2)可以在生产环境对新版本进行功能和性能进行测试,便于试点;3)在新系统出现故障时,可以及时降级回滚。
金丝雀部署(Canary Deployment)
十七世纪的矿工,工作时会带一只金丝雀进入矿场,当矿井中二氧化碳浓度升高时,人类不易察觉,金丝雀会先死亡,矿工们以此作为监测二氧化碳浓度的指标。Google的Chrome浏览器提供金丝雀版本(Canary Version),并特别注明“胆小者请勿轻易尝试”。
金丝雀部署作为一种测试策略,一小部分服务器被升级到一个新版本或者新配置,随后保持一定的观察期。
如果没有任何异常出现,发布过程会继续,剩余的服务器也会升级到新版本。
如果出现异常,这部分单独修改过的应用服务可以很快被回退到原来的状态。