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

郑昀 最后更新于2014/11/11

关键词:定时任务、调度、监控报警、Job、crontab、Java


本文档适用人员:研发员工

没有JobCenter时我们要面对的:

电商业务链条很长,业务逻辑也较为复杂,需要成百上千种定时任务。窝窝的大多数定时任务其实调用的是本地或远端 Java/PHP/Python Web Service。如果没有一个统一的调度和报警,在集群环境下,我们会:

  • 不知道哪一个定时任务执行失败或超时,不见得能第一时间知道——直到最终用户投诉反馈过来;
    • 要求每一个定时任务输出统一格式的日志供监控系统解析?
    • 对每一位定时任务维护者提出高要求?这不是我们的解题思路。
  • 不知道哪一个定时任务没配好瞎跑;
    • 比如忘记配成开机自启动;
    • 比如曾经线上环境B与环境A并存导致定时任务互相争抢;
  • 不知道现在线上跑了多少个定时任务,都是干什么的,负责人都是谁;
  • 有些定时任务非常重要,不能单点,但又不能同时起多个 crontab,只能采取 master/slave 模式跑——比如退款处理。

什么是JobCenter?

窝窝的定时任务管理和调度平台,一个实用工具,它是一个由 任务管理、任务调度、任务监控报警以及宿主任务执行(注意不再是 crontab了) 这四部分组成的,分布式多任务协调系统

2012年时,我看到暴风影音的马晨开源了一个 CronHub(时间调度系统)项目。现在已经访问不了它的站点,可以看一下百度文库上的PPT。马晨描述的需求与我们相似:


1 、大量的crontab管理起来好烦人

任务老是没按时执行,各种原因失败,真让人抓狂。

2、多台服务器环境下,管理crontab更是烦上加烦,登录每台机器查看crontab结果不是折磨一贯偷懒的程序员吗?

3、要是能有个自动化管理,可供的GUI界面管理就好了。


所以暴风影音做一个“真正通用”,“真正解决日常需求”的时间调度系统。

由于前面说过大多数定时任务其实调用的是 Web 接口,所以我们的做法与 CronHub 略有不同,说是定时任务,其实我只是登记了要调用的远端接口、通讯协议、Crontab 时间格式表达式、执行机器组、超时时间、报警接收人等而已。由 JobCenter 按时通知对端的接口,并接收任务执行者的进度反馈和最终执行结果,这些响应均为 JSON 格式。还可以为同一个定时任务添加多个执行机器,JobCenter 保证通知成功

JobCenter 是2013年初聂兰彬构建的,那个历史时期同时有多个研发内部项目启动,如 NotifyServerTracing、Recsys、ConfigServer。经过几个月的线上试用和功能完善,我们便开始督促各个研发组织把 Java/PHP 定时任务迁移到这个平台里。

JobCenter 目前也纳入在我们的 idcenter体系下,这样可以共用一套帐号体系(LDAP),共用一套权限分配体系:

图1 jobcenter 在 idcenter 的入口

它的主界面如下:

图2 jobcenter 主界面

JobCenter的优点:

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

总之,这是一款大幅提升实施和管理效率、方便易用的自主开发中间件。

JobCenter 的工作原理

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

图3 jobcenter 示意图

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

图4 jobcenter 任务执行的泳道图

JobCenter 的通知保证机制:

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

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

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

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

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

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

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

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

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

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

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

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

-over-

时间: 2024-08-24 08:24:31

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

#研发中间件介绍#NotifyServer

郑昀 基于朱传志的设计文档 最后更新于2014/11/11 关键词:异步消息.订阅者集群.可伸缩.Push模式.Pull模式 本文档适用人员:研发 电商系统为什么需要 NotifyServer? 如子柳所说,电商系统『需要两种中间件系统,一种是实时调用的中间件(淘宝的HSF,高性能服务框架).一种是异步消息通知的中间件(淘宝的Notify)』.那么用传统的 ActiveMQ/RabbitMQ 来实现 异步消息发布和订阅 不行吗? 2013年之前我们确实用的是 ActiveMQ,当然主要是订阅者

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

