郑昀 最后更新于2014/11/11
关键词:定时任务、调度、监控报警、Job、crontab、Java
本文档适用人员:研发员工
没有JobCenter时我们要面对的:
电商业务链条很长,业务逻辑也较为复杂,需要成百上千种定时任务。窝窝的大多数定时任务其实调用的是本地或远端 Java/PHP/Python Web Service。如果没有一个统一的调度和报警,在集群环境下,我们会:
- 不知道哪一个定时任务执行失败或超时,不见得能第一时间知道——直到最终用户投诉反馈过来;
- 要求每一个定时任务输出统一格式的日志供监控系统解析?
- 对每一位定时任务维护者提出高要求?这不是我们的解题思路。
- 不知道哪一个定时任务没配好瞎跑;
- 比如忘记配成开机自启动;
- 比如曾经线上环境B与环境A并存导致定时任务互相争抢;
- 不知道现在线上跑了多少个定时任务,都是干什么的,负责人都是谁;
- 有些定时任务非常重要,不能单点,但又不能同时起多个 crontab,只能采取 master/slave 模式跑——比如退款处理。
什么是JobCenter?
窝窝的定时任务管理和调度平台,一个实用工具,它是一个由 任务管理、任务调度、任务监控报警以及宿主任务执行(注意不再是 crontab了) 这四部分组成的,分布式多任务协调系统。
2012年时,我看到暴风影音的马晨开源了一个 CronHub(时间调度系统)项目。现在已经访问不了它的站点,可以看一下百度文库上的PPT。马晨描述的需求与我们相似,他对 CronHub 的功能设计给我们很大启发:
1 、大量的crontab管理起来好烦人
任务老是没按时执行,各种原因失败,真让人抓狂。
2、多台服务器环境下,管理crontab更是烦上加烦,登录每台机器查看crontab结果不是折磨一贯偷懒的程序员吗?
3、要是能有个自动化管理,可供的GUI界面管理就好了。
所以暴风影音做一个“真正通用”,“真正解决日常需求”的时间调度系统。
任务老是没按时执行,各种原因失败,真让人抓狂。
2、多台服务器环境下,管理crontab更是烦上加烦,登录每台机器查看crontab结果不是折磨一贯偷懒的程序员吗?
3、要是能有个自动化管理,可供的GUI界面管理就好了。
所以暴风影音做一个“真正通用”,“真正解决日常需求”的时间调度系统。
由于前面说过大多数定时任务其实调用的是 Web 接口,所以我们的做法与 CronHub 略有不同,说是定时任务,其实我只是登记了要调用的远端接口、通讯协议、Crontab 时间格式表达式、执行机器组、超时时间、报警接收人等而已。已经没有 crontab 了,全都是远端 WebService。由 JobCenter 按时通知对端的接口,并接收任务执行者的进度反馈和最终执行结果,这些响应均为 JSON 格式。还可以为同一个定时任务添加多个执行机器,JobCenter 保证通知成功。
JobCenter 是2013年初聂兰彬构建的,那个历史时期同时有多个研发内部项目启动,如 NotifyServer、Tracing、Recsys、ConfigServer。经过几个月的线上试用和功能完善,我们便开始督促各个研发组织把 Java/PHP 定时任务迁移到这个平台里。
JobCenter 目前也纳入在我们的 idcenter 体系下,这样可以共用一套帐号体系(LDAP),共用一套权限分配体系:
图1 jobcenter 在 idcenter 的入口
它的主界面如下:
图2 jobcenter 主界面
JobCenter的优点:
- 管理直观
- 可以指定定时任务的 Worker 集群,并指定执行策略,如随机选取一台机器执行,如第一台执行;
- 可以指定通知策略:保证执行成功,只通知一次;
- 可以设置超时警告时间;
- 并可以进一步设置警告接收人(短信和邮件),如下图所示:
- 任务失败会发邮件给警告接收人;
- 调度方便
- 集中查看所有定时任务的执行总况,如下图所示:
- 可以在“定时任务调度”界面上,暂停定时任务,或者立即执行定时任务;
- 观察方便
- 按定时任务查看它的上次执行时间、耗时、是否超时、执行结果和通知结果。如下图所示:
- 按定时任务查看它的执行趋势图,能直观地反映每一次执行是否成功、耗时、是否超时,如下图所示:
- 可以用鼠标在图表上拖动放大时间轴;
- 黄色叹号图标代表超时了,红色叉图代表执行失败,红色横线图标代表任务未执行;
总之,它借鉴了 CronHub 的界面设计和菜单,这是一款大幅提升实施和管理效率、方便易用的中间件。
JobCenter 的工作原理
下图是聂兰彬当年绘制的架构示意图,后续虽然结构有所调整,但下图还是能说明问题的:
图3 jobcenter 示意图
它如何调度宿主执行定时任务呢?如下图所示:图4 jobcenter 任务执行的泳道图
JobCenter 的通知保证机制:
通知保证机制有以下3种:
- 只通知一次
- 保证成功
- 保证成功(任务不在执行中)
特别对 “保证成功(任务不在执行中)” 作以下说明:
当一个任务到了这一轮的通知时间,jobcenter 会去检查这个任务之前的执行,是否还在执行中(如正在执行,客户端未返回)。如果有,则本次执行直接失败,不通知。
窝窝的其他解决方案介绍列表:
#研发解决方案介绍#Recsys-Evaluate(推荐评测)
#数据技术选型#即席查询Shib+Presto,集群任务调度HUE+Oozie
-over-
相关推荐
特色:可视化界面操作定时任务统一管理完全兼容Crontab支持秒级定时任务作业任务可搜索,暂停,编辑,删除作业任务持久化存储,三种不同初始化类型作业动态添加 (注:demo版本部分功能已补充) :beer_mug: )用法:...
3. **临时与计划执行**:Webad支持即时和定时的任务执行,适应不同场景需求。 4. **开源软件文化**:Webad的开源性质,意味着代码透明,可定制化,鼓励社区参与和共享。 5. **Job Center**:可能是Webad中的一个组件...
3. **作业中心**:`jobCenter.c`可能是处理作业调度和执行的核心组件,它负责监控作业状态,决定何时启动或停止作业。 4. **报告与监控**:`autorep.c`可能包含了生成作业执行报告的功能,允许用户查看作业的执行...
- 包含App介绍、下载链接等信息。 - 可能提供App特色功能的预览。 #### 7. **Bbsclose.htm - 论坛关闭后,创始人登陆页面** - **描述**:论坛关闭期间,仅允许创始人访问的特殊登录页面。 - **功能点**: - 限制...
在上述例子中,求职者与求职中心的关系就是观察者模式的典型应用。求职者(观察者)关注求职中心(主题)发布的职位信息,当求职中心有新的职位发布时,求职者会得到通知。在这个例子中,`Subject` 接口定义了添加...
2. 具体主题(ConcreteSubject):是主题的具体实现,`JobCenter` 类就是具体的主题,它负责保存求职者的列表,并在有新职位需求时发布信息。 3. 观察者(Observer):这是对主题感兴趣的实体,定义了接收信息的...
在“²¿ÃÅ”和“¹¤×÷ÄÚÈÝ”下面,会列出具体的工作职责和成就,比如“±àдÍê³ÉÇ°¶ËÒ³ÃæºÍºó¶Ë´úÂë”、“±àдjobcenter¹¤¾ßϵÄjob»î¶¯”等,这些内容体现了...