202

I've created some Azure Webjobs that use triggers and I've just learnt about Azure Functions.

From what I understand Azure Functions seem to overlap with Azure Webjobs features and I have some difficulty to understand when to choose between Function and Webjob:

  • Unlike Webjobs, Functions can only be triggered, it hasn't been designed to run continuous process (but you can write code to create a continuous function).

  • You can write Webjobs and Functions using many languages (C#, node.js, python ...) but you can write your function from the Azure portal so it is easier and quicker to develop test and deploy a Function.

  • Webjobs run as background processes in the context of an App Service web app, API app, or mobile app whereas Functions run using a Classic/Dynamic App Service Plan.

  • Regarding the scaling, Functions seems to give more possibilities since you can use a dynamic app service plan and you can scale a single function whereas for a webjob you have to scale the whole web app.

So for sure there is a pricing difference, if you have an existing web app running you can use it to run a webjob without any additional cost but if I don't have an existing web app and I have to write code to trigger a queue should I use a webjob or a Function ?

Is there any other considerations to keep in mind when you need to choose ?

4

8 回答 8

193

应用服务中有几个选项。我不会涉及逻辑应用或 Azure 自动化,它们也涉及这个领域。

Azure Web 作业

这篇文章老实说是最好的解释,但我会在这里总结一下。

On Demand WebJobs 又名。计划的 WebJobs 又名。触发的 Web 作业

触发的 WebJobs 是在调用 URL 或schedule 属性存在于 schedule.job时运行一次的 WebJobs 。Scheduled WebJobs 只是创建了 Azure Scheduler Job 以按计划调用我们的 URL 的 WebJobs,但我们也支持 schedule 属性,如前所述。

概括:

  • +按需执行/脚本
  • +预定执行
  • -必须通过 .scm 端点触发
  • -缩放是手动的
  • -始终需要 VM

连续 WebJobs(非 SDK)

这些作业永远运行,当它们崩溃时我们会唤醒它们。您需要启用 Always On 才能使它们正常工作,这意味着在基本层及更高层中运行它们。

概括:

  • +可执行文件/脚本始终运行
  • -需要始终开启 - 基本层及以上
  • -始终需要 VM

使用 WebJobs SDK 的连续 WebJobs

从“WebJobs 功能”的角度来看,这些都不是什么东西。本质上,我们有一个针对 WebJobs 编写的甜蜜 SDK,它允许您基于简单的触发器执行代码。我稍后会更多地谈论这个。

概括:

  • +可执行文件/脚本始终运行
  • +更丰富的日志/仪表板
  • +支持触发器以及长时间运行的任务
  • -需要始终开启 - 基本层及以上
  • -缩放是手动设置的
  • -入门可能有点累
  • -始终需要 VM

Azure WebJobs SDK

Azure WebJobs SDK 是一个完全独立于 WebJobs 平台功能的 SDK。它被设计为在 WebJob 中运行,但实际上可以在任何地方运行。我们有客户以工人角色甚至在本地或其他云上运行它们,尽管支持只是最大的努力。

SDK 只是为了让运行一些代码以响应某些事件并绑定到服务/等变得容易。简单的。老实说,这在某些文档中得到了最好的介绍,但它的核心是“事件”+“代码”的性质。我们还做了一些很酷的可扩展性工作,但这是次要的核心目的。

概括:

  • 其中大部分都在上面提到
  • +你可以扩展和运行你想要的任何东西。完全控制。
  • -HTTP 的东西有点不稳定,但它可以工作

Azure 函数

Azure Functions 就是为了实现 WebJobs SDK 的核心目的,将其作为服务托管,并使其易于开始使用其他语言。我们还在这里介绍了“无服务器”的概念,因为这样做很有意义——我们知道我们的 SDK 是如何扩展的,所以我们可以为您做智能的事情。

Azure Functions 是一种非常受管理的体验。我们不支持自带主机。目前,我们不支持自定义扩展,但我们正在调查它。对于您能做什么和不能做什么,我们固执己见,但对于我们启用的功能,它们很流畅,易于使用和管理。

不过,我们为改进 Functions 所做的大部分“框架”工作都是通过 WebJobs SDK 完成的。例如,我们将为 WebJobs 上传一个新的 NuGet,它可以极大地提高日志记录的速度,这对 WebJobs SDK 用户来说具有巨大的性能优势。在将 Functions 作为“WebJobs SDK as a Service”发布时,我们确实改善了很多体验问题。

我可能有偏见,因为 Functions 是我们最新最好的,但请随意以我的方式为 Functions 拍摄更多缺点。

我可能最终会发布一个详细说明的博客,但我试图让这个论坛尽可能简洁。

于 2016-04-14T00:44:39.327 回答
17

我想在上面的长篇和有点旧的帖子上再补充两点。如果您在 azure functions 中选择消费计划,以下是限制

如果您想运行任何超过 10 分钟的作业,请选择 webjobs。Azure 函数,默认只运行5 分钟,如果你的进程超过 5 分钟,则 azure 函数会抛出超时异常。您可以在 host.json 中将超时时间增加到10分钟。

注意:如果您使用的是应用服务计划 Azure 功能,则不会出现超时问题。

区分的另一个原因是。如果您使用 azure 功能,那么您的初始启动时间会很慢,因为机器(容器)是动态创建的,一旦使用就会被销毁。

为避免冷启动,Azure 函数应用发布了高级计划,其中一个实例将一直运行,并且函数应用将根据负载开始扩展,您将根据消耗为一个实例和其他实例付费。

于 2018-01-17T07:36:19.327 回答
17

作为基于 WebJobs SDK 的 Azure Functions,它们提供了 WebJobs 中已有的大部分功能,但具有一些新的很酷的功能。

触发器方面,除了 WebJobs 已经可用的那些(例如服务总线、存储队列、存储 Blob、CRON 计划、WebHooks、EventHub 和文件云存储提供程序),Azure Functions 可以作为 API 触发。HTTP 调用不需要 kudu 凭据,但可以通过 Azure AD 和第三方身份提供程序进行身份验证。

关于输出,唯一的区别是函数可以在通过 HTTP 调用时返回响应。

两者都支持多种语言,包括:bash (.sh)、批处理 (.bat / .cmd)、C#、F#、Node.Js、PHP、PowerShell 和 Python。

作为目前处于预览阶段的功能,工具仍然不理想。但微软正在努力。希望我们在本地开发和测试函数时获得与我们目前使用 Visual Studio 为 WebJobs 所做的相同的灵活性。

Functions 带来的最显着和最酷的优势是可以替代具有“无服务器”模型的动态服务计划,在这种情况下,我们不需要管理 VM 实例或扩展;这一切都为我们管理。此外,由于没有专用实例,我们只需为实际使用的资源付费。

两者之间的更详细比较: https ://blog.kloud.com.au/2016/09/14/azure-functions-or-webjobs/

HTH :)

