为何所有App Service请求均流向同一实例?已配置4实例未实现负载均衡
我已将App Service Plan配置为包含4个实例,在此计划中托管了1个Web应用和1个Node.js API。手动设置实例数为4并等待约1小时后,我执行了负载测试,却发现只有1个实例被访问。
已完成的配置
- 将session affinity设为OFF
- 负载测试使用4个实例,每个实例对应100个用户,已启用公网流量
- 将App Service Plan实例数设为4
我认为这些配置已足够让流量均匀分配到4个实例,但实际并未实现,请问我遗漏了什么?
更新1:缩放配置截图

更新2:负载测试结果截图

再次执行负载测试,结果相同——仍只有1个实例被访问。
排查方向与解决方案
启用应用预热配置
新实例完成初始化前无法接收流量,若未配置应用预热,Azure会将流量集中到已就绪的旧实例。
解决:针对Node.js应用,可通过applicationHost.xdt配置启动钩子,或在Azure门户开启"始终开启"(Always On)避免实例休眠,确保实例启动后立即就绪。校验负载测试请求的无状态性
即使session affinity设为OFF,若负载测试工具自动复用Cookie或请求头带有固定标识,仍会导致流量绑定到单个实例。
解决:在负载测试中禁用Cookie持久化,确保每个请求的请求头无会话关联信息。确认实例运行状态
登录Azure门户,进入App Service的"实例"页面,检查4个实例是否均处于运行中状态。若存在启动中或异常实例,流量不会分配过去。
解决:重启异常实例,等待所有实例状态正常后再执行测试。检查定价层与资源限制
若使用基础层(B系列),需确认实例未达到CPU/内存限制,否则负载均衡器会减少该实例的流量分配;免费/共享层不支持真正的多实例部署。
解决:升级至标准层(S系列)或更高,同时监控实例的资源使用率,优化应用代码减少资源消耗。验证负载均衡策略
Azure App Service默认轮询分配流量,但如果个别实例响应时间过长,会被暂时排除。查看应用监控中的"实例响应时间""CPU使用率"指标,确认所有实例性能一致。
解决:优化应用启动逻辑,避免实例启动后出现长时间初始化操作;调整应用的资源配额,确保实例性能达标。
内容的提问来源于stack exchange,提问作者Stefan

