【发布时间】:2019-11-18 12:23:52
【问题描述】:
我有一个应用服务计划,在这个计划中,我将我的解决方案的 5 个组件部署为 Web 应用。我使用 Azure DevOps 中的“发布管理”将代码部署到这些应用程序。
为了最大限度地减少部署期间的停机时间,我先部署到暂存槽,然后将暂存槽换成生产槽以完成部署。
我已将应用服务预热(详细信息 here)配置为调用一个端点,该端点将在插槽交换过程中“预热”应用程序。
这似乎可行,但我有两个问题:
即使已运行预热,在插槽交换后向应用发出的第一个请求仍需要很长时间。我怀疑这是由于生产插槽具有“粘性/插槽设置”,据我所知,这需要重新启动应用程序。为了测试这一点,我删除了插槽设置,但延迟仍然存在。
应用程序相互依赖,并且插槽交换(即使在 Azure DevOps 中并行启动)不能保证同时完成,这意味着更新的代码可以与旧代码交互。虽然我们可以围绕这个进行设计,但这并不是最优的。
根据我目前的调查,我能想到解决这些问题的唯一方法是启动第二个应用服务计划,并将流量管理器配置为位于这两个服务计划的前面。部署时,我会优先考虑其中一个服务计划,同时部署到另一个服务计划,一旦完成,将流量转移到新部署的服务计划,同时升级另一个服务计划,然后在两者都完成后再次平衡两者之间的流量在同一代码级别上。
在 Azure 中使用 WebApp 时,零停机部署的当前“最佳实践”是什么?
使用流量管理器的重复服务计划是一个可行的选择吗?如果不是,您有什么建议?
【问题讨论】:
-
你为什么不想做 a\b 发布?
-
我想我的问题可能不清楚。 A/B 是我在我的问题中提出的可能解决方案,只是想知道这是否是“最佳实践”。 A/B 还带有额外的基础设施来支持它,因此成本也很高。
-
不,a\b 可以用相同的方法完成(使用插槽)。所以它不需要额外的费用
标签: azure azure-devops