于 2016-09-15T08:19:26.363 回答
14

根据文档Azure Functions 具有 WebJobs 没有的以下内容:

  • 自动缩放(CPU 和内存根据运行时确定的需求进行缩放)
  • 按使用付费定价(消费计划而不是应用服务计划)
  • 更多触发事件(如 WebHooks)
  • 浏览器内开发(Visual Studio 仍然可以)
  • F# 支持

简单地说:Azure Functions 是较新的动物。如果您还没有应用服务计划,我会选择 Functions,因为从长远来看,我看不出从 WebJobs 开始会更好的任何理由(不过,Functions 工具可能还不够稳定)。

于 2016-12-14T22:33:18.227 回答
8

我意识到这个答案我已经很晚了,但由于这仍然是谷歌上的热门搜索结果,我想严格从成本的角度给出关于这个主题的一些指导,因为 OP 似乎对成本有一些担忧. 这里已经有一些很好的答案,它们讨论了每个服务如何工作的技术限制和细节,所以我不会重复这些答案。

如果您绝对需要“免费”运行的东西(因为您已经为您的网络应用程序支付的费用没有额外费用),那么您有两种选择:

  1. Webjobs - 与您现有的 Web 应用程序一起部署,并使用与您的 Web 应用程序相同的资源。使用 webjobs 没有额外的金钱成本,但如前所述,有一些限制可能会导致您的 web 应用程序的性能成本。
  2. 功能 - 使用消费计划时,会为您分配一定数量的免费执行。在撰写本文时,这个数字实际上相当高,100 万次免费处决。但是,100 万的执行限制并不是可能给您带来麻烦的限制;它是 400K GB-s(千兆字节秒)。这基本上是您的函数使用的内存量乘以它运行的秒数的计算(请参阅此处定价页面上的官方计算)。您会惊讶于这笔免费分配的使用速度有多快。

