72

我听说过两者都用来描述在新机器上部署更新同时保持旧机器处于活动状态的想法,以便在出现问题时准备好回滚。我还听说它用于描述更新服务和旧服务之间的共享负载,同样是为了回滚——有时会终止不活动的旧补丁,有时不会。

我的理解也是,它仅限于云服务。

有人可以帮助揭开这些术语的神秘面纱吗?

4

2 回答 2

79

蓝绿部署

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

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

Humble 和 Farley 然后继续提到主要挑战:处理绿色和蓝色版本之间的数据库模式变化。

蓝绿部署的主要好处是在发布新版本时停机时间为零或接近零。并且蓝绿部署支持金丝雀发布

红黑部署

红色版本已投入生产。您将黑色版本部署到一台或多台服务器。当黑色版本完全运行时,您切换路由器以将所有流量定向到它(或者您将红色扩展到 0 个实例,将黑色扩展到 N)。如果出现任何问题,您将恢复操作。因此,它类似于蓝绿部署,但略有不同:在蓝绿部署中,两个版本可能会暂时同时获取请求,而在红黑部署中,只有一个版本在任何时候都在获取流量及时。这里有一些佐证

在任何时候,只有一个环境是实时的,实时环境服务于所有生产流量。对于此示例,Red 当前处于活动状态,Black 处于空闲状态(在这种情况下,我们将 Black 缩小到零服务器)...

因此,红黑是蓝绿的特化。但红黑部署是 Netflix、Istio 和其他支持容器编排的框架/平台使用的较新术语。实际含义可能会有所不同,许多人使用“红黑”作为“蓝绿”的另一个术语,可能只是因为他们的团队颜色是红色和黑色。:^)

于 2018-08-02T12:42:12.217 回答
46

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

虽然第一个是最常见的术语,但后者似乎主要用于 Netflix 及其工具(如Spinnaker)。

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

于 2017-11-14T07:36:47.900 回答