Azure WebApp Service 是非常适合中小型项目的云服务。 从我实际使用的感受来看, 有如下几个优点:

1 部署方便, 可以从VS一键发布

2 缩放方便, scale in / scale out 几秒迅速实现

3 调试方便, 测试环境可以远程debug;还可以实时从VS上观测log

4 开发方便, 几乎没有额外的学习成本

另外, 通过VSTS, 还很好的集成了Devops的CICD; 通过slot做stage, 做A/B test。非常实用。 

 

但是今天, 我想分享的是WebApp Service的Web job。 关于Web job的介绍, 请参考MSDN文章。 

WebJob 两种运行方式: 持续运行/按需运行。

持续运行, 一旦开始后, 就不会退出。 比较适合消息监控模式。 比如一直监控一个消息队列, 当队列中收到消息的时候, 后台任务便开始处理。处理完继续等待新的消息到来。建议使用Azure WebJob SDK开发, 对于使用Azure队列/存储有非常友好的、简单易学的开发框架。

按需运行,一种是手动去触发它,比如做一些数据的初始化工作,只需要在部署完成做一次即可;

另一种是用定时器去触发它。 现在在WebJob部署的时候, 很好的集成了CRON语法的调度设置, 比如 * */20 * * * *, 表示每20分钟执行一次。 如果是从VS部署web job的话, 可以在web job的根路径下放一个settings.job文件, 内容格式如下

1 {
2 /* execute at 3:00 amp everyday morning */
3     "schedule": "0 0 3 * * *"
4 }

这样在部署的时候(选上“按需运行”), 就可以按预定的调度执行了。 在这种情况下, 可以考虑不需要WebJob SDK。

 

关于部署,除了在Portal上操作之外,在VS中,WebJob项目即可以单独部署——跟WebSite部署一样导入PublishSetting文件,也可以随着指定WebSite一起部署(推荐)。 需要在VS中操作: 1 右键web项目, Add->; 2 选择 Existing Project as Azure Web Job ; 3 选择WebJob项目和运行方式。 

在WebSite项目中, 会多出一个文件 webjobs-list.json, 其中描述了有哪些web job

{
  "$schema": "http://schemastore.org/schemas/json/webjobs-list.json",
  "WebJobs": [
    {
      "filePath": "../myjob/myjob.csproj"
    }
}

 

在相关的Web job 下 , 会出现文件webjob-publish-settings.json, 其中描述了Web job的名称和运行方式;并且项目会依赖nuget package: Microsoft.Web.WebJobs.Publish

1 {
2   "$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json",
3   "webJobName": "myjob",
4   "runMode": "Continuous"
5 }

 

再加上前面提到的settings.job文件, 那么部署的三要素:部署到哪/如何运行/如何调度,就都齐了

 

关于WebJob的实例缩放,默认的WebJob会随着WebSite实例一起缩放, 也就是说, 有几个WebSite instance, 就会有多少个WebJob instance。 所以,我们在设计Web Job的时候, 要考虑到多实例同时运行这个特点。使用消息队列(Azure Storage Queue)就是一个很好的方式。 或者我们也可以让Web Job无论如何都只有一个实例——对于使用Web Job SDK的,  请参考Microsoft.Azure.WebJobs.SingletonAttribute; 对于普通的exe/cmd 等webjob, 可以在settings.job中添加 

1 {
2  ......,
3  "is_singleton": true 
4 }

 

结尾语:

本文分享了使用Web job的两种运行模式, Web Job的部署方式和Web Job实例缩放需要注意的问题。

Web Job 本质上会和Website 共享相同的计算资源。 所以在使用的时候还是需要注意。 如果Web Job特别的耗费计算资源, 为了不影响业务系统Website的运行, 建议不要放在一个Host Plan中。

posted on 2017-11-12 09:40  Weizheng  阅读(2785)  评论(0编辑  收藏  举报