什么是部署模式?

已完成

部署模式是一种自动化的方式,用于向用户顺利地推出新的应用程序功能。 适当的部署模式可帮助你最大程度缩短故障时间。 一些模式还能让你逐步推出新功能。 这样,你就可先通过特选用户验证新功能,然后再向所有用户提供这些功能。

在本部分,你将了解一些常见的部署模式。 你还将了解 Azure 应用服务将如何实现 Tailspin 团队选择的模式。

晨间会议

Tailspin 团队感觉良好。 他们的管道加快了进程速度。 该团队有一个开发环境,他们在这里将 Web 应用与数据库集成。 Tim 和 Amita 都很高兴有自动化测试来让他们的工作变得更简单。 通常,他们发现延迟更少,bug 也变少了。

但就像以前一样,存在一个问题。 让我们来参加一下团队会议,Tim 正在讲话。

Tim:让每个人都满意很难。 Irwin 认为发布新功能所用的时间太长。 在管理层批准发布之前,我什么都没法做;现在,在他们同意之前,没法顺利地推出功能。 这个过程不仅很长,而且琐事繁多。 要手动操作,还会出现故障时间。 整个过程可能需要 5 天时间。 我知道时间很长,但我又该怎么做呢? 也许我多喝几杯咖啡,就能想到解决方法了。

Andy:要有效地解决问题,都免不了要喝咖啡提神,这是毫无疑问的。

我觉得我们需要的解决方案是一种良好的部署模式。 部署模式是一种自动直接转换的方式。 这也是我们将软件从最终预生产阶段移到实时生产的方式。

选择适当的模式肯定能帮到你,比如缩短故障时间。 部署模式还有一个优点是,它让我们有机会运行实际上该在生产中进行的测试。

Andy 开始在白板上写字。

下面是我们该考虑的可能性:

  • 蓝绿部署
  • 金丝雀发布
  • 功能切换
  • 摸黑启动
  • A/B 测试
  • 渐进式公开部署

让我们简单介绍一下每种模式。

蓝绿部署

蓝绿部署通过运行两个相同的环境来减少风险和故障时间。 这些环境被称为蓝色环境和绿色环境。 在任何时候,都只有其中一个环境处于活动状态。 蓝绿部署通常涉及到路由器或负载均衡器,它们帮助控制流量的流动。

Diagram of a load balancer distributing traffic in a blue-green deployment.

假设蓝色环境处于活动状态。 在准备新发布时,我们会在绿色环境中执行最终测试。 当软件在绿色环境中工作后,我们只是要切换路由器,使所有传入请求都进入绿色环境。

通过蓝绿部署,我们还可快速进行回滚。 如果绿色环境中出现任何错误,我们只需将路由器切换回到蓝色环境。

金丝雀发布

通过金丝雀发布,可及早识别潜在的问题,不必将问题暴露给所有用户。 思路是我们先仅向一小部分用户公开新功能,然后再向每个人推出。

Diagram of a load balancer sending traffic to a canary version.

在金丝雀版本中,我们在发布功能时监视发生的情况。 如果发布存在问题,我们应用修补程序。 在确定金丝雀版本稳定后,我们将它移到实际的生产环境中。

功能切换

使用功能切换可在运行时“按开关切换”。 我们可部署新软件,无需向用户公开其他任何新功能或更改后的功能。

在此部署模式下,Mara 和我生成了一个受开关控制的新功能。 进行发布时,功能的状态是“关”,因此不影响生产软件。 根据我们配置开关的方式,我们可将开关切换为“开”,并按所需的方式公开功能。

Diagram of a coded if statement for an on-off feature.

例如,我们可先将功能公开给部分用户,看看他们的反应如何。 随机抽取的这些用户会看到该功能。 或者,我们可将功能上线推出给所有人。

不过,与其他所有人相比,这种部署模式对 Mara 和我可能更有利。 功能切换模式最大的优势是它可帮助我们避免过多分支。 合并分支可能劳心费神。

摸黑启动

摸黑启动与金丝雀发布或功能切换类似。 在摸黑启动中,我们向一小部分用户发布新功能,而不是将它公开给每一个人。

Diagram of a load balancer sending traffic to the new feature.

这些用户并不知道他们在为我们测试功能。 我们甚至不会向他们凸显新功能。 正因如此,它被称为“摸黑启动”. 软件会逐步或悄悄地发布给用户,以便我们可获得反馈并测试性能。

A/B 测试

