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中。

使用Azure WebJob的一点心得的更多相关文章

  1. WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信

    原文:WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信 最近工作需要,学习了一下winform内嵌webbrowser控件,然后与htm页面中的javasc ...

  2. 使用Webbrowser的一点心得体会

    原文:使用Webbrowser的一点心得体会 自从用上VS2005后,发现多了个WebBrowser控件(.net 2003中不带),为图方便吧,有好多小工具就用这个写的,慢慢也有点体会了,总结一下, ...

  3. 谈谈选用技术的原则,技术学习方法技巧,阅读代码的技巧及其它 MSF的一点心得

    谈谈技术原则,技术学习方法,代码阅读及其它(正文) 这篇文章是前一阵在水木BBS上和别人讨论中偶自己发言的摘编,是偶这几年开发过程完全经验式的总结.完全个人经验,供批判. 一.选用技术的原则 比较规范 ...

  4. 【并行计算与CUDA开发】基于NVIDIA显卡的硬编解码的一点心得 (完结)

    原文:基于NVIDIA显卡的硬编解码的一点心得 (完结) 1.硬解码软编码方法:大体流程,先用ffmpeg来读取视频文件的包,接着开启两个线程,一个用于硬解码,一个用于软编码,然后将读取的包传给解码器 ...

  5. 关于使用Exception的一点心得

    毫无疑问,Exception有很多优点.查看任何一本面向对象的书籍,都会提到异常相对于返回值标记状态的不足以及避免错误导致程序崩溃的问题.看起来是很好的,用起来也是很好的.可是这么多年过去了,异常用的 ...

  6. SVM一点心得体会

    支持向量机的学习说是刚刚开始,又不合理,只能说隔了很长的时间再看,终于在分类这块的层面上有了新的认识. 总的来说,支持向量机分为线性支持向量机和非线性支持向量机,线性支持向量机又可以分为硬间隔最大化线 ...

  7. 记录自己对EventLoop和性能问题处理的一点心得

    1.EventLoop 这里说的EventLoop不是指某一个具体的库或是框架,而是指一种程序实现结构.这种结构多是基于IO多路转接的API(select.poll.epoll之类)以reactor模 ...

  8. 从Eclipse转移到IntelliJ IDEA一点心得

    http://www.ituring.com.cn/article/37792 本人使用IntelliJ IDEA其实并不太久,用了这段时间以后,觉得的确很是好用.刚刚从Eclipse转过来的很多人开 ...

  9. Android平板上开发应用的一点心得——精确适配不同的dpi和屏幕尺寸

    一.引言 Android的开源使厂商无需自行研发OS,大大降低了研发.生产的成本,使得Android平板品牌如雨后春笋般爆发,山寨机厂商们似乎又找到了一丝希望.与此同时带来的是广大开发者的苦不堪言,各 ...

随机推荐

  1. ecl函数的用法

    相关函数 fork, execle, execlp, execv, execve, execvp Windows下头文件 #include <process.h> Linux下头文件 #i ...

  2. .Net Core·寄托于IIS的REST服务405的问题

    阅文时长 | 0.48分钟 字数统计 | 828.8字符 主要内容 | 1.引言&背景 2.声明与参考资料 『.Net Core·寄托于IIS的REST服务405的问题』 编写人 | SCsc ...

  3. [刷题] 112 Path Sum

    要求 给出一个二叉树及数字sum,判断是否存在一条从根到叶子的路径,路径上的所有节点和为sum 实现 转化为寻找左右子树上和为 sum-root 的路径,到达叶子节点时递归终止 注意只有一个孩子时,根 ...

  4. 使用autotools工具用configure、make、make install编译安装linux工程的详细步骤

    使用autotools工具用configure.make.make install编译安装linux工程的详细步骤 转载tmxkwzy 最后发布于2016-11-24 10:20:15 阅读数 324 ...

  5. Gtkperf介绍

    Gtkperf使用说明一.Gtkperf介绍GtkPerf是一种应用程序设计,测试基于GTK +的性能.问题的关键是建立共同的测试平台,运行预先基于GTK +工具(开放comboboxes ,切换按钮 ...

  6. Node.js入门(含NVM、NPM、NVM的安装)-(转载)

    Node.js的介绍 引擎 引擎的特性: JS的内核即引擎.因为引擎有以下特性: (1)转化的作用: 汽油柴油等等->动能 模板+数据--->页面 js引擎:js 代码--->机器码 ...

  7. Redis 安装和启动

    Redis 安装 安装准备: redis 压缩包 官网下载地址:https://redis.io/download 安装步骤: 第一步:安装 gcc 编译器 官网发布的 Redis 压缩包是 C 语言 ...

  8. Python数模笔记-PuLP库(2)线性规划进阶

    1.基于字典的创建规划问题 上篇中介绍了使用 LpVariable 对逐一定义每个决策变量,设定名称.类型和上下界,类似地对约束条件也需要逐一设置模型参数.在大规模的规划问题中,这样逐个定义变量和设置 ...

  9. FreeBSD 13.0 正式版发布,已经可以下载

    请访问原文链接:https://sysin.org/article/freebsd-13/,查看最新版.原创作品,转载请保留出处. 根据 FreeBSD 13.0 官方发布计划,4 月 9 日 13. ...

  10. 27.Qt Quick QML-State、Transition

    1.State所有组件均具有默认状态,该状态定义对象和属性值的默认配置.可以通过向States属性添加State组件来定义新状态,以允许组件在不同配置之间切换.许多用户界面设计都是由State状态实现 ...