您的位置:首页>科学 >分布式任务调度框架Quartz与xxl-job实践

分布式任务调度框架Quartz与xxl-job实践

2023-10-09 22:45

任务调度是在特定业务场景下调度任务处理。在分布式架构中,分布式调度框架的设计尤为重要。本文简单介绍了Quartz和xxl-job这两种常用的分布式调度框架的特点、基本架构和参数配置,以加深理解。


1。分布式调度框架设计

定时任务与在线业务的实时处理不同,需要在特定的时间处理特定的任务,例如每天在财务核心会计系统中进行定时记账批量处理,在电商系统中的小时 定期回收处理购票系统中的超时订单、定时发送动态账号短信通知等

如果上述业务场景是在单机环境下,您可以通过Timer或者spring定时框架定义定时任务类来对任务进行调度和编排。但在分布式应用架构中,分布式定时任务调度框架需要满足以下基本特征:
  1. 核心功能:调度、任务管理和可观察日志

  2. 高可用性:集群和任务分片的高可用性以及故障后处理

  3. 高性能:分布式锁的实现

  4. 扩展功能:可视化运维、多语言支持、任务编排

1.1 分布式任务调度框架总体架构
分布式任务调度是分布式集群架构下对定时任务的调度和管理。包含三个关键词:分布式、任务调度、配置监控中心:
  1. 分布式架构:分布式部署架构中的每个节点都可以无状态、无限水平扩展,支持动态扩缩容和动态任务在线离线

  2. 任务调度与执行:具体任务请求的分发与接收、任务动态均衡分配、任务执行及任务状态管理(失败或超时重试、断点重试)

  3. 配置监控中心:感知整个集群的状态并监控,任务信息注册、任务运行日志和任务进度监控

基于此,常见的分布式任务调度框架一般包括以下模块:
  1. 调度控制台:负责定时任务的可视化编排和配置、任务进程和状态的动态展示、任务运行的关键日志和错误信息的显示、任务超时控制和失败重试的配置

  2. 任务接入:将任务从调度控制台转换到调度器,并向注册中心注册任务

  3. 调度器:接收接入下发的调度任务,将任务拆分下发,在注册中心找到执行器,然后将任务发送给执行器执行,同时也向注册中心注册

  4. 执行器:接收调度任务并向注册中心上报状态。执行器是一个批量运行的程序,即真正运行作业逻辑的进程

  5. 注册中心:集群内节点和任务状态同步更新,任务信息注册

  6. 监控中心:集成在调度台中,实现任务进度、任务超时、失败报警的实时监控

1.2 分布式任务调度的核心概念
  • Executor:批量运行程序,即真正运行作业逻辑的进程;

  • 执行器组:一个逻辑概念,是多个执行器的集合。每个作业需要绑定一个执行器组,并根据作业配置的路由策略进行调度;

  • 作业JOB:作业是批处理逻辑的载体,是批处理操作的最小单元;在java中,作业对应一个方法函数;在shell中,该作业对应于一个sh脚本。

  • 任务:任务是作业编排的容器,是多个作业如何有序运行的工作流定义。

1.3 常见分布式调度方案
常见的计划任务解决方案包括以下几种:
  • While + Sleep:通过循环和休眠定期执行

  • Timer和TimerTask实现:JDK自带的定时任务可以实现简单的间隔执行任务(在指定时间点执行任务,也可以周期性执行),但无法根据日历调度执行任务。

  • ScheduledExecutorServiceJava在并发包下,出现了JDK1.5,这是一个理想的定时任务实现方案。尤里卡用它

  • QuartZ:使用Quartz,这是一个功能丰富的异步任务调度框架,可以实现日历调度,并且支持持久化。

  • 使用SpringTask:Spring 3.0之后,提供Spring Task来实现任务调度,支持按日历调度。功能比Quartz稍微简单一些,但是开发基本够用,并且支持注解编程。

  • springboot中的Schedule:计划任务大多是通过@EnableScheduling+@Scheduled来实现的。底层使用Spring Task

开源中常见的分布式调度框架有以下几种。本文主要介绍Quartz和xxl-job。 https://www.webguidecorpuschristi.com/project/tag/327/task-schedule

2。 Quartz作业调度框架

2.1 Quartz 基本介绍

Quartz是OpenSymphony开源组织的Java开源项目,完全基于Java。