探秘定时调度xxl-job:初识xxl-job

193 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

人生苦短,不如养狗  

 作者: Brucebat.Sun

公众号: Brucebat的伪技术鱼塘

原文为公众号中《分布式调度中间件xxl-job(一):初识xxl-job

  在上一篇常见分布式任务调度工具浅析中,简单地分析了一下目前比较热门的三个分布式调度中间件。今天,我们就从大众点评许雪里大佬开源的xxl-job开始学习。

  什么?你问我为什么从xxl-job开始学习?别问,问就是简单,好学,易上手。

一、基本概念

  在上一篇文章中,笔者已经简要的介绍了一下xxl-job。这里我们再详细的介绍一下这款优秀的分布式调度中间件。

  在开始学习xxl-job之前,我们先来看三个作业调度的重要组成部分。

  • 作业:作业,也即是我们所说的任务,是需要计算机去执行的具体的业务逻辑。(操作系统中常用作业这样一个概念)

  • 调度器:调度器(Trigger),作业调度系统中重要组成部分,根据预设好的调度规则调用对应的执行器执行作业。

  • 执行器:执行器(Executor),作业调度系统中重要组成部分,接受调度器的调度,是具体作业的执行者。

  根据调度系统的架构不同,可以将作业调度分为:中心化和非中心化。

  • 中心化:中心化的调度系统存在调度中心的概念,所有的调度都是由调度中心进行统筹协调。

  • 去中心化:去中心化的调度系统没有调度中心的概念,所有的任务都能够实行自治,即自行判断是否要执行任务。

  在集群环境下,根据调度器作业调度方式不同,可以将作业调度分为:作业竞争和作业预分配。

  • 作业竞争:多个执行器竞争一个任务,同一个任务只能由一个执行器竞争获取然后执行。

  • 作业预分配:调度器预先分配好任务执行节点,不需要执行器进行竞争执行权。

二、什么是xxl-job

1. 简介

  xxl-job是大众点评许雪里开源的一款分布式调度中间件。根据上面的分类,xxl-job属于中心化、作业竞争的分布式调度中间件。下面是xxl-job最新版本的架构图:

  从上面的架构图中我们可以看到,在xxl-job中,作业调度是由调度中心来进行统筹协调的,在调度中心中进行调度器和执行器的管理和注册。同时为了调度中心能够感知到对应的作业,xxl-job还提供了服务注册和服务发现功能。执行器完成任务执行之后,会将执行结果回调给调度中心,用户可以在调度中心查看任务的执行结果。除了任务执行结果,通过xxl-job中提供的log api,调度中心还可以获得执行器的执行日志,用户可以很方便地在调度中心中查看对应任务的执行日志。

  由于xxl-job是一个作业竞争的分布式调度中间件,这里它没有使用zookeeper,而是使用数据库。通过数据库锁来让每个执行器竞争任务的执行权,保证每个任务每次只有一个节点能够执行任务。

2. 功能特性

  在上面的小节中我们简单地介绍了xxl-job的架构和调度相关的功能。下面我们来具体看下对于业务系统而言,xxl-job集成了哪些非常优秀的功能:

动态化:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效。

  • 事件触发:除了”Cron方式”和”任务依赖方式”触发任务执行之外,支持基于事件的触发任务方式。调度中心提供触发任务单次执行的API服务,可根据业务事件灵活触发。

  • Rolling实时日志:支持在线查看调度结果,并且支持以Rolling方式实时查看执行器输出的完整的执行日志。

  • 脚本任务:支持以GLUE模式开发和运行脚本任务,包括Shell、Python、NodeJS、PHP、PowerShell等类型脚本。

  • 自定义任务参数:支持在线配置调度任务入参,即时生效。

  • 邮件报警:任务失败时支持邮件报警,支持配置多邮件地址群发报警邮件,除此以外,还提供了报警方式的扩展,比如钉钉机器人等。

  • 运行报表:支持实时查看运行数据,如任务数量、调度次数、执行器数量等;以及调度报表,如调度日期分布图,调度成功分布图等。

  笔者这里挑选了一些业务系统可能较为关系的功能,其他的功能,大家可以到官方文档分布式任务调度平台XXL-JOB中具体了解一下。

  除了上述的功能,在调度中心中还可以查看每个应用下的任务列表。由于每个执行器(集群模式下为执行器组)会对应多个调度器,每个调度器是对应一个作业,所以可以通过执行器来检索出所有该执行器对应的调度器,也即任务。而在xxl-job中执行器则与对应的应用相关联,所以使用通过执行器就可以查出应用下所有的任务。具体如下图所示:

三、总结

  总的来看,xxl-job的学习难度和使用难度都相对较低,社区的活跃度也非常的高(看来大家都是喜欢简单易上手的)。相比弱化调度和运维中心概念的elastic-job,xxl-job的运维中心围绕业务系统的常见需求,集成了很多监控、管理和报表等相关的功能。这也是为什么笔者选择xxl-job而不是elastic-job来先进行研究学习。

  由于网上有太多关于xxl-job安装使用的教程,下一篇我们就直接开始源码的学习。想了解xxl-job安装使用的同学可以咨询一下度娘。