新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/10/2 16:28:01来源:尧图网络
【App Service 】WebJobs 多实例实验:谁在运行,什么时候运行?
问题描述把 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 InstanceContinuous默认在应用的每个实例上启动任务3 份任务进程持续运行持续运行Single InstanceContinuous配置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.zipcontinuous-single.zipmanual.zip和scheduled.zip。然后通过App Service的Web Job门户分别创建四个web job参考在门户上创建WebJob的文档使用预生成示例创建计划的 Web 作业 - Azure App Service | Azure Docs实验结果1continuous-multi 连续运行的多实例部署结果为在3个实例上这个webjob在每一个实例上都在执行。2continuous-single连续运行的单实例部署结果为在3个实例的环境中这个webjob只在一个实例上执行。3manual手动触发的webjob在3个实例的环境中每次只在一个实例上执行。4scheduled按时触发的webjob在3个实例的环境中每次只在一个实例上执行。只是后一次执行的实例可能发生变化。参考资料应用服务 WebJobs 概述 应用服务 WebJobs 概述 - Azure App Service | Azure DocsHow would I scale a timer triggered webjob on an Azure App service to multiple app service instances? How would I scale a timer triggered webjob on an Azure App service to multiple app service instances? - Microsoft QA当在复杂的环境中面临问题格物之道需浊而静之徐清安以动之徐生。 云中恰是如此!
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

终端增强与智能辅助框架OpenShell:模糊匹配与AI命令生成实战 2026/10/2 16:27:58

终端增强与智能辅助框架OpenShell:模糊匹配与AI命令生成实战

你有没有想过,每天在终端里敲的几百条命令里,有多少是重复劳动?我统计过我自己的操作,大概有百分之三十的时间花在翻历史记录、拼长参数、或者去搜索“那条命令怎么写”上面。OpenShell这个项目就是从这种烦躁感里长出来的——它不…

阅读更多 →
Ollama 本地大模型实战:一条命令跑通 REST API 与 TaoToken 统一 Key 2026/10/2 16:27:52

Ollama 本地大模型实战:一条命令跑通 REST API 与 TaoToken 统一 Key

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
GPT-6.1 Sol 实战:做一个可交互的 3D 汽车展厅 2026/10/2 16:27:52

GPT-6.1 Sol 实战:做一个可交互的 3D 汽车展厅

GPT-6.1 Sol 实战:做一个可交互的 3D 汽车展厅 我用 GPT-6.1 Sol 做了一个汽车展示网站。这次不只看截图,而是看看它能不能把模型、材质、镜头和交互组织成一个可操作的成品。想尝试 AI 编程,也可以了解一下灵链云API(llapi.org&…

阅读更多 →
OpenClaw连接DeepSeek图文教程全解析:从API key到模型配置的TaoToken实践 2026/10/2 16:27:52

OpenClaw连接DeepSeek图文教程全解析:从API key到模型配置的TaoToken实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
如何使用 GitHub Copilot 发送 Tweet:TaoToken 统一 Key 打通 Twitter API 的 Python 实战 2026/10/2 16:27:52

如何使用 GitHub Copilot 发送 Tweet:TaoToken 统一 Key 打通 Twitter API 的 Python 实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
DataTable搜索条件全攻略:全局搜索、列搜索与自定义过滤 2026/10/2 16:27:52

DataTable搜索条件全攻略:全局搜索、列搜索与自定义过滤

后台系统里最磨人的从来不是复杂的业务逻辑,而是那些"看起来简单"的列表页。表格要能搜、能筛、要能记住条件,用户才愿意用。DataTable(也就是常搜到的 datatable js)能成为老牌表格插件,很大一部分原因就是…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