【App Service 】WebJobs 多实例实验:谁在运行,什么时候运行?

简介: 本文详解 Azure App Service 多实例下 WebJob 的执行逻辑:持续型默认每实例各运行一份;手动/定时触发则每次仅由单个实例执行,避免重复。通过 PowerShell 实验验证四种场景行为,并提供可复现的测试方案。

问题描述

把 Azure App Service 扩展到 3 个实例后,WebJob 会不会也同时运行 3 份?

如果每天定时生成一份报表,会不会生成 3 份?

在门户里手动点击一次 Run,又会由哪个实例执行?

答案取决于 WebJob 的类型,不能仅根据 App Service 的实例数量判断。

持续型默认在所有应用实例上运行;

手动触发和定时触发每次由一个实例执行,不会因为应用有 3 个实例就广播执行 3 次。

这篇文章用同一个 PowerShell 脚本做对照实验,记录实例 ID、UTC 时间和运行批次,让“在哪个实例运行”可以直接从日志判断。

 

问题解答

门户中的三种常见用法是 Continuous、Triggered/Manual 和 Triggered/Scheduled。

微软文档明确说明,Scheduled 也是 Triggered,只是触发来源从手动操作变成了时间计划。

假设目标应用稳定运行在 3 个实例上,行为如下:

使用方式 底层类型 多实例下的运行方式 3 个实例时的稳定状态预期
持续运行,Multi Instance Continuous 默认在应用的每个实例上启动任务 3 份任务进程持续运行
持续运行,Single Instance Continuous 配置 is_singleton: true 后,只在一个实例运行该任务 1 份任务进程持续运行
手动触发 Triggered 每次触发由平台选择一个实例执行 点击一次 Run,启动一份执行,不是三份
定时触发 Triggered 每个计划触发点由一个实例执行 正常情况下,每个触发点启动一份执行,不是三份

 

这里的“一个实例”不意味着“永远固定在同一台机器”。下一次触发、实例替换或持续型单实例任务接管后,执行实例可能发生变化。

平台也不承诺手动触发会依次轮询 A、B、C,所以连续点击几次却一直落在 A 上,并不违反上述规则。

实验准备

在同一段PowerShell脚本中,输出当前webjob运行的时间,实例ID等信息,以判断它是多实例运行还是单实例运行。

param(
    [ValidateRange(1, 3600)][int]$HeartbeatSeconds = 10,
    [ValidateRange(0, 3600)][int]$WorkSeconds = 10,
    [ValidateRange(0, 10000)][int]$MaxHeartbeats = 0,
    [string]$OutputRoot
)
$ErrorActionPreference = 'Stop'
$instance = $env:WEBSITE_INSTANCE_ID
if (-not $instance) { $instance = 'local-not-azure' }
$job = $env:WEBJOBS_NAME
if (-not $job) { $job = 'local-demo' }
$type = $env:WEBJOBS_TYPE
if (-not $type) { $type = 'triggered' }
$session = [guid]::NewGuid().ToString('N')
if (-not $OutputRoot) {
    if ($env:WEBSITE_INSTANCE_ID -and $env:HOME) {
        $OutputRoot = Join-Path $env:HOME 'data\webjob-instance-demo'
    } else {
        $OutputRoot = Join-Path ([IO.Path]::GetTempPath()) 'webjob-instance-demo'
    }
}
$safeJob = $job -replace '[^a-zA-Z0-9_-]', '_'
$safeInstance = $instance -replace '[^a-zA-Z0-9_-]', '_'
$directory = Join-Path (Join-Path $OutputRoot $safeJob) $safeInstance
$null = New-Item -ItemType Directory -Path $directory -Force
$logPath = Join-Path $directory "$session.jsonl"
function Write-Record([string]$EventName) {
    $record = [ordered]@{
        utc = [DateTime]::UtcNow.ToString('o')
        event = $EventName
        job = $job
        type = $type
        instance = $instance
        computer = $env:COMPUTERNAME
        processId = $PID
        session = $session
        platformRunId = $env:WEBJOBS_RUN_ID
    }
    $line = $record | ConvertTo-Json -Compress
    Write-Output $line
    # One file per process session: instances never append to the same file.
    Add-Content -LiteralPath $logPath -Value $line -Encoding UTF8
}
function Test-Shutdown {
    return ($env:WEBJOBS_SHUTDOWN_FILE -and
        (Test-Path -LiteralPath $env:WEBJOBS_SHUTDOWN_FILE))
}
function Wait-OrShutdown([int]$Seconds) {
    for ($i = 0; $i -lt $Seconds; $i++) {
        if (Test-Shutdown) { return }
        Start-Sleep -Seconds 1
    }
}
Write-Record 'START'
if ($type -eq 'continuous') {
    $count = 0
    while (-not (Test-Shutdown)) {
        Write-Record 'HEARTBEAT'
        $count++
        # A finite limit is for LOCAL tests only. Azure continuous jobs restart.
        if ($MaxHeartbeats -gt 0 -and $count -ge $MaxHeartbeats) { break }
        Wait-OrShutdown $HeartbeatSeconds
    }
} else {
    # Simulate a short task. This delay is not an exactly-once guarantee.
    Wait-OrShutdown $WorkSeconds
}
if (Test-Shutdown) { Write-Record 'STOP_REQUESTED' }
else { Write-Record 'END' }