如果您担心成本但不限于完全没有成本,那么您有更多选择。

  1. 功能 - 您可以以相对便宜的价格在消费计划或应用服务计划中运行。但请记住,GB-s 计费模型。如果您正在使用消费计划并且正在做频繁的“繁重”工作 - 您可能会对大笔账单感到惊讶。
  2. 云服务 - 尚未讨论此选项作为替代方案,主要是因为 OP 没有询问它。但这也是一个可行的选择。云服务最终只是在云中运行的虚拟机,因此您可以在它们上运行所需的任何后台作业,并且它们可以很好地扩展/缩小(尽管您必须连接自己的触发器才能执行,与 webjobs/functions 相比略有不便)。它们有更多与它们相关的初始成本(因为无论您是否使用它,您都按实例付费)但是如果您的工作需要不断运行并且正在做很多“繁重”的工作,那么云服务可能是一个更好的选择因为在我看来,管理/监控固定价格的虚拟机比执行和千兆字节秒更容易。

如果您有兴趣阅读一些特定场景以及为什么我会选择其中一个(webjobs、functions、cloud services),我最近刚刚写了一篇关于webjobs vs functions vs cloud services的博客文章。

于 2018-12-30T15:23:06.410 回答
3

我想给出这两个 Azure 函数建立在 AppService 和 WebJobs SDK 之上的共性不同之处。WebJobs SDK 将为您提供更多的自由使用,而 Azure 功能更加结构化,开发人员的责任更少。

看共性的时候都使用了面向函数的编程模式,绑定了触发器/输入/输出,支持外部库,可以在本地运行和调试支持runtime洗浴用品。

差异

|-----------------------|------------------|
|      Functions        |     Web Jobs     |
|-----------------------|------------------|
|Can support HTTP       | Can't support HTTP
|                       |  requests        |
|-----------------------|------------------|
|Supports a variety of  | Traditional .NET |
|languages/tools        | developer        |
|                       | experience       |
|-----------------------|------------------|
|Bindings are configured| Config files are |
|using attributes       | used             |
|-----------------------|------------------|
|Scale is managed by    | Scale is managed |
|Azure                  | by user          |
|-----------------------|------------------|
|Limited control over   |Host can be       |
|host                   |controlled by user|
--------------------------------------------

在此处输入图像描述

于 2019-11-30T18:06:46.410 回答
3

一个主要考虑因素是 Azure Functions 在版本 1 之后不再支持完整的 .NET Framework,该版本已随 v2.0 停止使用,并且在现在预览版 v3.0 中不会更改。

同时,幸运的是,这种强大的武装方法尚未应用于Azure WebJobs

WebJobs SDK 版本 3.x 支持 .NET Core 和 .NET Framework 控制台应用程序。

于 2019-11-15T23:16:54.157 回答
1

我一直为这个问题找到的一个答案是你可以在 Azure WebJobs 中自定义主机,但你不能自定义 Azure Functions 的主机,

这方面的一个示例是“在 WebJob 中,您可以为调用外部系统创建自定义重试策略”。

无法在 Azure 函数中配置此类策略。

于 2020-10-15T16:08:43.630 回答