蓝绿部署是最常见的一种不需要停机的部署方式,是一种以可预测的方式发布应用的技术,目的是减少发布过程中服务停止的时间。
蓝绿发布的基本原理:
蓝绿部署原理上很简单,就是通过冗余来解决问题。通常生产环境需要两组配置(蓝绿配置),一组是active的生产环境的配置(绿配置),一组是inactive的配置(蓝绿配置)。用户访问的时候,只会让用户访问active的服务器集群。在绿色环境(active)运行当前生产环境中的应用,也就是旧版本应用version1。当你想要升级到version2 ,在蓝色环境(inactive)中进行操作,即部署新版本应用,并进行测试。如果测试没问题,就可以把负载均衡器/反向代理/路由指向蓝色环境了。随后需要监测新版本应用,也就是version2 是否有故障和异常。如果运行良好,就可以删除version1 使用的资源。如果运行出现了问题,可以通过负载均衡器指向快速回滚到绿色环境。
蓝绿发布的优点:
这种方式的好处在你可以始终很放心的去部署not active环境,如果出错并不影响生产环境的服务,如果切换后出现问题,也可以在非常短的时间内把再做一次切换,就完成了回滚。而且同时在线的只有一个版本。蓝绿部署无需停机,并且风险较小。
(1) 部署版本1的应用(一开始的状态),所有外部请求的流量都打到这个版本上。
(2) 部署版本2的应用,版本2的代码与版本1不同(新功能、Bug修复等)。
(3) 将流量从版本1切换到版本2。
(4) 如版本2测试正常,就删除版本1正在使用的资源(例如实例),从此正式用版本2。
从过程不难发现,在部署的过程中,应用始终在线。并且,新版本上线的过程中,并没有修改老版本的任何内容,在部署期间,老版本的状态不受影响。这样风险很小,并且,只要老版本的资源不被删除,理论上,可以在任何时间回滚到老版本。
蓝绿发布的弱点:
使用蓝绿发布需要注意的一些细节包括:
1、当切换到蓝色环境时,需要妥当处理未完成的业务和新的业务。如果数据库后端无法处理,会是一个比较麻烦的问题。
2、有可能会出现需要同时处理“微服务架构应用”和“传统架构应用”的情况,如果在蓝绿部署中协调不好这两者,还是有可能导致服务停止;
3、需要提前考虑数据库与应用部署同步迁移/回滚的问题。
4、蓝绿发布需要有基础设施支持。
5、在非隔离基础架构( VM 、 Docker 等)上执行蓝绿发布,蓝色环境和绿色环境有被摧毁的风险。
6、另外,这种方式不好的地方还在于冗余产生的额外维护、配置的成本,以及服务器本身运行的开销。
蓝绿发布适用的场景:
1、不停止老版本,额外搞一套新版本,等测试发现新版本OK后,删除老版本。
2、蓝绿发布是一种用于升级与更新的发布策略,部署的最小维度是容器,而发布的最小维度是应用。
3、蓝绿发布对于增量升级有比较好的支持,但是对于涉及数据表结构变更等等不可逆转的升级,并不完全合适用蓝绿发布来实现,需要结合一些业务的逻辑以及数据迁移与回滚的策略才可以完全满足需求。
总结一下
之前公司就是用类似于蓝绿发布的方式进行处理的.我们有一个生产域名pro和一个uat域名,我们将需发布生产的代码指定到uat域名上,测试人员对这个环境进行测试。如果有问题也不要紧,回滚掉uat即可。如果测试没问题,将uat域名切换到pro域名,等到下一次生产发布重复这个操作即可。如果uat环境测试没问题,将uat切换到pro后因为并发压力下导致程序出了问题,则可以立即切回到原来的pro下,如果一周内没有反馈故障,则我们将原来的pro同步成最新uat发布的代码。
当然,这只是最理想的结果。一个成熟的IT工作者必须要想到一些潜在问题,要时刻警惕可能引发的问题。