文档章节

#研发中间件介绍#定时任务调度与管理JobCenter

旁观者-郑昀
 旁观者-郑昀
发布于 2015/01/04 16:52
字数 1698
阅读 866
收藏 24

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

郑昀 最后更新于2014/11/11
关键词: 定时任务 、调度、监控报警、Job、crontab、Java

本文档适用人员:研发员工
 
没有JobCenter时我们要面对的:
  电商业务链条很长,业务逻辑也较为复杂,需要成百上千种定时任务。窝窝的大多数定时任务其实调用的是本地或远端 Java/PHP/Python Web Service。如果没有一个统一的调度和报警,在集群环境下,我们会:
  • 不知道哪一个定时任务执行失败或超时,不见得能第一时间知道——直到最终用户投诉反馈过来;
    • 要求每一个定时任务输出统一格式的日志供监控系统解析?
    • 对每一位定时任务维护者提出高要求?这不是我们的解题思路。
  • 不知道哪一个定时任务没配好瞎跑;
    • 比如忘记配成开机自启动;
    • 比如曾经线上环境B与环境A并存导致定时任务互相争抢;
  • 不知道现在线上跑了多少个定时任务,都是干什么的,负责人都是谁;
  • 有些定时任务非常重要,不能单点,但又不能同时起多个 crontab,只能采取 master/slave 模式跑——比如退款处理。
 
什么是JobCenter?
   窝窝的定时任务管理和调度平台,一个实用工具, 它是一个由 任务管理、任务调度、任务监控报警以及宿主任务执行(注意不再是 crontab了) 这四部分组成的,分布式多任务协调系统
 
  2012年时,我看到暴风影音的马晨开源了一个 CronHub(时间调度系统)项目 github 地址 ),也可以看一下 百度文库上的PPT。马晨描述的需求与我们相似,他对 CronHub 的功能设计给我们很大启发:
1 、大量的crontab管理起来好烦人
任务老是没按时执行,各种原因失败,真让人抓狂。
2、多台服务器环境下,管理crontab更是烦上加烦,登录每台机器查看crontab结果不是折磨一贯偷懒的程序员吗?
3、要是能有个自动化管理,可供的GUI界面管理就好了。
所以暴风影音做一个“真正通用”,“真正解决日常需求”的时间调度系统。
  由于前面说过大多数定时任务其实调用的是 Web 接口,所以我们的做法与 CronHub 略有不同,说是定时任务,其实我只是 登记了要调用的远端接口、通讯协议、Crontab 时间格式表达式、执行机器组、超时时间、报警接收人等而已。已经没有 crontab 了,全都是远端 WebService。由 JobCenter 按时通知对端的接口,并接收任务执行者的进度反馈和最终执行结果,这些响应均为 JSON 格式。还可以为同一个定时任务添加多个执行机器,JobCenter 保证通知成功
  JobCenter 是2013年初聂兰彬构建的,那个历史时期同时有多个研发内部项目启动,如 NotifyServerTracing、Recsys、 ConfigServer。经过几个月的线上试用和功能完善,我们便开始督促各个研发组织把 Java/PHP 定时任务迁移到这个平台里。
  
  JobCenter 目前也纳入在我们的 idcenter 体系下,这样可以共用一套帐号体系(LDAP),共用一套权限分配体系:

http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_idcenter1.png

图1 jobcenter 在 idcenter 的入口

  它的主界面如下:
jobcenter主界面(bootstrap样式)
图2 jobcenter 主界面
 
JobCenter的优点:
  1. 管理直观
    • 可以指定定时任务的 Worker 集群,并指定执行策略,如随机选取一台机器执行,如第一台执行;
    • 可以指定通知策略:保证执行成功,只通知一次;
    • 可以设置超时警告时间;
      • 并可以进一步设置警告接收人(短信和邮件),如下图所示:
        • http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_jobcenter-%e6%8a%a5%e8%ad%a6.png
      • 任务失败会发邮件给警告接收人;
  2. 调度方便
    • 集中查看所有定时任务的执行总况,如下图所示:
      • http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_jobcenter-%e4%bb%bb%e5%8a%a1%e8%b0%83%e5%ba%a6.png
      • 可以在“定时任务调度”界面上,暂停定时任务,或者立即执行定时任务;
  3. 观察方便
    • 按定时任务查看它的上次执行时间、耗时、是否超时、执行结果和通知结果。如下图所示:
      • http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_job-%e6%89%a7%e8%a1%8c%e6%83%85%e5%86%b5.png
    • 按定时任务查看它的执行趋势图,能直观地反映每一次执行是否成功、耗时、是否超时,如下图所示:
      • 可以用鼠标在图表上拖动放大时间轴;
      • 黄色叹号图标代表超时了,红色叉图代表执行失败,红色横线图标代表任务未执行;
      • http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_job-%e6%89%a7%e8%a1%8c%e6%80%a7%e8%83%bd%e8%b6%8b%e5%8a%bf.png

 

  总之,它借鉴了 CronHub 的界面设计和菜单,这是一款大幅提升实施和管理效率、方便易用的中间件。

 

