在一个 webjob 中有很多触发器(blob、servicebus、timer)会降低 webjob 的性能吗?
有没有办法通过许多触发器来提高 webjob 的性能?
一个重量级的 webjob 可以分成较小的重量级 webjob 吗?
2 回答
将 Azure WebJobs 作为 Azure App Service 的一项功能来运行后台作业,如下面的官方文档所述。
WebJobs 是 Azure 应用服务的一项功能,使你能够在与 Web 应用、API 应用或移动应用相同的上下文中运行程序或脚本。使用 WebJobs 无需额外费用。
虽然它说no additional cost
,WebJob 作为一个简单而有用的功能是在 Azure 发布其他类似和更强大的服务之前创建的,如下面的同一个文档中介绍了 Functions。
Azure Functions 提供了另一种运行程序和脚本的方法。有关 WebJobs 和 Functions 之间的比较,请参阅在 Flow、Logic Apps、Functions 和 WebJobs 之间进行选择。
在上面的参考文档中,该Summary
部分推荐了它的最佳应用场景。
概括
Azure Functions 提供更高的开发人员生产力、更多编程语言选项、更多开发环境选项、更多 Azure 服务集成选项和更多定价选项。对于大多数情况,它是最佳选择。
以下是 WebJobs 可能是最佳选择的两种情况:
- 您需要更多地控制监听事件的代码,即 JobHost 对象。Functions 提供了有限数量的方法来自定义 host.json 文件中的 JobHost 行为。有时您需要做一些 JSON 文件中的字符串无法指定的事情。例如,只有 WebJobs SDK 允许您为 Azure 存储配置自定义重试策略。
- 你有一个要为其运行代码片段的应用服务应用,并且希望在同一个 DevOps 环境中一起管理它们。
对于要运行代码片段以集成 Azure 或第三方服务的其他方案,请选择 Azure Functions over WebJobs 和 WebJobs SDK。
同时,根据我在 Azure 上的经验,WebJobs 和 Functions 只适用于一些简单、轻量级的任务工作。对于高性能要求,Azure Batch 服务是在成本和易用性之间取得平衡的不错选择。
1. 单个webjob中有很多触发器(blob、servicebus、timer)会降低webjob的性能吗? 前提是您的网络作业不是单例。您可以通过多个触发器在您的网络作业中拥有多个功能,并且性能不会降低。(前提是你的 webapp 计划足够强大,可以处理所有负载。)
2.有没有什么办法可以提高具有许多触发器的webjob的性能?- 最好的方法是将 webjob 分成更小的 webjobs,每个 webjob 都有一个触发器。并根据负载扩展您的网络作业(添加更多实例)。此外,如果您的网络作业在 5 分钟内执行,您还可以选择使用 Azure Function App。这提供了一个更好的选择。或者,假设 webjob 执行需要超过 5 分钟,您可以将 webjob exe 作为 docker 映像,并使用 ACI 按需使用逻辑应用程序配置它们。在这种情况下,您将在逻辑应用中配置触发器。
1. 一个重量级的网络作业可以分成较小的重量级网络作业吗?-是的,请参阅我之前的答案。