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

时间:2021-08-09 20:39:23
郑昀 最后更新于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),共用一套权限分配体系:

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

图1 jobcenter 在 idcenter 的入口

  它的主界面如下:
#研发中间件介绍#定时任务调度与管理JobCenter
图2 jobcenter 主界面
 
JobCenter的优点:
  1. 管理直观
  • 可以指定定时任务的 Worker 集群,并指定执行策略,如随机选取一台机器执行,如第一台执行;
  • 可以指定通知策略:保证执行成功,只通知一次;
  • 可以设置超时警告时间;
    • 并可以进一步设置警告接收人(短信和邮件),如下图所示:
      • #研发中间件介绍#定时任务调度与管理JobCenter
    • 任务失败会发邮件给警告接收人;
  1. 调度方便
    • 集中查看所有定时任务的执行总况,如下图所示:
      • #研发中间件介绍#定时任务调度与管理JobCenter
      • 可以在“定时任务调度”界面上,暂停定时任务,或者立即执行定时任务;
  2. 观察方便
    • 按定时任务查看它的上次执行时间、耗时、是否超时、执行结果和通知结果。如下图所示:
      • #研发中间件介绍#定时任务调度与管理JobCenter
    • 按定时任务查看它的执行趋势图,能直观地反映每一次执行是否成功、耗时、是否超时,如下图所示:
      • 可以用鼠标在图表上拖动放大时间轴;
      • 黄色叹号图标代表超时了,红色叉图代表执行失败,红色横线图标代表任务未执行;
      • #研发中间件介绍#定时任务调度与管理JobCenter

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

    JobCenter 的工作原理

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

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

    图3 jobcenter 示意图

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

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

    图4 jobcenter 任务执行的泳道图

    JobCenter 的通知保证机制:

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

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

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

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

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

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

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

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

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

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

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

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

    -over-

    欢迎订阅我的微信订阅号『老兵笔记』,请扫描二维码关注:
    #研发中间件介绍#定时任务调度与管理JobCenter

    #研发中间件介绍#定时任务调度与管理JobCenter的更多相关文章

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

      郑昀 基于朱传志的设计文档 最后更新于2014/11/11 关键词:异步消息.订阅者集群.可伸缩.Push模式.Pull模式 本文档适用人员:研发   电商系统为什么需要 NotifyServer? ...

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

      郑昀 最后更新于2014/11/12 关键词:GoogleDapper.分布式跟踪.鹰眼.Tracing.HBase.HDFS. 本文档适用人员:研发   分布式系统为什么需要 Tracing?   ...

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

      郑昀 基于朱传志的设计文档 最后更新于2014/11/13 关键词:LDAP.认证.权限分配.IdCenter. 本文档适用人员:研发   曾经一个IT内部系统配一套帐号体系和授权   线上生产环境里 ...

    4. #研发解决方案介绍#基于StatsD+Graphite的智能监控解决方案

      郑昀 基于李丹和刘奎的文档 创建于2014/12/5 关键词:监控.dashboard.PHP.graphite.statsd.whisper.carbon.grafana.influxdb.Pyth ...

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

      郑昀 基于胡耀华和王超的设计文档 最后更新于2014/12/3 关键词:ElasticSearch.Lucene.solr.搜索.facet.高可用.可伸缩.mongodb.SearchHub.商品中 ...

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

      郑昀 基于刘金鑫文档 最后更新于2014/12/1 关键词:recsys.推荐评测.Evaluation of Recommender System.piwik.flume.kafka.storm.r ...

    7. Java定时任务调度详解

      前言 在实际项目开发中,除了Web应用.SOA服务外,还有一类不可缺少的,那就是定时任务调度.定时任务的场景可以说非常广泛,比如某些视频网站,购买会员后,每天会给会员送成长值,每月会给会员送一些电影券 ...

    8. .Net Core 商城微服务项目系列(十五): 构建定时任务调度和消息队列管理系统

      一.系统描述 嗨,好久不见各位老哥,最近有点懒,技术博客写的太少了,因为最近在写小说,写的顺利的话说不定就转行了,哈哈哈哈哈哈哈哈哈. 今天要介绍的是基于.Net Core的定时任务调度和消息队列管理 ...

    9. quartz 定时任务调度管理器

      本项目使用的是spring-quartz 以下配置可以开启多个已知定时任务 <?xml version="1.0" encoding="UTF-8"?&g ...

    随机推荐

    1. &lbrack;OC Foundation框架 - 18&rsqb; Class

      使用Class来创建实例 // 18.通过@"Ball"创建一个Ball实例(不可以使用[[Ball alloc] init]创建) NSString *className = @ ...

    2. 关于Active控件的电子签名 转

      关于Active控件的电子签名 两种方案:一是自己制作证书,客户端安装证书后就可以识别该控件:二就是买官方的喽,在国内找verisign的代理,负责各种电子签名,任何一台浏览器都可以识别该证书.该公司 ...

    3. laravel 生成 key

      把 .env.example 文件 复制并重命名为 .env 文件 命令行运行 php artisan key:generate php artisan key:generate

    4. PHPCMS V9 任意文件下载&lpar;Windows&rpar;

      先来看看PHPCMS V9.6.0的任意下载 还是和上次的注入一样,是个由parse_str() 函数引发的变量覆盖. 位于 /phpv9.6.0/phpcms/modules/content/dow ...

    5. &lbrack;转&rsqb;Linux下Python与C&plus;&plus;混合编程

      转自:http://www.cnblogs.com/tevic/p/3645197.html 最近在做一个CUDA的项目,记录下学习心得. 系统 Linux 3.11.0-19-generic #33 ...

    6. SEO &colon; 建站注意

      1.url格式.尽可能的短一些,实践证明,较短的url格式还是比较利于搜索引擎收录的. 2.网站前台要纯静态.虽然搜索引擎对静态页面和动态页面并没有本质上的差别对待,但是实践告诉我们静态页面对服务器的 ...

    7. rsync实现文件同步

      rsync是类unix系统下的数据镜像备份工工具,一般linux系统都自带了 [可以确认一下:shell>rpm -qa|grep rsync] 服务端:192.168.1.2  同步目录:/h ...

    8. 利用腾讯云COS云对象存储定时远程备份网站

      版权声明:本文由张戈 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/942851001487125915 来源:腾云阁 h ...

    9. Contiguous Array with Equal Number of 0 &amp&semi; 1

      2018-07-08 13:24:31 问题描述: 问题求解: 问题规模已经给出是50000量级,显然只能是O(n),至多O(nlogn)的复杂度.本题使用DP和滑动数组都比较棘手,这里给出的方案是p ...

    10. hiho1622 有趣的子区间&lpar;YY&rpar;

      题目链接:http://hihocoder.com/problemset/problem/1622?sid=1230113 #1622 : 有趣的子区间 时间限制:10000ms 单点时限:1000m ...