红黑部署和蓝绿部署有什么区别?

87

我听说过这两个词被用来描述在新机器上部署更新的概念,同时保持旧机器处于活跃状态,以便在出现问题时进行回滚。我还听说过它被用来描述在新服务和旧服务之间分享负载,为了进行回滚 — 有时会终止不活跃的旧补丁,有时则不会。

据我所知,这仅适用于云服务。

有人能帮忙解释一下这些术语吗?


当我提到云服务时,这也适用于裸金属或任何足够大的服务。你的情况可能有所不同。 - Erich
2个回答

95

蓝绿部署

这是Jez Humble和David Farley在持续交付一书中描述的经典部署技术:

这个想法是有两个完全相同的生产环境,我们称之为蓝色和绿色...系统的用户被路由到绿色环境,即当前指定的生产环境。我们想要发布应用程序的新版本。所以我们将其部署到蓝色环境中...这不会以任何方式影响绿色环境的运行。我们可以对蓝色环境运行冒烟测试以检查其是否正常工作。当我们准备好时,切换到新版本就像简单地更改路由器配置以指向蓝色环境而不是绿色环境一样。蓝色环境因此成为生产环境。这种切换通常可以在不到一秒钟的时间内完成。如果出现问题,我们只需将路由器切换回绿色环境即可。

Humble和Farley接着提到了主要挑战:处理绿色版本和蓝色版本之间的数据库模式更改。

蓝绿部署的主要优点是在发布新版本时零或近零停机时间。而且蓝绿部署还支持金丝雀发布

红黑部署

红版已经上线。你需要将黑版部署到一个或多个服务器上。当黑版完全可用时,你可以切换路由器以将所有流量定向到它(或者你可以将红版缩放为0个实例,将黑版缩放为N)。如果出现任何问题,你可以回滚操作。因此,这类似于蓝绿部署,但有一个细微的区别:在蓝绿部署中,两个版本可能会同时暂时接收请求,而在红黑部署中,任何时候只有一个版本正在接收流量。以下是一些corroboration:
因此,红黑色是蓝绿色的一种特殊形式。但是,Netflix、Istio和其他支持容器编排的框架/平台现在正在使用“红黑色部署”这个新术语。 实际意义可能有所不同,许多人将“红黑色”用作“蓝绿色”的代名词,可能只是因为他们的团队颜色是红色和黑色。: ^)

3
请问能提供参考文献吗?我很高兴如果有一个确切且共同认可的定义可以澄清它们之间的任何组合,但是我们是否有参考文献可以指引人们呢?这对于在先有的定义基础上进行技术讨论非常重要! - fgeorgatos
3
让我提供一下我的评论的后续内容:
  • _蓝/绿_:Jezz Humble和David Farley所著的《持续交付》一书(正如你引用的)是一个扎实的定义基础。
  • _红/黑_:如果这里的文字 https://www.spinnaker.io/concepts/ 没有以这种方式提到 红/黑(又称蓝/绿)_,那就太好了;让我提醒一下,_Spinnaker 就是来自于 Netflix 本身!
- fgeorgatos
1
@fgeorgatos,我完全同意您的观点,我们应该有一个共同的定义来基础技术讨论。也许Humble和Farley会在第二版中写关于红黑与蓝绿的文章... :^) 无论如何,我添加了一句引语,证实了我提到的轻微差异。 - Paulo Merson
3
那么,这与红黑有什么不同呢?您是在说,如果黑色处于空闲状态,某些东西会阻止您绕过路由器直接访问这些主机吗?如果是这样,请提供一个引用来说明这是什么,并且已定义为红黑的一部分。如果不是,那就完全像你对蓝绿的描述。 - Tim
3
对我来说没什么区别。Netflix最常使用“红黑色”而不是“蓝绿色”,可能是因为它们的标志颜色是红色和黑色。不需要再深究了…… - Fred Mériot
显示剩余5条评论

54

蓝绿部署和红黑部署代表相同的概念。

虽然前者是最常见的术语,但后者似乎主要在Netflix及其工具(如Spinnaker)中使用。

它们仅适用于云、虚拟化或容器化服务,也就是说,您的基础架构必须是可自动化的,才能理解这种方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接