我听说两者都曾用来描述在新机器上部署更新的想法,同时保持旧机器处于活动状态,如果出现问题就可以回滚。我还听说它曾用于描述更新服务和旧服务之间的共享负载,再次出于回滚的目的 - 通常会终止不活动的旧补丁,有时也不会。
我的理解是它严格来说是云服务。
有人可以帮助揭开这些条款的神秘面纱吗?
答案 0 :(得分:28)
Jezz Humble和David Farley在“持续交付”书中描述的经典部署技术:
这个想法是让您的生产环境具有两个完全相同的版本, 我们将其称为蓝色和绿色...系统的用户将转到当前指定的绿色环境中。我们要发布该应用程序的新版本。因此,我们将其部署到蓝色环境中……这丝毫不影响绿色环境的运行。我们可以在蓝色环境下运行烟雾测试,以检查其是否正常工作。当我们准备就绪时,转移到新版本就像更改路由器配置以使其指向蓝色环境而不是绿色环境一样简单。因此,蓝色环境成为生产环境。这种切换通常可以在不到一秒钟的时间内完成。如果出现问题,我们只需将路由器切换回绿色环境即可。'
然后Humble和Farley继续提到主要的挑战:处理绿色和蓝色版本之间的数据库架构更改。
发布新版本时,蓝绿色部署的主要好处是停机时间为零或接近零。蓝绿色的部署可以实现 canary发布。
红色版本已投入生产。您将Black版本部署到一台或多台服务器。当黑色版本完全可用时,您可以切换路由器以将所有流量定向到该路由器(或者将红色缩放为0实例,将黑色缩放为N)。如果有任何问题,请还原操作。因此,它类似于蓝绿色部署,但是有一个轻微的区别:在蓝绿色部署中,两个版本可能会暂时同时获取请求,而在红黑色部署中,只有一个版本正在获取流量在任何时间。这里是一些corroboration:
在任何时候,只有一个环境处于活动状态,该活动环境为所有生产流量提供服务。在此示例中,红色当前处于活动状态,黑色处于空闲状态(在这种情况下,我们将黑色缩小为零个服务器)...
因此,红黑色是蓝绿色的特化。但是,红黑部署是Netflix,Istio和其他支持容器编排的框架/平台所使用的较新术语。 实际含义可能有所不同,许多人使用“红黑色”作为“蓝绿色”的另一个术语,也许只是因为他们的团队颜色是红色和黑色。 :^)
答案 1 :(得分:24)
蓝色/绿色和红色/黑色部署代表相同的概念。
虽然第一个是最常用的术语,但后者似乎主要用于Netflix及其工具(如Spinnaker)。
它们仅适用于云,虚拟化或集装箱化服务,因为您的基础架构必须是自动化的,才能理解这种方法。