Azure Webjobs与Azure函数:如何select

我创build了一些使用触发器的Azure Webjobs ,并且我刚刚了解了Azure函数 。

从我所了解的Azurefunction似乎与Azure Webjobsfunction重叠,我有一些困难,以了解何时在function和Webjob之间进行select:

  • 与Webjobs不同的是,函数只能被触发,它并没有被devise成运行连续的过程(但是你可以编写代码来创build一个连续的函数)。

  • 您可以使用多种语言(C#,node.js,python …)编写Webjobs和函数,但可以从Azure门户编写函数,以便开发testing和部署函数更加轻松快捷。

  • Webjobs在App Service Web应用程序,API应用程序或移动应用程序的上下文中作为后台进程运行,而函数则使用经典/dynamic应用程序服务计划运行。

  • 关于缩放,函数似乎给了更多的可能性,因为你可以使用dynamic的应用程序服务计划,你可以缩放一个单一的function,而对于一个webjob你必须扩展整个web应用程序。

所以肯定有一个价格差异,如果你有一个现有的networking应用程序运行,你可以使用它来运行一个webjob没有任何额外的成本,但如果我没有现有的networking应用程序,我必须编写代码来触发一个队列我应该使用webjob还是函数?

在需要select时,是否还有其他注意事项需要记住?

在App Service中有几个选项。 我不会触及Logic应用程序或Azure自动化,这也触及这个空间。

Azure WebJobs

这篇文章是最好的解释,但我会在这里总结。

随需应变的Web工作。 预定WebJobs aka。 触发的Web工作

触发的WebJobs是WebJobs,当URL被调用时或调度属性出现在schedule.job中时,它将运行一次。 计划的WebJobs只是WebJobs,它们创build了一个Azure Scheduler Job来按计划调用我们的URL,但是我们也支持schedule属性,如前所述。

概要:

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

连续的WebJobs(非SDK)

这些工作永远运行,当他们崩溃时我们会把他们叫醒。 您需要启用“始终开启”才能正常工作,这意味着要在基本层及以上版本中运行它们。

概要:

  • +可执行文件/脚本始终运行
  • -始终需要 – 基本层及以上
  • - VM始终是必需的

连续WebJobs与WebJobs SDK

这些不是从“WebJobsfunction”的angular度来看的。 从本质上讲,我们有这个我们写的针对WebJobs的甜蜜的SDK,它允许您基于简单的触发器来执行代码。 稍后我会再谈这个。

概要:

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

Azure WebJobs SDK

Azure WebJobs SDK是一个与WebJobs平台function完全分离的SDK。 它被devise成在WebJob中运行,但可以真正在任何地方运行。 我们有客户运行他们的工作人员angular色,甚至在前台或其他云,虽然支持只是尽最大的努力。

SDK只是简单地运行一些代码来响应某些事件,并绑定到服务等。 简单。 这在一些文档中是最好的,但其核心是“事件”+“代码”性质。 我们也做了一些很酷的可扩展性工作,但这是次要的核心目的。

概要:

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

Azure函数

Azure函数就是把WebJobs SDK的核心目的作为一项服务来托pipe,并且使其他语言开始变得容易。 我们在这里也引入了“无服务器”的概念,因为这样做非常有意义 – 我们知道我们的SDK是如何扩展的,所以我们可以为您做一些聪明的事情。

Azurefunction是一个非常严格的pipe理经验。 我们不支持自己的主机。 目前,我们不支持自定义扩展,但我们正在调查。 我们对自己能做什么和不能做什么都有自己的见解,但是对于我们所能做的事情来说,它们是光滑的,易于使用和pipe理的。

不过,我们已经完成的大部分“框架”function都是通过WebJobs SDK完成的。 例如,我们将上传一个新的用于WebJobs的NuGet,这将极大地提高日志logging的速度,这对WebJobs SDK用户来说具有巨大的性能优势。 在将“WebJobs SDK即服务”运输function中,我们确实改进了许多经验问题。

  • +支持多种语言
  • +完全pipe理,dynamic缩放
  • +易于使用的门户瓦特/用户pipe理连接/等。
  • -主机不可定制(还)
  • ~运行在一个单独的“应用程序”,这需要在您的回购一些configuration,但长期维护更容易。
  • ~ 没有工具(还)有些工具现在在alpha或预览 – https://www.npmjs.com/package/azurefunctions (更新2017年2月:用于Azurefunction的Visual Studio工具现在可在预览: https://博客。 msdn.microsoft.com/webdev/2016/12/01/visual-studio-tools-for-azure-functions/ )

我可能有偏见,因为函数是我们最新和最伟大的,但随意为我的方式拍摄更多的function缺点。

我可能最终会发布一个更详细的博客,但我尽量保持这个论坛尽可能简洁。

作为基于WebJobs SDK的Azure函数,它们提供了WebJobs中已有的大部分function,但具有一些新的酷炫function。

触发器而言 ,除了WebJobs(例如Service Bus,存储队列,存储Blob,CRON计划,WebHooks,EventHub和文件云存储提供程序)之外,Azure函数还可以作为API触发。 HTTP调用不需要kudu凭据,但可以通过Azure AD和第三方身份提供程序进行身份validation。

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

它们都支持各种语言 ,包括:bash(.sh),batch(.bat / .cmd),C#,F#,Node.Js,PHP,PowerShell和Python。

目前在预览function, 工具仍然不理想。 但是微软正在努力。 希望我们可以在本地开发和testing函数,就像我们目前用Visual Studio做WebJobs一样灵活。

由函数带来的最重要和最酷的优势是具有“无服务器”模型dynamic服务计划的替代scheme,其中我们不需要pipe理VM实例或扩展; 这一切都为我们pipe理。 另外,由于没有专门的实例,我们只支付我们实际使用的资源。

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

HTH 🙂

根据文档 Azure函数有以下WebJobs不:

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

简而言之:Azure函数是较新的动物。 如果你还没有一个应用程序服务计划,我会去使用函数,因为从长远来看,我没有看到任何开始使用WebJobs会更好的原因(function工具可能不是已经稳定)。