xxl-job

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。

现已开放源代码并接入多家公司线上产品线,开箱即用。

特性

1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手; 2、动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效; 3、调度中心HA(中心式):调度采用中心式设计,“调度中心”自研调度组件并支持集群部署,可保证调度中心HA; 4、执行器HA(分布式):任务分布式执行,任务”执行器”支持集群部署,可保证任务执行HA; 5、注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。同时,也支持手动录入执行器地址; 6、弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务; 7、触发策略:提供丰富的任务触发策略,包括:Cron触发、固定间隔触发、固定延时触发、API(事件)触发、人工触发、父子任务触发; 8、调度过期策略:调度中心错过调度时间的补偿处理策略,包括:忽略、立即补偿触发一次等; 9、阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度; 10、任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务; 11、任务失败重试:支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;其中分片任务支持分片粒度的失败重试; 12、任务失败告警;默认提供邮件方式失败告警,同时预留扩展接口,可方便的扩展短信、钉钉等告警方式; 13、路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等; 14、分片广播任务:执行器集群部署时,任务路由策略选择”分片广播”情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数开发分片任务; 15、动态分片:分片广播任务以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。 16、故障转移:任务路由策略选择”故障转移”情况下,如果执行器集群中某一台机器故障,将会自动Failover切换到一台正常的执行器发送调度请求。 17、任务进度监控:支持实时监控任务进度; 18、Rolling实时日志:支持在线查看调度结果,并且支持以Rolling方式实时查看执行器输出的完整的执行日志; 19、GLUE:提供Web IDE,支持在线开发任务逻辑代码,动态发布,实时编译生效,省略部署上线的过程。支持30个版本的历史版本回溯。 20、脚本任务:支持以GLUE模式开发和运行脚本任务,包括Shell、Python、NodeJS、PHP、PowerShell等类型脚本; 21、命令行任务:原生提供通用命令行任务Handler(Bean任务,”CommandJobHandler”);业务方只需要提供命令行即可; 22、任务依赖:支持配置子任务依赖,当父任务执行结束且执行成功后将会主动触发一次子任务的执行, 多个子任务用逗号分隔; 23、一致性:“调度中心”通过DB锁保证集群分布式调度的一致性, 一次任务调度只会触发一次执行; 24、自定义任务参数:支持在线配置调度任务入参,即时生效; 25、调度线程池:调度系统多线程触发调度运行,确保调度精确执行,不被堵塞; 26、数据加密:调度中心和执行器之间的通讯进行数据加密,提升调度信息安全性; 27、邮件报警:任务失败时支持邮件报警,支持配置多邮件地址群发报警邮件; 28、推送maven中央仓库: 将会把最新稳定版推送到maven中央仓库, 方便用户接入和使用; 29、运行报表:支持实时查看运行数据,如任务数量、调度次数、执行器数量等;以及调度报表,如调度日期分布图,调度成功分布图等; 30、全异步:任务调度流程全异步化设计实现,如异步调度、异步运行、异步回调等,有效对密集调度进行流量削峰,理论上支持任意时长任务的运行; 31、跨语言:调度中心与执行器提供语言无关的 RESTful API 服务,第三方任意语言可据此对接调度中心或者实现执行器。除此之外,还提供了 “多任务模式”和“httpJobHandler”等其他跨语言方案; 32、国际化:调度中心支持国际化设置,提供中文、英文两种可选语言,默认为中文; 33、容器化:提供官方docker镜像,并实时更新推送dockerhub,进一步实现产品开箱即用; 34、线程池隔离:调度线程池进行隔离拆分,慢任务自动降级进入”Slow”线程池,避免耗尽调度线程,提高系统稳定性; 35、用户管理:支持在线管理系统用户,存在管理员、普通用户两种角色; 36、权限控制:执行器维度进行权限控制,管理员拥有全量权限,普通用户需要分配执行器权限后才允许相关操作;

TODO

整体设计的确实优秀,可以实际应用起来。

chat

详细介绍一下 xxl-job

