【问题标题】:Many triggers in single webjob单个网络作业中的许多触发器
【发布时间】:2018-12-27 12:05:37
【问题描述】:
  1. 在一个 webjob 中有很多触发器(blob、servicebus、timer)会降低 webjob 的性能吗?

  2. 有没有什么方法可以通过许多触发器来提高 webjob 的性能?

  3. 可以将重量级 Web 作业划分为较小重量级的 Web 作业吗?

【问题讨论】:

  • 到目前为止你尝试过什么?你已经测量过什么了吗?
  • @Peter 是的,我通过负载测试测量了性能,似乎性能随着用户数量的增加而下降。这可能是什么原因?是因为 webjob 体积大吗?拥有这样的网络作业的最佳做法是什么。
  • 这取决于它做什么以及它是如何做到的。你能分享一些相关的代码吗?您也许可以将 webjob 拆分为多个 azure 函数,每个函数都有自己的触发器。

标签: azure azure-webjobs azure-webjobs-triggered


【解决方案1】:

将 Azure WebJobs 作为 Azure App Service 的一项功能来运行后台作业,如下所述the offical document

WebJobs 是 Azure 应用服务的一项功能,可让您在与 Web 应用、API 应用或移动应用相同的上下文中运行程序或脚本。使用 WebJobs 无需额外费用。

虽然上面写着no additional cost,但WebJob作为一个简单而有用的功能是在Azure发布其他类似且更强大的服务之前创建的,如下面的同一个文档中介绍了Functions。

Azure Functions 提供了另一种运行程序和脚本的方法。有关 WebJobs 和 Functions 之间的比较,请参阅Choose between Flow, Logic Apps, Functions, and WebJobs

在上面的参考文档中,Summary部分推荐了它的最佳应用场景。

总结

Azure Functions 提供更高的开发人员生产力、更多编程语言选项、更多开发环境选项、更多 Azure 服务集成选项以及更多定价选项。对于大多数情况,它是最佳选择。

以下是 WebJobs 可能是最佳选择的两种情况:

  • 您需要更多地控制监听事件的代码,即 JobHost 对象。 Functions 提供了有限数量的方法来自定义 host.json 文件中的 JobHost 行为。有时您需要做一些 JSON 文件中的字符串无法指定的事情。例如,只有 WebJobs SDK 允许您为 Azure 存储配置自定义重试策略。
  • 您有一个要为其运行代码 sn-ps 的应用服务应用,并且您希望在同一个 DevOps 环境中一起管理它们。

对于您想要运行代码 sn-ps 以集成 Azure 或第三方服务的其他场景,请选择 Azure Functions over WebJobs with the WebJobs SDK。

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

【讨论】:

    【解决方案2】:

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

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

    1.可以将重量级 webjob 划分为较小重量级 webjob 吗? - 是的,请参阅我之前的答案。

    【讨论】:

    • 不客气。如果您还有任何疑问,请随时询问。
    • 我的应用程序中运行了 3 个不同的后台任务,例如每 5 分钟 1 个、每小时 1 个以及一天中的特定时间一个。是否可以将多个计时器触发器添加到单个 Web 作业,或者我需要创建 3 个不同的 Web 作业来实现这一点?
    • 我建议您创建 3 个具有不同计时器触发器的逻辑应用程序,并通过逻辑应用程序调用您的 Web 作业。根据我的说法,这更具可配置性,因为如果您将来需要更改计时器,您可以通过逻辑应用程序来完成,而您实际上不需要部署任何代码。这绝对行得通。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多