BruceBat's Blog
BruceBat's Blog

竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生


  • 首页

  • 归档

  • 分类

  • 标签

  • 搜索
NIO I/O 计算机科学 操作系统 设计模式 随记 WebSocket 计算机网络 注册中心 经典电影 xxl-job 分布式 分布式任务调度 MySQL DevOps Docker 多线程 有趣的问题 Mybatis-Plus Mybatis Java 数据结构

分布式调度中间件xxl-job(一):初识xxl-job

发表于 2020-05-14 | 分类于 Java | 0 | 阅读次数 1323

人生苦短,不如养狗

  在上一篇常见分布式任务调度工具浅析 | BruceBat’s Blog中,简单地分析了一下目前比较热门的三个分布式调度中间件。今天,我们就从大众点评许雪里大佬开源的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安装使用的同学可以咨询一下度娘。

本文使用 mdnice 排版

brucebat wechat
一个闲鱼程序猿的微信公众号
  • 本文作者: brucebat
  • 本文链接: https://www.swzgeek.com/archives/分布式调度中间件xxl-job一初识xxl-job
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# NIO # I/O # 计算机科学 # 操作系统 # 设计模式 # 随记 # WebSocket # 计算机网络 # 注册中心 # 经典电影 # xxl-job # 分布式 # 分布式任务调度 # MySQL # DevOps # Docker # 多线程 # 有趣的问题 # Mybatis-Plus # Mybatis # Java # 数据结构
常见分布式任务调度工具浅析
分布式调度中间件xxl-job(二):项目总览
  • 文章目录
  • 站点概览
brucebat

brucebat

一个有梦想的咸鱼程序猿

46 日志
8 分类
22 标签
RSS
Github E-mail
Creative Commons
© 2020 — 2023 brucebat
苏ICP备20002207号-1

苏公网安备 32011302320859号

0%