介绍一种很好用的任务调度平台

1 总体设计

分布式任务调度平台是什么

XXL-JOB是一个轻量级分布式任务调度平台,和quartz相似,但是XXL-JOB将调度中心与执行器解耦,弥补了quartz的不足(使用API方式操作任务,不人性化;系统侵入性严重等)

其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

文档我这边可以给。

源码目录介绍

  • /xxl-job-admin :调度中心,项目源码
  • /xxl-job-core :公共Jar依赖
  • /xxl-job-executor-samples :执行器,Sample示例项目(大家可以在该项目上进行开发,也可以将现有项目改造-生成

“调度数据库”配置

XXL-JOB调度模块基于Quartz集群实现,其“调度数据库”是在Quartz的11张集群mysql表基础上扩展而成。

XXL-JOB首先定制了Quartz原生表结构前缀(XXL_JOB_QRTZ_)。我们代码配置和源码配置一样

img

在此基础上新增了几张张扩展表。正常情况下总共16张表

- XXL_JOB_QRTZ_TRIGGER_GROUP:执行器信息表,维护任务执行器信息;
- XXL_JOB_QRTZ_TRIGGER_REGISTRY:执行器注册表,维护在线的执行器和调度中心机器地址信息;
- XXL_JOB_QRTZ_TRIGGER_INFO:调度扩展信息表: 用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等等;
- XXL_JOB_QRTZ_TRIGGER_LOG:调度日志表: 用于保存XXL-JOB任务调度的历史信息,如调度结果、执行结果、调度入参、调度机器和执行器等等;
- XXL_JOB_QRTZ_TRIGGER_LOGGLUE:任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;

所有表(若想详细了解可以查看文档):
数据库表

架构设计

设计思想

“调度中心”负责发起调度请求。

“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。

系统组成

  • 调度模块(调度中心)

    负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;
    支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,GLUE开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover。

    img

    输入图片说明

    GLUE模式(java)

    查看日志

  • 执行模块(执行器)

    负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;
    接收“调度中心”的执行请求、终止请求和日志请求等。

    主要分为GLUE模式(java)、BEAN模式,查看(任务详解)

    GLUE模式(java)

    ​ 任务以源码方式维护在调度中心,支持通过Web IDE在线更新,实时编译和生效,因此不需要指定JobHandler。

    输入图片说明

    输入图片说明

    BEAN模式:

    ​ 需要继承IJobHandler类开发,在源码找到模板,根据模板开发。并在调度中心中,新建调度任务

    输入图片说明

一次完整的任务调度通讯流程

  • 1、“调度中心”向“执行器”发送http调度请求: “执行器”中接收请求的服务,实际上是一台内嵌jetty服务器,默认端口9999;
  • 2、“执行器”执行任务逻辑;
  • 3、“执行器”http回调“调度中心”调度结果: “调度中心”中接收回调的服务,是针对执行器开放一套API服务;

任务详解

配置属性详细说明:

执行器:任务的绑定的执行器,任务触发调度时将会自动发现注册成功的执行器, 实现任务自动发现功能;

路由策略:当执行器集群部署时,提供丰富的路由策略,包括:

  • FIRST(第一个):固定选择第一个机器;
  • LAST(最后一个):固定选择最后一个机器;
  • ROUND(轮询):;
  • RANDOM(随机):随机选择在线的机器;
  • 等等

运行模式:

  • BEAN模式:任务以JobHandler方式维护在执行器端;需要结合 "JobHandler" 属性匹配执行器中任务;
  • GLUE模式(Java):任务以源码方式维护在调度中心;该模式的任务实际上是一段继承自IJobHandler的Java类代码并 "groovy" 源码方式维护,它在执行器项目中运行,可使用@Resource/@Autowire注入执行器里中的其他服务;是一段java代码

JobHandler:运行模式为 "BEAN模式" 时生效,对应执行器中新开发的JobHandler类“@JobHandler”注解自定义的value值;

阻塞处理策略:调度过于密集执行器来不及处理时的处理策略;

子任务:每个任务都拥有一个唯一的任务ID(任务ID可以从任务列表获取),当本任务执行结束并且执行成功时,将会触发子任务ID所对应的任务的一次主动调度。

BEAN模式

任务逻辑以JobHandler的形式存在于“执行器”所在项目中,开发流程如下:

步骤一:执行器项目中,开发JobHandler:

安装下面代码的模板即可开发执行器。

输入图片说明

步骤二:调度中心,新建调度任务

运行模式选中 "BEAN模式",JobHandler属性填写任务注解“@JobHandler”中定义的值

为方便用户参考与快速实用,示例执行器内原生提供多个Bean模式任务Handler,可以直接配置实用。

  • demoJobHandler:简单示例任务,任务内部模拟耗时任务逻辑,用户可在线体验Rolling Log等功能;
  • shardingJobHandler:分片示例任务,任务内部模拟处理分片参数,可参考熟悉分片任务;
  • httpJobHandler:通用HTTP任务Handler;业务方只需要提供HTTP链接即可,不限制语言、平台;
  • commandJobHandler:通用命令行任务Handler;业务方只需要提供命令行即可;如 “pwd”命令;

GLUE模式(java)

任务以源码方式维护在调度中心,支持通过Web IDE在线更新,实时编译和生效,因此不需要指定JobHandler。

步骤一:调度中心,新建调度任务:

输入图片说明

步骤二:开发任务代码:

输入图片说明

issxxl-job 中的一些参数

调度中心地址:http://10.202.117.55:8080/xxl-job-admin-1.9.0/jobinfo

调度中心有两条BEAN模式调用:

  • BEAN模式:tranShipPointHandler(使用http发送post请求)
  • BEAN模式:branchScheduleHandler(使用http发送post请求)

2 操作指南

配置执行器

输入图片说明

点击按钮 "+新增执行器" ,可新增执行器

输入图片说明

AppName: 是每个执行器集群的唯一标示AppName, 执行器会周期性以AppName为对象进行自动注册。可通过该配置自动发现注册成功的执行器, 供任务调度时使用;
名称: 执行器的名称,
排序: 执行器的排序, 系统中需要执行器的地方,如任务新增, 将会按照该排序读取可用的执行器列表;
注册方式:调度中心获取执行器地址的方式;
​ 自动注册:执行器自动进行执行器注册,调度中心通过底层注册表可以动态发现执行器机器地址;
​ 手动录入:人工手动录入执行器的地址信息,多地址逗号分隔,供调度中心使用;
机器地址:"注册方式"为"手动录入"时有效,支持人工维护执行器的地址信息;

其他操作

新建任务、编辑任务、编辑GLUE代码、启动、停止任务、手动触发一次调度,查看调度日志、删除执行日志

输入图片说明

输入图片说明

用户管理

进入 "用户管理" 界面,可查看和管理用户信息;

目前用户分为两种角色:

  • 管理员:拥有全量权限,支持在线管理用户信息,为用户分配权限,权限分配粒度为执行器;
  • 普通用户:仅拥有被分配权限的执行器,及相关任务的操作权限;

输入图片说明

输入图片说明

3 快速开发

任务调度中心源码结构

我们使用到的是Spring-boot版本。

配置部署调度中心

调度中心项目:xxl-job-admin
作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。

步骤一:调度中心配置:

地址:/xxl-job/xxl-job-admin/src/main/resources/xxl-job-admin.properties

详细配置文档中有,主要包含调度中心数据库连接的配置、报警邮箱的配置、登陆账号的配置

步骤二:部署项目

项目运行后,访问地址http://localhost:8080/xxl-job-admin,该地址执行器将会使用到,作为回掉地址。登陆后的界面如下。

至此“调度中心”部署成功。

配置部署“执行器”

“执行器”项目:xxl-job-executor-sample-springboot

作用:负责接收“调度中心”的调度并执行;可直接部署执行器,也可以将执行器集成到现有业务项目中。

步骤一:maven依赖

确认pom文件中引入了“xxl-job-core”的maven依赖;

步骤二:执行器配置

配置地址:

/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties

执行器配置,配置内容说明:

### 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin

在我们自己的项目中,调度中心部署地址在下行,源码中的调度中心没有用。

xxl.job.admin.addresses=http://10.202.117.55:8080/xxl-job-admin-1.9.0

主要了解这一个点,其他的可以查看文档。

步骤三:执行器组件配置

配置文件地址:

/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java

步骤四:部署执行器项目

xxl-job-executor-sample-springboot:项目编译打包成springboot类型的可执行JAR包,命令启动即可;

至此“执行器项目”部署结束。

开发第一个任务“Hello World”

本示例以新建一个 “GLUE模式(Java)” 运行模式的任务为例。( “GLUE模式(Java)”的执行代码托管到调度中心在线维护,相比“Bean模式任务”需要在执行器项目开发部署上线,更加简便轻量)

前提:请确认“调度中心”和“执行器”项目已经成功部署并启动;

步骤一:新建任务:

输入图片说明

步骤二:“GLUE模式(java)”任务开发:

“GLUE模式(Java)” 运行模式的任务实际上是一段继承自IJobHandler的Java类代码,它在执行器项目中运行,可使用@Resource/@Autowire注入执行器里中的其他服务,详细介绍请查看第三章节

输入图片说明

步骤三:触发执行:

点击任务右侧 “执行” 按钮,可手动触发一次任务执行(通常情况下,通过配置Cron表达式进行任务调度出发)。

步骤四:查看日志:

请点击任务右侧 “日志” 按钮,可前往任务日志界面查看任务日志。运行中的任务点击右侧的“执行日志”按钮,可进入日志控制台查看实时执行日志。

输入图片说明

在日志控制台,可以实时监控任务进度:

输入图片说明

posted @ 2019-06-27 13:48  星记事  阅读(8813)  评论(2编辑  收藏  举报