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

如何在多实例Azure App Service中控制基于租户的作业执行

Azure App Service多实例部署Spring多租户定时作业方案及实例数查询方法

跨实例按租户作业执行管控逻辑设计

核心实现思路

通过分片绑定+分布式锁的方案实现租户作业隔离,避免多实例下任务重复执行:

  • 提前做租户分片配置:将所有租户ID按照哈希取模或者固定区间的方式划分为N个分片,N的取值要高于你预期的App Service最大扩容实例数,避免后续扩容时需要调整分片规则。
  • 引入分布式锁绑定分片与实例:优先选用Azure原生服务做锁存储,可选Azure Blob存储租约、Azure Redis缓存两种方案,每个分片对应唯一的锁标识。每个App Service实例启动后,定时轮询抢锁,抢到某几个分片的锁后,仅处理这几个分片下所有租户的批处理作业,未抢到锁的分片不处理。
  • 配置失效转移机制:给所有分布式锁设置合理的超时时间,持有锁的实例需要定时更新锁的过期时间(心跳),如果实例异常 crash,锁会自动超时释放,其他存活实例下次抢锁时就会承接这部分分片的作业,不会出现任务中断。
  • 适配Spring现有定时逻辑:可以直接集成ShedLock第三方组件,不需要从零实现锁逻辑,只需将锁的存储源配置为你选用的Azure Redis或者Blob存储即可,和现有Spring定时任务的改造成本极低。

补充注意:所有批处理作业必须做好幂等校验,极端锁冲突场景下即使同个租户的任务被两个实例同时触发,也不会出现数据重复写入、脏写的问题。

Azure App Service实例总数查询方法

分为代码内查询和控制台查询两类场景:

代码内运行时查询

  • 每个App Service实例的唯一标识可以直接读取环境变量WEBSITE_INSTANCE_ID获取
  • 查询当前App Service总实例数可以调用Azure Resource Manager(ARM) 接口,身份认证直接用App Service自带的系统分配托管身份,不需要额外存储密钥,请求路径为:https://management.azure.com/subscriptions/{你的订阅ID}/resourceGroups/{你的资源组名}/providers/Microsoft.Web/sites/{你的App Service名称}/instances?api-version=2022-03-01,返回结果的数组长度就是当前正在运行的实例总数。

运维侧查询

  • Azure Portal 方式:进入对应App Service的「概览」页,即可直接看到当前运行的实例数指标
  • Azure CLI 方式:执行以下命令直接返回实例总数:
az webapp list-instances --name <app-service名称> --resource-group <资源组名称> --query "length([])"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:06:07