xxl-job 是一个开源的分布式任务调度平台,主要用于解决分布式系统中的定时任务调度问题。该项目由徐雪理(@徐雪理)发起,是一个轻量级、易用、可扩展的分布式任务调度框架,适用于企业级应用。

以下是 xxl-job 的一些关键特性和组成部分:

  1. 分布式任务调度: xxl-job 支持分布式任务调度,可以通过配置中心集中管理任务,并在多个节点上执行。这有助于实现任务的高可用性和水平扩展。

  2. 任务管理中心: 提供了一个可视化的任务管理中心,可以通过 Web 界面进行任务的新增、编辑、删除、暂停、恢复等操作。这使得任务的管理更加便捷。

  3. 动态任务: 允许在运行时动态添加、删除任务,而无需重启应用。这对于动态任务的管理和调整非常有用。

  4. 分片广播执行: 支持将任务分片执行,每个分片在一个节点上独立运行,可以充分利用集群资源。同时,也支持分片广播,将任务广播到所有节点上执行。

  5. 任务调度策略: 支持多种任务调度策略,包括简单调度、CRON 表达式调度、固定间隔调度等。用户可以根据实际需求选择合适的调度方式。

  6. 失败重试和报警: 当任务执行失败时,xxl-job 支持失败重试机制,并提供了报警通知,方便及时发现和处理问题。

  7. 任务日志和监控: xxl-job 记录任务的执行日志,并提供了任务的运行状态监控,通过 Web 界面可以方便地查看任务的执行情况和性能统计。

  8. Spring 集成: xxl-job 提供了与 Spring 框架的集成支持,可以方便地在 Spring 项目中使用。

  9. 开源社区活跃: 作为一个开源项目,xxl-job 拥有活跃的社区支持,用户可以在社区中获取帮助、提出问题,并参与项目的贡献。

总体而言,xxl-job 是一个简单、易用、功能完善的分布式任务调度框架,适用于各种规模的项目。在分布式系统中,xxl-job 可以帮助用户有效地管理和调度定时任务,提高任务执行的稳定性和可靠性。

xxl-job 有哪些核心能力?

xxl-job 的核心能力主要集中在以下几个方面:

  1. 分布式任务调度: xxl-job 提供了强大的分布式任务调度能力。它可以在多个节点上协同执行任务,实现任务的分布式调度,确保任务高可用性和负载均衡。

  2. 动态任务管理: xxl-job 允许在运行时动态添加、编辑、删除任务,而无需重新启动应用。这一特性使得任务的管理更加灵活,可以根据实际需求随时进行任务的调整。

  3. 分片广播执行: 对于分片任务,xxl-job 提供了分片广播执行的能力。每个分片可以在独立的节点上运行,充分利用集群资源。同时,也支持将任务广播到所有节点上执行。

  4. 灵活的调度策略: xxl-job 提供多种灵活的任务调度策略,包括简单调度、CRON 表达式调度、固定间隔调度等。用户可以根据任务的特性选择适合的调度方式。

  5. 失败重试机制: 在任务执行失败时,xxl-job 支持失败重试机制。用户可以配置任务失败后的重试次数和重试间隔,以提高任务的执行稳定性。

  6. 任务日志和监控: xxl-job 记录任务的执行日志,并提供了任务的运行状态监控。用户可以通过 Web 界面方便地查看任务的执行情况、性能统计等信息,帮助及时发现和处理问题。

  7. 报警通知: 当任务执行失败时,xxl-job 支持报警通知机制。用户可以配置报警接收人和方式,以便在任务异常时及时收到通知,有助于快速响应和问题排查。

  8. Spring 集成支持: xxl-job 提供了与 Spring 框架的集成支持,可以方便地在 Spring 项目中使用。这使得 xxl-job 在 Spring 应用中的接入更加无缝。

总体而言,xxl-job 通过这些核心能力,为用户提供了一个稳定、灵活、易用的分布式任务调度平台,适用于各种复杂的调度场景。