A/B 测试比较一个网页或应用的两个版本来确定哪一个效果更好。 A/B 测试就像一个经典的试验。

Diagram of two apps and their analytics.

在 A/B 测试中,我们向用户显示一个页面的两个或更多变体。 然后,我们使用统计分析来确定哪个变体对我们的目标来说表现更好。

渐进式公开部署

渐进式公开部署有时被称为“基于圈的部署”。 这种方式也可用于限制更改对用户的影响,同时确保这些更改在生产环境中有效。

圈本质上是金丝雀阶段的延伸。 金丝雀版本自身会发布到一个阶段来度量效果。 再添加一个圈实质上是同样的思路。

Diagram of a progression of larger groups.

在基于圈的部署中,我们先向可容忍风险客户部署更改。 然后,我们再逐步推出给更大的客户群。

实现蓝绿部署

Andy 看着 Tim。

Andy:内容很多,我知道。 你想花点时间考虑一下吗? 还是你和我...

Tim:蓝绿部署。

会议室里每个人都在笑。

Mara:这是喝咖啡的功劳吗?

Tim:功能切换涉及到你和 Andy 要改变工作方式。 让我们一次专注一件事。 逐步公开功能的方法要求进行统计分析或功能切换。

而蓝绿部署则是我能控制的。 切换路由器非常简单。 这很容易,听起来也很安全。 在蓝绿部署中,管理层要评估的是一个环境。 他们给与批准后,我们能轻松切换。 让我们就在这里开始吧。

所以问题是,我们如何在管道中实现蓝绿部署呢?

什么是部署槽位?

Andy:我们使用的是 Azure 应用服务,所以我们可利用部署槽位。 部署槽位运行自带主机名的应用。

我知道我们还没准备好在自动化管道过程中将 Space Game 网站部署到生产环境。 但作为测试,我们可在我们的过渡环境中添加一个部署槽位。

我们可只向我们在现有过渡环境中使用的应用服务实例再添加一个槽,而不是设置负载均衡器或路由器。 我们可将主要槽称为“蓝色”,将次要槽称为“绿色”。

Diagram of applications swapping IP addresses.

这样,我们就可在不停机的情况下部署新功能。 我们在这两个部署槽位之间交换一个应用程序及其配置。 基本上,我们交换的是这两个槽的 IP 地址。

Tim:我喜欢这样! 你可将蓝绿部署的这种变体称为“零停机部署”。

Andy:太棒了! Tim 和我将努力实现这种部署模式。 我们稍后可再开会来看看效果。

关于使用功能标志的建议

功能标志是团队之前考虑过的发布节奏方法之一。 团队已决定弃用功能标志,但有些人发现他们很有用。 本部分提供有关功能标志的详细信息。

功能标志有时也称为“功能切换”,也用于在不更改代码的情况下更改系统工作的方式。 通过这些标志,可将新的代码推送到集中开发分支并部署该代码,但代码并不一定正常运行。 这些标志通过是以控制条件逻辑的变量值的形式实现的。

假设你的团队正在银行应用程序的集中开发分支中工作。 你决定在主分支执行所有工作,避免日后的合并操作杂乱无章。 但你面临了一个问题。 你本质上在更改利息计算代码,但人们每天都依赖该代码。 更糟的是,更改需要数周才能完成。 你不能将主代码拆分这么长时间。

在这种情况下,功能标志可能就是一种很好的解决方案。 你可更改代码,使没有设置功能标志的用户能继续使用最开始的利息计算代码。 同时,你的团队却设置了功能标志,所以他们能看到他们正在更改的代码。

还有一种功能标志是版本标志。 假设你在完成利息计算代码工作后,想要先试用一下,然后再公开发布。 你有一组用户,他们非常适合处理这一新代码和任何可能出现的问题。 你将让他们先来试用此功能。 你更改配置,使他们也设置了功能标志并可测试新代码。 如果出现问题,你可快速禁用该标志。

知识检查

1.

营销团队要求你在公司网站上添加一个横幅。 他们有两个版本的横幅。 他们想知道哪个版本获得的点击量更高。 你可使用哪种部署模式来帮助营销团队确定出效果更好的版本?

2.

你有新功能要用于你的网站,你已准备好部署它。 不过,此功能存在风险,它会改变用户与网站交互的方式。 你可使用哪种部署模式来向已注册查看新功能的一小组早期采用者发布该功能?

3.

你不确定用户将对你的新功能如何反应。 你想要向随机抽取的少量用户发布此功能,来看看他们如何反应。 你可使用哪种部署模式?