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工具可能不是已经稳定)。