一个很简单的问题:
如果Azure WebJobs是免费的,为什么有人会使用Azure调度器?
我找不到任何关于"azure webjobs vs azure scheduler"的主题
主要区别在于webjob包含了调度器可以做的所有事情:
- WebJob可以做的更多(运行SQL命令等)
WebJobs的实际调度位构建在调度程序之上。当你在底层的日程表上设置一个Web Job时,它使用调度程序来启动它。WebJobs提供了一个漂亮的小位置来存放要执行的代码。事实上,如果你为一个网站创建WebJobs,看看门户网站上的Scheduler,你会看到它们也列在那里。
还要注意,调度程序可以调用到其他没有运行Azure的系统。如果你有一些东西在云服务中运行,需要定期调用,或者即使有些东西托管在其他地方(另一个提供商或本地),调度程序是你可以设置的地方。
关于成本方面,调度程序也有一个免费的层:http://www.windowsazure.com/en-us/pricing/details/scheduler/.
现在是2016年。以下答案不再准确。
WebJobs现在也有一个内置的调度程序,这个调度程序可以通过一个cron表达式来定义。
发布到Azure时,您可以选择是由调度程序触发WebJob还是由WebJob内部调度程序触发。
重要提示: Azure调度器的频率限制为1小时或1分钟,具体取决于是否付费。然而,对于内部调度器,你的App Service需要Always On来保持运行并启动作业。Always On状态可能会影响您的定价。
-
监视连续作业,如果它们退出,则重新执行它们。通过这种方式,它们的行为更像是本地机器中的"服务"。有一个模块监控并保持你的应用程序工作。Always-ON是一个功能,可以帮助您的网站保持活跃,从而使您的webjob持续运行。
-
Scheduler用于触发webjobs。它使用调度器用户帐户(而不是后端帐户)。这样,您就可以从免费的调度器层移出,注册到更高的层以满足您的需求。但本质上,所有调度器所做的就是访问https端点(这是公共的,但需要您的授权)。
-
触发的作业(计划的和按需的)由https调用调用。这些调用是负载均衡的——就像一个有很多实例的web应用是负载均衡的一样。默认情况下,连续作业并发运行,但可以设置为单例。
对于从版本2开始的Webjobs,没有理由再使用Azure Scheduler了。事实上,Azure Portal已经将此功能标记为(Legacy)。
从WebJob SDK v2中引入了额外的触发器,其中之一是TimerTrigger,它与CRON表达式一起调度执行。这种执行模式不需要任何额外的Azure结构,你只需要将webapp设置为AlwaysOn来保证webjob的运行。
另一个与TimerTriggers一起工作的azure服务是azure Functions,它建立在WebJob SDK之上,允许无服务器执行。