把以上内容复制到文件 run.ps1  中,然后分别打包为四个zip文件:continuous-multi.zip , continuous-single.zip,manual.zip 和 scheduled.zip。

然后通过App Service的Web Job门户分别创建四个web job,参考在门户上创建WebJob的文档:https://docs.azure.cn/zh-cn/app-service/quickstart-webjobs?tabs=windows#add-the-webjob-in-the-azure-portal

实验结果

1:continuous-multi , 连续运行的多实例部署结果为,在3个实例上,这个webjob在每一个实例上都在执行。

 

2:continuous-single, 连续运行的单实例部署结果为,在3个实例的环境中,这个webjob只在一个实例上执行。

 

3:manual,手动触发的webjob,在3个实例的环境中,每次只在一个实例上执行。

 

4:scheduled,按时触发的webjob,在3个实例的环境中,每次只在一个实例上执行。只是,后一次执行的实例可能发生变化。

 

参考资料

应用服务 WebJobs 概述 : https://docs.azure.cn/zh-cn/app-service/overview-webjobs

How would I scale a timer triggered webjob on an Azure App service to multiple app service instances? https://learn.microsoft.com/en-us/answers/questions/1689283/how-would-i-scale-a-timer-triggered-webjob-on-an-a

 

 


 

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

相关文章
|
9天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
7685 13
|
7天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
1645 4
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
|
4天前
|
人工智能 JavaScript 芯片
DeepSeek 官方偷偷上传 Harness 桌面端安装包,我已经用上了。。附最新下载地址
DeepSeek Harness 官方的桌面端安装包被网友扒出来了,2 分钟讲明白如何使用,体验如何,适合作为 AI 编程工具么?附最新 Windows 和 Mac 双端的下载地址
1410 1
|
8天前
|
人工智能 并行计算 PyTorch
秋叶 ComfyUI 2026 整合包 v3.2 完整部署教程:Python 3.13 + Torch 2.13 全栈升级
秋叶aaaki ComfyUI 2026年8月整合包v3.2正式发布!全面升级Python 3.13.11、PyTorch 2.13.0+cu130及ComfyUI v0.30.2,原生支持MiniMax H3、Wan 2.2、Qwen-Image-2.1等2026主流音视频/图像模型,解压即用,无需环境配置。
1191 9
|
21天前
|
人工智能 自然语言处理 安全
阿里云千问办公 QwenWork详细介绍:产品核心能力、典型场景、价格及常见问题解答
千问办公是阿里云推出的一站式AI办公平台,主打"不止于对话,更注重交付",依托通义千问旗舰大模型,用户一句话即可完成数据分析、PPT生成、视频剪辑等复杂任务,直接输出可用成果。产品深度打通钉钉生态与企业OA,覆盖桌面端、网页端,提供企业标准版198元/人/月等多档订阅方案,新用户注册即赠2000积分,适配工程师、HR、财务等多职业办公场景,成为能动手干活的"全能AI同事"。
3671 10
|
5天前
|
编解码 缓存 PyTorch
16G 显卡能跑 Qwen-Image 2.1 吗?
9月20日,阿里Qwen开源Qwen-Image-2.1:7B DiT图像模型+8B文本编码器+VAE,单模型支持文生图与图像编辑,原生输出2K PNG(含Alpha通道),支持10张参考图。在自建Qwen-Image-Bench达60.28分(开源模型第一),GenAI Showdown文生图排名7/15。16G显存可跑1024×1024(需INT8量化+ComfyUI优化),但2K需24G以上。注意其Qwen Research License限非商业用途。
609 1
|
6天前
|
人工智能 编解码 并行计算
MiniMax-H3 一键整合包技术文档:8G 显存运行 AI 漫剧制作 —— 角色替换 / 动作迁移 / 文图生视频部署与调参指南
MiniMax H3 是 MiniMax 开源的全模态视频生成模型,支持文/图/音/视多条件输入,输出最高2K、15秒带双声道音频视频。本文档详述其Int8量化版在8GB显存下的本地一键部署、三段式工作流(EDIT/REPLACE/CONTINUE)、参数调优及常见问题排查。(239字)
|
16天前
|
缓存 IDE Java
【保姆级】Android Studio下载、安装和汉化教程(2026最新)
Android Studio 是 Google 官方推出的免费 Android 应用开发集成环境,基于 IntelliJ IDEA,内置模拟器、调试器、性能分析及 Compose 界面工具,功能全面,文档丰富,是安卓开发首选工具。(239字)
1725 1

热门文章

最新文章