部署 Azure Web Apps 时最大限度减少停机时间的最佳实践

2023-11-26

我有一个应用程序服务计划,在该计划中,我将解决方案的 5 个组件部署为 Web 应用程序。我使用 Azure DevOps 中的“发布管理”将代码部署到这些应用程序。

为了最大限度地减少部署期间的停机时间,我首先部署到临时插槽,然后将临时插槽交换到生产插槽以完成部署。

我已经配置了应用服务预热(详细信息here)来调用一个端点,该端点将在槽交换过程中“预热”应用程序。

这似乎有效,但我有两个问题:

  1. 即使预热已经运行,槽交换后向应用程序发出的第一个请求也需要很长时间。我怀疑这是由于生产插槽具有“粘性/插槽设置”,据我所知,这需要重新启动应用程序。为了测试这一点,我删除了插槽设置,但延迟仍然存在。

  2. 应用程序相互依赖,并且插槽交换(即使在 Azure DevOps 中并行启动)不能保证同时完成,这意味着较新的代码可能与旧代码进行交互。虽然我们可以围绕这个进行设计,但这并不是最佳的。

根据迄今为止的调查,我能想到解决这些问题的唯一方法是启动第二个应用程序服务计划,并将流量管理器配置在两个服务计划之前。部署时,我将优先考虑其中一个服务计划,同时部署到另一个服务计划,完成后将流量转移到新部署的服务计划,同时升级另一个服务计划,然后在两者都完成后再次平衡两者之间的流量在相同的代码级别上。

在 Azure 中使用 WebApps 时,当前零停机部署的“最佳实践”是什么?

与流量管理器重复的服务计划是否可行?如果不是,您有何建议?


请遵循这些更多最佳实践建议。

根据状态代码进行交换

在交换操作期间,通过向其根目录发出 HTTP 请求来预热暂存槽中的站点。有关该过程的更详细说明,请访问如何在部署槽交换期间预热 Azure Web App.

默认情况下,只要站点响应任何状态代码,交换就会继续。但是,如果您希望在应用程序无法预热时不进行交换,则可以使用以下应用程序设置进行配置:

  • WEBSITE_SWAP_WARMUP_PING_PATH:发出预热请求的路径 到。将其设置为以斜杠开头的 URL 路径作为值。为了 例如,“/warmup.php”。默认值为/。

  • WEBSITE_SWAP_WARMUP_PING_STATUSES:预期的 HTTP 响应代码 预热操作。将其设置为以逗号分隔的 HTTP 列表 状态代码。例如:“200,202”。如果返回的状态码为 不在列表中,交换操作将无法完成。默认情况下, 所有响应代码均有效。

最大限度地减少随机冷启动

  • WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG:将此设置为“1” 将阻止 Web 应用程序的工作进程和应用程序域回收 当应用服务的存储基础架构重新配置时。

https://ruslany.net/2019/06/azure-app-service-deployment-slots-tips-and-tricks/#prevent-cold-start

控制插槽粘性配置

但是,如果出于任何原因您需要恢复到交换这些设置的旧行为,那么您可以将应用程序设置 WEBSITE_OVERRIDE_PRESERVE_DEFAULT_STICKY_SLOT_SETTINGS 添加到应用程序的每个插槽,并将其值设置为“0”或“false”。

https://ruslany.net/2019/06/azure-app-service-deployment-slots-tips-and-tricks/#slot-sticky-config

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

部署 Azure Web Apps 时最大限度减少停机时间的最佳实践 的相关文章

随机推荐