xxl-job 分布式任务调度核心实现原理?

xxl-job 分布式任务调度的核心实现原理主要涉及分布式任务调度中的任务分发、执行和监控等方面。以下是 xxl-job 分布式任务调度的核心实现原理:

  1. 任务注册与调度中心:
    • 所有执行器节点将自己注册到调度中心,向调度中心报告自己的信息,包括节点地址、可执行任务类型等。
    • 调度中心负责维护所有注册的执行器信息,以便在任务触发时选择合适的执行器。
  2. 任务触发和分发:
    • 当一个任务触发时,调度中心根据任务配置和调度策略,选择一个或多个执行器节点来执行任务。
    • 如果是分片任务,调度中心根据分片策略将任务分配到各个执行器节点上。
  3. 执行器节点任务执行:
    • 被选中的执行器节点接收到任务后,开始执行任务逻辑。
    • 执行器节点负责将任务的执行结果和日志报告给调度中心。
  4. 任务执行的状态管理:
    • 调度中心维护任务执行的状态,包括任务的触发时间、执行开始时间、执行结束时间、执行结果、失败重试次数等信息。
    • 执行器节点定期向调度中心上报任务的执行状态,保持任务执行信息的实时性。
  5. 任务失败处理:
    • 如果任务执行失败,根据配置的失败重试策略,调度中心可以重新将任务分发给其他执行器节点进行重试。
    • 在达到最大重试次数后,调度中心可以触发报警通知,通知相关人员进行问题处理。
  6. 任务日志管理:
    • 执行器节点负责记录任务执行的日志,包括任务的输入参数、输出结果、异常信息等。
    • 调度中心可以通过任务日志来查看任务的执行详情,用于问题排查和性能分析。
  7. 动态任务管理:
    • 调度中心支持在运行时动态添加、编辑、删除任务,无需重启应用。
    • 动态任务管理使得任务的管理更加灵活,可以根据实际需求随时进行任务的调整。
  8. 分布式协调与通信:
    • 调度中心和执行器节点之间通过分布式协调工具(如ZooKeeper等)进行通信和协调,确保调度信息的一致性和节点的可靠性。

xxl-job 动态任务管理实现原理?

xxl-job 的动态任务管理实现原理主要基于注册中心、调度中心和执行器节点之间的协作。以下是 xxl-job 实现动态任务管理的基本原理:

  1. 任务注册:
    • 执行器节点在启动时,会将自身注册到调度中心,报告自己的节点信息和可执行任务类型。
  2. 任务配置管理:
    • 调度中心维护一个任务配置的数据库,存储任务的基本信息、触发方式、调度策略等。
    • 动态任务的配置信息也会存储在这个数据库中。
  3. 动态任务新增:
    • 当用户在任务管理界面或通过 API 新增一个任务时,调度中心将任务的配置信息存储到数据库中。
    • 调度中心会根据新增的任务配置,选择适当的执行器节点,并将任务下发到执行器节点。
  4. 动态任务编辑:
    • 当用户编辑一个任务时,调度中心更新数据库中的任务配置信息。
    • 调度中心会检测任务的变化,如果需要重新分发,会将新的任务配置信息下发到执行器节点。
  5. 动态任务删除:
    • 当用户删除一个任务时,调度中心从数据库中删除相应的任务配置。
    • 调度中心还会通知相关的执行器节点停止该任务的执行。
  6. 任务调度更新:
    • 当任务配置发生变化时,调度中心负责通知执行器节点更新任务的调度计划。
    • 执行器节点接收到更新通知后,重新加载任务的调度配置,确保任务按照新的配置执行。
  7. 分布式协调与通信:
    • 调度中心和执行器节点之间通过注册中心(如 ZooKeeper)进行分布式协调和通信。
    • 注册中心用于维护调度中心和执行器节点的注册信息,以及实现事件通知机制,确保信息的一致性和及时性。