郑昀 基于朱传志的设计文档 最后更新于2014/11/11 关键词: 异步消息 .订阅者集群.可伸缩.Push模式.Pull模式 本文档适用人员:研发 电商系统为什么需要 NotifyServer? 如子柳所说,电商系统『 需要两种中间件系统,一种是实时调用的中间件(淘宝的HSF,高性能服务框架).一种是异步消息通知的中间件(淘宝的Notify)』.那么用传统的 ActiveMQ/RabbitMQ 来实现 异步消息发布和订阅 不行吗? 2013年之前我们确实用的是 ActiveMQ,当然主要是订

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

郑昀 基于李丹和刘奎的文档 创建于2014/12/5 关键词:监控.dashboard.PHP.graphite.statsd.whisper.carbon.grafana.influxdb.Python 本文档适用人员:研发和运维员工 提纲: 监控平台要做到什么程度?为什么要自己做? 几个通用技术问题 绘图所依赖的数据如何收集?如何加工?如何存储? 图形如何绘制,各种指标如何叠加? 拓扑关系如何绘制? 技术选型哲学 最终选了statsd+graphite 数据的采集 数据存储的粒度 天机的技术

Java定时任务调度详解

前言 在实际项目开发中,除了Web应用.SOA服务外,还有一类不可缺少的,那就是定时任务调度.定时任务的场景可以说非常广泛,比如某些视频网站,购买会员后,每天会给会员送成长值,每月会给会员送一些电影券:比如在保证最终一致性的场景中,往往利用定时任务调度进行一些比对工作:比如一些定时需要生成的报表.邮件:比如一些需要定时清理数据的任务等.本篇博客将系统的介绍定时任务调度,会涵盖Timer.ScheduledExecutorService.开源工具包Quartz,以及Spring和Quartz的结合

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

一.系统描述 嗨,好久不见各位老哥,最近有点懒,技术博客写的太少了,因为最近在写小说,写的顺利的话说不定就转行了,哈哈哈哈哈哈哈哈哈. 今天要介绍的是基于.Net Core的定时任务调度和消息队列管理系统.相信大家对这两个肯定都已经很熟悉了,在开发过程中,这两个组件扮演了不可或缺的角色: 消息队列帮助我们进行 ”解耦“.”异步“.”削峰“ 定时任务帮助我们进行 "后台".”监控".“补偿" 定时任务调度系统大家都介绍过很多次了,园子里的很多文章我也都拜读过,我相信大

大数据学习之_01_Linux学习_02_组管理和权限管理+定时任务调度+linux磁盘分区、挂载+linux的网络配置+进程管理(重点)+软件包管理+大厂面试题+感悟分享+资料附录

10 组管理和权限管理10.1 Linux组的基本介绍10.2 文件/目录的所有者10.3 文件/目录的所在组10.4 权限的基本介绍10.5 rwx权限详解10.6 修改权限指令-chmod10.7 修改文件所有者-chown10.8 修改文件所在组-chgrp10.9 最佳实践-警察和土匪游戏11 定时任务调度11.1 crond任务调度12 linux磁盘分区.挂载12.1 分区的基本知识12.2 Linux分区12.3 挂载的经典案例12.4 查询系统整体磁盘使用情况12.5 查询指定目

quartz 定时任务调度管理器

本项目使用的是spring-quartz 以下配置可以开启多个已知定时任务 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:ta

数据库相关中间件介绍

数据库相关中间件介绍 详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt412 这里主要介绍互联网行业内有关数据库的相关中间件.数据库相关平台主要解决以下三个方面的问题: 为海量前台数据提供高性能.大容量.高可用性的访问 为数据变更的消费提供准实时的保障 高效的异地数据同步 应用层通过分表分库中间件访问数据库,包括读操作(Select)和写操作(update, insert和delete等,DDL, DCL).写操作会在数据

项目一:第十四天 1.在realm中动态授权 2.Shiro整合ehcache 缓存realm中授权信息 3.动态展示菜单数据 4.Quartz定时任务调度框架—Spring整合javamail发送邮件 5.基于poi实现分区导出

1 Shiro整合ehCache缓存授权信息 当需要进行权限校验时候:四种方式url拦截.注解.页面标签.代码级别,当需要验证权限会调用realm中的授权方法   Shiro框架内部整合好缓存管理器,整合ehcache环境,只需要配置即可.     <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>