定时任务调度与管理平台JobCenter 没有JobCenter时我们要面对的: 电商业务链条很长,业务逻辑也较为复杂,需要成百上千种定时任务。窝窝的大多数定时任务其实调用的是本地或远端 Java/PHP/Python Web Service。如果没有一个统一的调度和报警,在集群环境下,我们会:
什么是JobCenter? 窝窝的定时任务管理和调度平台,一个实用工具,它是一个由 任务管理、任务调度、任务监控报警以及宿主任务执行(注意不再是 crontab了) 这四部分组成的,分布式多任务协调系统。 2012年时,我看到暴风影音的马晨开源了一个 CronHub(时间调度系统)项目(github 地址),也可以看一下百度文库上的PPT。马晨描述的需求与我们相似,他对 CronHub 的功能设计给我们很大启发:
由于前面说过大多数定时任务其实调用的是 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的优点: 1. 管理直观
2. 调度方便
3. 观察方便
总之,它借鉴了 CronHub 的界面设计和菜单,这是一款大幅提升实施和管理效率、方便易用的中间件。 JobCenter 的工作原理 下图是聂兰彬当年绘制的架构示意图,后续虽然结构有所调整,但下图还是能说明问题的: 图3 jobcenter 示意图 它如何调度宿主执行定时任务呢?如下图所示: 图4 jobcenter 任务执行的泳道图 JobCenter 的通知保证机制: 通知保证机制有以下3种:
特别对 “保证成功(任务不在执行中)” 作以下说明: 当一个任务到了这一轮的通知时间,jobcenter 会去检查这个任务之前的执行,是否还在执行中(如正在执行,客户端未返回)。如果有,则本次执行直接失败,不通知。 运维帮是一个互联网技术分享平台 |
|
来自: 昵称28748685 > 《待分类》