通过以上机制,xxl-job 实现了在运行时动态管理任务,包括新增、编辑和删除任务,无需重启应用。这样的设计使得用户可以方便地根据业务需求灵活调整任务,提高了系统的可维护性和灵活性。在动态任务管理的背后,分布式协调和通信是确保系统稳定运行的关键。

给出深入学习 xxl-job 的学习资料,包含网址

以下是深入学习 xxl-job 的一些学习资料,包括官方文档、源代码仓库、博客文章和社区讨论等:

  1. 官方文档:
  2. 源代码仓库:
  3. 技术博客和文章:
  4. 视频教程:
  5. 社区讨论:
  6. 相关书籍:
    • 《分布式任务调度平台XXL-JOB核心技术与源码解析》

请注意,xxl-job 的官方文档是学习的首要资料,其中包含了详细的使用说明、配置指南和示例代码。通过阅读源代码、博客文章和参与社区讨论,可以更深入地理解 xxl-job 的设计原理和实现细节。视频教程可以提供更直观的学习体验。综合利用这些资源可以更全面地掌握 xxl-job 分布式任务调度框架。

让你深入学习 xxl-job,你会问哪 10 个问题?为什么

当深入学习 xxl-job 时,以下是可能会提出的十个问题,这些问题有助于全面了解该分布式任务调度框架的设计和使用:

  1. 架构设计和原理:
    • 1.1 xxl-job 的整体架构是怎样的,它是如何实现分布式任务调度的?
    • 1.2 xxl-job 在任务的分发、执行和监控方面的核心原理是什么?
  2. 调度中心与执行器节点协作:
    • 2.1 调度中心和执行器节点之间是如何协作的,它们之间的通信机制是什么?
    • 2.2 注册中心(如 ZooKeeper)在 xxl-job 中的作用是什么,它如何维护注册信息和实现事件通知?
  3. 动态任务管理:
    • 3.1 xxl-job 的动态任务管理是如何实现的,新增、编辑、删除任务的过程中都涉及哪些关键步骤?
    • 3.2 动态任务的配置信息是如何存储和管理的,调度中心和执行器节点是如何感知和处理任务变化的?
  4. 任务调度策略:
    • 4.1 xxl-job 支持哪些任务调度策略,简单调度和 CRON 表达式调度的实现原理是什么?
    • 4.2 分片广播执行是如何实现的,它在分布式任务中的作用是什么?
  5. 任务执行状态和日志:
    • 5.1 调度中心如何维护和监控任务的执行状态,包括触发时间、执行时间、执行结果等信息?
    • 5.2 任务执行过程中的日志记录和管理是如何实现的,有哪些关键的日志信息?
  6. 失败处理和重试机制:
    • 6.1 任务执行失败时,xxl-job 是如何处理的,有哪些失败重试的配置选项?
    • 6.2 失败重试机制中的最大重试次数和重试间隔是如何影响任务执行的?
  7. 报警通知:
    • 7.1 当任务执行异常时,xxl-job 如何触发报警通知,通知的方式和配置有哪些选项?
    • 7.2 报警通知在任务调度中的实际应用场景是什么?
  8. 任务的监控和统计:
    • 8.1 xxl-job 提供了哪些任务的监控和统计功能,如何查看任务的执行情况和性能统计?
    • 8.2 监控界面中的关键指标和数据是如何呈现的?
  9. Spring 集成支持:
    • 9.1 xxl-job 是如何与 Spring 框架集成的,Spring 集成对于应用的开发有哪些优势?
    • 9.2 在 Spring 项目中使用 xxl-job 时需要注意的配置和最佳实践是什么?
  10. 社区和未来发展:
    • 10.1 xxl-job 的开源社区活跃度如何,用户可以在社区中获取哪些支持?
    • 10.2 未来 xxl-job 的发展方向和计划有哪些,是否有即将发布的新版本或新功能?

这些问题涵盖了 xxl-job 的架构、原理、功能特性和实际应用等多个方面,通过深入了解这些问题,可以更全面地掌握 xxl-job 分布式任务调度框架的使用和定制。