JobCenter 的工作原理

  下图是聂兰彬当年绘制的架构示意图,后续虽然结构有所调整,但下图还是能说明问题的:

http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_jobcenter-%e5%8e%9f%e7%90%86.png

图3 jobcenter 示意图

  它如何调度宿主执行定时任务呢?如下图所示:

http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_jobcenter-%e6%b3%b3%e9%81%93%e5%9b%be.png

图4 jobcenter 任务执行的泳道图

 

JobCenter 的通知保证机制:

  通知保证机制有以下3种:

  • 只通知一次
  • 保证成功
  • 保证成功(任务不在执行中)

  特别对 “保证成功(任务不在执行中)” 作以下说明:

  当一个任务到了这一轮的通知时间,jobcenter 会去检查这个任务之前的执行,是否还在执行中(如正在执行,客户端未返回)。如果有,则本次执行直接失败,不通知。

 

窝窝的其他解决方案介绍列表:

#研发解决方案介绍#Recsys-Evaluate(推荐评测) 

#研发解决方案介绍#Tracing(鹰眼)

#研发解决方案介绍#基于持久化配置中心的业务降级

#研发中间件介绍#异步消息可靠推送Notify

#研发解决方案介绍#IdCenter(内部统一认证系统)

#研发解决方案介绍#基于ES的搜索+筛选+排序解决方案

#数据技术选型#即席查询Shib+Presto,集群任务调度HUE+Oozie

-over-

© 著作权归作者所有

旁观者-郑昀
粉丝 101
博文 77
码字总数 162700
作品 0
朝阳
私信 提问
加载中

评论(1)

Mr岳
Mr岳
开源了吗,看看源码
#研发中间件介绍#定时任务调度与管理JobCenter

关键词:定时任务、调度、监控报警、Job、crontab、Java 本文档适用人员:研发员工 没有JobCenter时我们要面对的: 电商业务链条很长,业务逻辑也较为复杂,需要成百上千种定时任务。窝窝的大...

郭恩洲_OSC博客
2015/02/26
162
0
#研发解决方案介绍#IdCenter(内部统一认证系统)

关键词:LDAP、认证、权限分配、IdCenter、 本文档适用人员:研发 曾经一个IT内部系统配一套帐号体系和授权 线上生产环境里,技术人员需要登录许多内部系统,如: memcached/redis/mongodb ...

郭恩洲_OSC博客
2015/02/26
151
0
如何从零开始搭建一个技术平台

郑昀 创建于2016/3/30 最后更新于2016/4/8 关键词:技术预研课题,平台设计,应用场景,故事,信息架构,业务流程,数据流程 本文档适用人员:全体研发 提纲: 如何从零开始搭建一个技术平台...

旁观者-郑昀
2016/04/26
134
0
#研发解决方案#分布式并行计算调度和管理系统Summoner

郑昀 创建于2015/11/10 最后更新于2015/11/12 关键词:佣金计算、定时任务、数据抽取、数据清洗、数据计算、Java、Redis、MySQL、Zookeeper、azkaban2、oozie、mesos Summoner 是国玺部门推出...

旁观者-郑昀
2016/01/08
195
0
#研发解决方案介绍#基于持久化配置中心的业务降级

郑昀 最后更新于2014/4/18 关键词:业务降级,配置中心,基本可用性, A.业务降级的背景知识: 淘宝就双十一课题曾经讲过: 『 所谓业务降级,就是牺牲非核心的业务功能,保证核心功能的稳定...

旁观者-郑昀
2015/01/27
170
0

没有更多内容

加载失败,请刷新页面

加载更多

ForkJoinPool线程池

1. 拆分线程池的使用场景是什么? 答: 是对一组连续的数据进行耗时操作,例如 一个 大小为 10000 的集合 进行操作。 例子: 对1000万个数据进行排序,那么会将这个任务分割成两个500万的排序...

杨凯123
3分钟前
1
0
在多列上使用group by

我理解GROUP BY x的观点 但GROUP BY x, y如何运作的,它是什么意思? #1楼 Group By X表示将所有具有相同X值的组合放入一组中 。 Group By X, Y表示将所有具有相同值的值放在一个组中的X和Y...

技术盛宴
19分钟前
2
0
线程池ThreadPoolExecutor的内部类Worker的感想和思考

Worker依然是一个Runnable,封装了一个创建自己的原因对象,就是firstTask变量,和自己将要执行的所在线程thread变量。 thread成员变量可以直接被外部类ThreadPoolExecutor所获得,当调用add...

萧默
58分钟前
2
0
Git推送错误“ [[远程拒绝]主机->主机(分支当前已签出)”)

昨天,我发布了一个有关如何将Git存储库从我的一台计算机克隆到另一台计算机的问题 , 如何从另一台计算机“ git clone”? 。 现在,我可以成功地将Git存储库从源(192.168.1.2)克隆到目标...

javail
今天
4
0
Selenium 4.0 Alpha更新日志

早在2018年8月,整个测试自动化社区就发生了一件重大新闻:Selenium的创始成员Simon Stewart在班加罗尔Selenium会议上正式确认了Selenium 4的发布日期和一些重要更新。 Selenium 4.0 Alpha版...

八音弦
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部