单个 webjob 中的许多触发器

Many triggers in single webjob

  1. 在单个 webjob 中使用多个触发器(blob、servicebus、timer)是否会降低 webjob 的性能?

  2. 有没有什么方法可以提高具有多个触发器的 webjob 的性能?

  3. 一个重量级的webjob可以拆分成多个重量级较小的webjob吗?

将 Azure WebJobs 视为 Azure 应用服务的一项功能,运行 后台作业如下 the offical document 所述。

WebJobs is a feature of Azure App Service that enables you to run a program or script in the same context as a web app, API app, or mobile app. There is no additional cost to use WebJobs.

尽管它说 no additional cost,但 WebJob 作为一个简单而有用的功能是在 Azure 发布其他类似且更强大的服务之前创建的,这些功能与 Functions 在同一文档中介绍如下。

Azure Functions provides another way to run programs and scripts. For a comparison between WebJobs and Functions, see Choose between Flow, Logic Apps, Functions, and WebJobs.

以上参考文档中,Summary部分推荐了其最佳应用场景。

Summary

Azure Functions offers greater developer productivity, more programming language options, more development environment options, more Azure service integration options, and more pricing options. For most scenarios, it's the best choice.

Here are two scenarios for which WebJobs may be the best choice:

  • You need more control over the code that listens for events, the JobHost object. Functions offers a limited number of ways to customize JobHost behavior in the host.json file. Sometimes you need to do things that can't be specified by a string in a JSON file. For example, only the WebJobs SDK lets you configure a custom retry policy for Azure Storage.
  • You have an App Service app for which you want to run code snippets, and you want to manage them together in the same DevOps environment.

For other scenarios where you want to run code snippets for integrating Azure or third-party services, choose Azure Functions over WebJobs with the WebJobs SDK.

同时,根据我在 Azure 上的经验,WebJobs 和 Functions 仅适用于一些简单且轻量级的任务作业。对于高性能需求,Azure Batch service是一个很好的选择,可以在成本和易用性之间取得平衡。

1.在单个 webjob 中使用多个触发器(blob、servicebus、timer)是否会降低 webjob 的性能? 前提是你的 webjob 不是单例的。您可以在具有多个触发器的 webjob 中拥有多个功能,并且性能不会降低。 (前提是您的 webapp 计划足够强大以处理所有负载。)

2.Is 有什么方法可以提高具有多个触发器的 webjob 的性能? - 最好的方法是将网络作业分成更小的网络作业,每个网络作业都有一个触发器。并根据负载扩展您的网络作业(添加更多实例)。此外,如果您的 webjob 在 5 分钟内执行,您还可以选择使用 Azure Function App。这提供了一个更好的选择。或者,假设 webjob 执行时间超过 5 分钟,您可以将 webjob exe 作为 docker 图像,并使用 ACI 按需使用逻辑应用程序提供它们。在此场景中,你将在逻辑应用中配置触发器。

1.一个重量级的 webjob 可以拆分成更小的重量级的 webjob 吗? - 是的,看我之前的回答。