zoukankan      html  css  js  c++  java
  • 介绍一种很好用的任务调度平台

    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表达式进行任务调度出发)。

    步骤四:查看日志:

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

    输入图片说明

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

    输入图片说明

  • 相关阅读:
    上传文件
    Python中@staticmethod和@classmethod的作用和区别
    面向对象 类
    成员修饰符
    class 类 笔记
    模块&包
    java 文件上传下载
    redis 基本操作命令
    redis 和 mysql 的主从复制
    mysql的日志文件及其作用
  • 原文地址:https://www.cnblogs.com/sean-zeng/p/11096520.html
Copyright © 2011-2022 走看看