You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure App Service交换部署槽位是否会影响运行中的长耗时作业?

Azure App Service部署槽交换对在途长请求的影响说明

核心结论

默认配置下,执行生产/暂存槽交换时,你正在跑的1-3分钟长耗时请求一定会被中断,根本跑不完。

底层逻辑说明

  • 槽交换不是大家想象的「原子化切流量路由」,交换执行过程中Azure平台会先对两个槽位的实例做配置对齐、工作进程回收:原本承接生产流量的生产槽实例,会先触发托管进程(对应.NET Core应用就是承载Kestrel的w3wp/dotnet工作进程)的优雅关闭流程,等超时窗口到了就强制杀进程。
  • Azure App Service默认给工作进程留的优雅关闭等待窗口只有30秒,也就是说进程收到关闭信号后,最多等30秒给正在处理的请求收尾,超过时间没跑完的请求会被直接断开连接、强制终止,你的1-3分钟的任务远长于这个默认窗口,必然会被打断。

别信网上说的「交换时旧实例会等所有请求跑完再下线」的错误说法——交换过程的进程回收动作是在流量完全切走之前就触发的,根本不会给长请求留足够的等待时间。

规避方案

如果要避免长请求被交换操作打断,可以按实际场景选下面的方案:

  • 调整进程关闭超时配置:你可以通过修改托管配置把shutdownTimeLimit参数调大,Azure环境下这个参数最大支持设为10分钟,足够覆盖你1-3分钟的请求耗时。注意这个配置必须同时部署到生产、暂存两个槽位,不然任意一侧槽位在交换时触发回收都可能打断请求。
  • 从架构层面解耦长任务:这是最稳妥的根治方案,Web请求线程本来就不适合跑超过几十秒的任务,你可以把1-3分钟的耗时逻辑丢到后台消息队列,由独立的后台工作者处理,完全不和前端Web实例的生命周期绑定——不光槽交换不会影响,平台升级、实例扩容、故障重启都不会打断这类任务。
  • 人工引流后再交换:如果是手动触发交换的场景,可以先在生产槽实例上配置停止接收新请求,等监控看到所有在途请求都处理完成后再点交换,不过这个方案没法适配自动交换的CI/CD流程。

内容的提问来源于stack exchange,提问作者TidyDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 04:36:15