什么是部署模式?
- 5 分钟
部署模式是一种向用户顺利推出新应用程序功能的自动化方法。 适当的部署模式有助于最大程度地减少停机时间。 某些模式还使你能够逐步推出新功能。 这样,就可以在向所有人提供这些功能之前,先使用选择用户来验证新功能。
在本部分中,你将了解一些常见的部署模式。 你还将了解 Azure 应用服务如何帮助实现 Tailspin 团队选择的模式。
上午会议
Tailspin 团队的状态很好。 他们的管道加快了进程速度。 团队有一个开发环境,可以在其中将 Web 应用与数据库集成。 Tim 和 Amita 都乐于进行自动化测试来简化作业。 通常,他们遇到的延迟和问题更少。
但一如既往地存在问题。 让我们来参加一下团队会议,Tim 正在讲话。
提姆: 让每个人都很高兴,这太难了。 欧文认为发布新功能需要很长时间。 在管理层批准发布之前,我无法做任何事情。现在,在他们批准之后,也没有顺利推出这些功能的方法。 这个过程不仅很长,而且混乱。 这是手动的,并且有停机时间。 整个过程可能需要五天时间。 我知道这太长了,但我该怎么做? 也许如果我只是喝更多的咖啡, 解决方案会来找我。
安 迪: 咖啡对于有效解决问题至关重要,毫无疑问。
我认为我们需要的解决方案是一个很好的部署模式。 部署模式是实现切换的自动化方法。 这就是我们如何将软件从最终预生产阶段移动到实时生产。
选择正确的模式肯定会帮助你,就像尽量减少停机时间一样。 部署模式的另一个优点是,它让我们有机会运行真正在生产中发生的测试。
安迪开始在白板上写作。
以下是我们应该考虑的可能:
- 蓝绿部署
- 金丝雀发布
- 功能切换
- 摸黑启动
- A/B 测试
- 渐进式公开部署
让我们简要讨论一下每个模式。
蓝绿部署
蓝绿部署通过运行两个相同的环境来降低风险和停机时间。 这些环境称为 蓝色 和 绿色。 在任何时候,都只有其中一个环境处于活动状态。 蓝绿部署通常涉及有助于控制流量流的路由器或负载均衡器。
假设蓝色环境处于活动状态。 在准备新版本时,我们在绿色环境中执行最终测试。 软件在绿色环境中工作后,我们只需切换路由器,以便所有传入的请求都进入绿色环境。
通过蓝绿部署,我们还可快速进行回滚。 如果在绿色环境中出现任何问题,我们只需将路由器切换回蓝色环境。
金丝雀发布
通过金丝雀发布,可及早识别潜在的问题,不必将问题暴露给所有用户。。 其想法是,在向所有人提供新功能之前,我们只向一小部分用户公开新功能。
在金丝雀版本中,我们在发布功能时监视发生的情况。 如果发布出现问题,我们将进行修复。 在确定金丝雀版本稳定后,我们将它移到实际的生产环境中。
功能切换
使用功能切换可在运行时“按开关切换”。 我们可以部署新软件,而无需向用户公开任何其他新功能或更改的功能。
在此部署模式下,Mara 和我生成了一个受开关控制的新功能。 发布时,该功能处于“关闭”状态,使其不会影响生产软件。 根据我们配置开关的方式,我们可以将开关拨到“开”,并按我们希望的方式激活功能。
例如,我们可以先向少数用户公开该功能,了解其反应方式。 该随机用户示例将看到该功能。 或者我们可以让该功能面向所有人上线。
但是,这种部署模式可能比任何人都更有利于 Mara 和我。 功能切换模式的一大优点是它帮助我们避免过多分支。 合并分支可能很痛苦。
摸黑启动
摸黑启动与金丝雀发布或功能切换类似。 在摸黑启动中,我们向一小部分用户发布新功能,而不是将它公开给每一个人。
这些用户不知道他们正在为我们测试该功能。 我们甚至没有向他们突出显示新功能。 正因如此,它被称为“摸黑启动”。 该软件逐渐或未经干扰地发布给用户,以便我们可以获取反馈并测试性能。
A/B 测试
A/B 测试 比较网页或应用的两个版本,以确定哪个版本性能更好。 A/B 测试类似于经典实验。
在 A/B 测试中,我们随机向用户显示页面的两个或多个变体。 然后,我们使用统计分析来确定哪些变体对目标效果更好。
渐进式公开部署
渐进式部署 有时称为 环形部署。 这是在确保这些更改在生产环境中有效的同时限制更改对用户的影响的另一种方法。
圈本质上是金丝雀阶段的延伸。 金丝雀版本自身会发布到一个阶段来度量效果。 添加另一个戒指本质上是相同的想法。
在基于圈的部署中,我们先向可容忍风险客户部署更改。 然后,我们逐步向更大的客户群推广。
实现蓝绿部署
安迪看着蒂姆
安 迪: 这的确是很多,我知道。 你想花些时间去思考吗? 还是你和我...
提姆: 蓝绿。
房间里的每个人都笑了。
Mara:这是喝咖啡的功劳吗?
提姆: 功能切换涉及更改你和 Andy 的工作方式。 让我们一次做一件事。 逐渐公开特征的方法需要统计分析或功能切换。
蓝绿部署是我可以控制的。 切换路由器非常简单。 这很容易,听起来很安全。 在蓝绿部署中,管理层要评估的是一个环境。 当他们给出“确定”时,我们可以轻松地切换。 我们从该处开始。
所以问题是,我们如何在管道中实现蓝绿部署呢?
什么是部署槽位?
安 迪: 由于我们使用的是 Azure 应用服务,因此可以利用 部署槽位。 部署槽位运行自带主机名的应用。
我知道我们尚未准备好将 Space Game 网站通过自动化流程部署到生产环境。 但作为测试,我们可以将一个部署槽添加到 暂存 环境。
我们可以将第二个槽添加到我们在现有 过渡 环境中使用的应用服务实例,而不是设置负载均衡器或路由器。 我们可以将主槽称为 蓝色,辅助槽称为 绿色。
这样,我们可以部署新功能,而不会造成任何停机。 我们在两个部署槽之间交换应用程序及其配置。 基本上,我们将交换两个槽的 IP 地址。
提姆: 我喜欢! 可以将蓝绿部署的这种变体称为 零停机部署。
安 迪: 伟大! Tim 和我将致力于实现此部署模式。 我们都可以稍后开会查看结果。
有关使用功能标志的建议
功能标志是团队之前考虑过的发布节奏方法之一。 团队决定不使用功能标志,但许多人发现它们很有用。 本部分提供有关功能标志的详细信息。
使用功能标志(有时称为 功能切换)可以更改系统的工作方式,而无需更改代码。 通过这些标志,可将新的代码推送到集中开发分支并部署该代码,但代码并不一定正常运行。 标志通常实现为控制条件逻辑的变量的值。
假设你的团队正在银行应用程序的中央开发分支工作。 你决定在主分支中完成所有工作,以避免将来出现混乱的合并操作。 但你面临着一个问题。 你正在大幅更改利息计算方式,人们每天都依赖该代码。 更糟的是,这些更改需要数周才能完成。 你不能将主代码拆分这么长时间。
在这种情况下,功能标志可能是一个很好的解决方案。 可以更改代码,以便没有功能标志集的用户可以使用原始兴趣计算代码。 同时,你的团队却设置了功能标志,所以他们能看到他们正在更改的代码。
另一种类型的功能标志是 发布标志。 假设在完成利息计算代码的工作后,你需要在公开发布之前试用它。 你有一组用户非常有能力处理新代码和任何可能的问题。 你将让他们先试用该功能。 你更改配置,使他们也设置了功能标志并可测试新代码。 如果出现问题,则可以快速禁用标志。