我有一个应用程序服务计划,在该计划中,我已将解决方案的5个组件部署为Web Apps。我在Azure DevOps中使用“发布管理”将代码部署到这些应用程序。
为了最大程度地减少部署期间的停机时间,我首先部署到暂存插槽,然后将暂存插槽插入生产插槽以完成部署。
我已配置App Service Warmup(详细说明here)以调用将在插槽交换过程中“预热”应用程序的端点。
这似乎可行,但是我有两个问题:
即使预热已运行,插槽交换后向应用程序发出的第一个请求仍会花费很长时间。我怀疑这是由于生产插槽具有“粘性/插槽设置”,据我所知,这需要重新启动应用程序。为了测试这一点,我删除了插槽设置,但是延迟仍然存在。
应用程序相互依赖,并且不保证插槽交换(即使在Azure DevOps中并行启动)也无法保证同时完成,这意味着可能需要更新的代码与旧代码进行交互。尽管我们可以对此进行设计,但这并不是最佳选择。
到目前为止,从我的调查中,我想到解决这些问题的唯一方法是启动第二个应用程序服务计划,并将流量管理器配置为位于这两个服务计划之前。部署时,我将优先考虑其中一个服务计划,然后再部署到另一个服务计划,一旦完成,就将流量转移到新部署的服务计划,同时升级另一个服务计划,然后再次平衡两者之间的流量。在相同的代码级别。
在Azure中使用WebApp时,零停机时间部署的当前“最佳实践”是什么?
与流量管理器重复的服务计划是否可行?如果不可行,您会提出什么建议?
答案 0 :(得分:0)
遵循这些更多的最佳实践建议。
基于状态码的交换
在交换操作期间,通过向其根目录发出HTTP请求来预热暂存插槽中的站点。有关该过程的更详细说明,请参见How to warm up Azure Web App during deployment slots swap。
默认情况下,只要站点以任何状态代码响应,交换将继续进行。但是,如果您希望在应用程序无法预热时不进行交换,则可以使用以下应用程序设置对其进行配置:
WEBSITE_SWAP_WARMUP_PING_PATH:发出预热请求的路径 至。将其设置为以斜杠作为值的URL路径。对于 例如“ /warmup.php”。默认值为/。
WEBSITE_SWAP_WARMUP_PING_STATUSES:预期的HTTP响应代码 预热操作。将此设置为以逗号分隔的HTTP列表 状态代码。例如:“ 200,202”。如果返回的状态码是 不在列表中,交换操作将不会完成。默认情况下, 所有响应代码均有效。
最小化随机冷启动
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
答案 1 :(得分:0)
我建议与 Deployment Slots 结合使用 Local cahce ,以防止停机。
将粘性应用设置 WEBSITE_LOCAL_CACHE_OPTION 添加到您的生产位置,并将其值始终设置为。如果您使用的是 WEBSITE_LOCAL_CACHE_SIZEINMB ,还应将其作为粘性设置添加到生产位。
•创建一个暂存槽并发布到您的暂存槽。如果您从生产槽中获得了本地缓存的好处,通常就不会将暂存槽设置为使用 Local Cache 来启用无缝的构建-部署-测试生命周期进行暂存。
•根据您的登台广告位测试您的网站。
•准备就绪后,在您的 Staging 和 Production 插槽之间执行交换操作。
•粘性设置包括名称和对插槽的粘性。因此,当暂存槽被交换到生产时,它将继承本地缓存应用设置。新交换的生产广告位将在几分钟后针对本地缓存运行,并在交换后作为广告位预热的一部分进行预热。 因此,当插槽交换完成时,您的生产插槽正在针对本地缓存运行。
请参阅Azure最佳实践文档:
https://docs.microsoft.com/en-us/azure/app-service/deploy-best-practices
https://docs.microsoft.com/en-us/azure/app-service/overview-local-cache
答案 2 :(得分:0)
在对网站进行预热之前,我使用了“与预览交换”功能。
交换插槽的主要问题是交换时将重新启动工作进程。这意味着站点需要重新加热。
将“交换与预览”一起使用时,工作进程将重新启动,但交换未完成,这意味着您可以相应地对站点进行预热。一旦您对测试和性能感到满意,您只需“完全交换”,网站将做出相同的反应。