[开源]一款分布式的任务调度与分布式计算框架,轻量级、简单易用

开源系统流程管理
2026-06-28 06:23 7 次浏览 • 0 次下载 0KB
[开源]一款分布式的任务调度与分布式计算框架,轻量级、简单易用

一、开源项目简介

Logo

一款分布式的任务调度与分布式计算框架

一款分布式的任务调度与分布式计算框架,除了具备常规的任务调度功能外,还提供暂停/取消运行中的任务、恢复执行已暂停的任务、任务分片、失败重试、广播任务、任务依赖、工作流任务(DAG)、管理器与执行器分离部署、Web管理后台等能力。

轻量级,简单易用,特别适合长任务的执行。功能强大,稳定可靠,历经生产检验。

二、开源协议

使用Apache-2.0开源协议

三、界面展示

图片
图片
图片
图片
图片

四、功能概述

特性

  • 分为管理器(Supervisor)和执行器(Worker)两种角色,Supervisor与Worker可分离部署
  • Supervisor与Worker通过注册中心相互发现,支持的注册中心有:Database、Redis、Consul、Nacos、Zookeeper、Etcd
  • Supervisor负责生成任务,把任务派发给Worker执行,支持的任务派发方式有:Redis、Http
  • 需要指定Job的分组(group),Job的任务只会派发给指定组的Worker执行
  • 提供任务分片的能力,重写拆分方法JobSplitter#split即可拆分为多个任务,实现分布式任务及并行执行
  • 支持暂停和取消运行中的任务,已暂停的任务可恢复继续执行,执行失败的任务支持重试
  • 支持任务保存(Savepoint)其执行状态,让手动或异常暂停的任务能从上一次的执行状态中恢复继续执行
  • 任务在执行时若抛出PauseTaskException,会暂停对应实例下的全部任务(包括分派到其它worker机器的任务)
  • 支持广播任务,广播任务会派发给group下的所有worker执行
  • 支持Job间的父子依赖,多个Job配置好依赖关系后便会按既定的依赖顺序依次执行
  • 支持DAG工作流,可把jobExecutor配置为复杂的DAG表达式,如:A->B,C,(D->E)->F,G->H
  • 支持执行中的Task在Worker(服务)发布完成后自动恢复继续执行(见shutdown_strategy配置)
  • 提供Web管理后台,通过用户界面进行作业配置,任务监控等

Comparison

 

Quartz

Elastic-Job

Xxl-Job

Disjob

触发类型

Cron

Cron

Cron、固定频率、父子依赖

Cron、指定时间、固定频率、固定延时、父子依赖

任务编排

无

无

无

DAG表达式

任务分片

无

静态分片

广播任务

广播任务、动态分片

停止与恢复

无

无

终止运行中的任务

暂停执行中的任务、恢复执行已暂停的任务

保存执行快照

无

无

无

有

失败重试

无

失效转移

有

有

后台管理

无

有

有

有

监控告警

无

邮件

邮件

邮件、钉钉、企业微信、飞书、短信等

五、技术选型

Architecture

  • 整体流程
图片
  • 代码结构
disjob                                        # 主项目①pom.xml
├── disjob-admin                              # 管理后台项目②pom.xml(基于Ruoyi框架二次开发)
├── disjob-alert                              # 告警模块
│   ├── disjob-alert-api                      # 告警的抽象接口层
│   ├── disjob-alert-email                    # 邮件告警
│   ├── disjob-alert-im                       # 即时通讯告警(钉钉、企业微信、飞书等)
│   └── disjob-alert-sms                      # 短信告警
├── disjob-bom                                # Maven项目bom模块
├── disjob-common                             # 公共的工具类模块
├── disjob-core                               # 任务调度相关的核心类(如枚举类、接口定义、接口参数等)
├── disjob-dispatch                           # 任务派发模块
│   ├── disjob-dispatch-api                   # 任务派发的抽象接口层
│   ├── disjob-dispatch-http                  # 任务派发的Http实现
│   └── disjob-dispatch-redis                 # 任务派发的Redis实现
├── disjob-id                                 # 分布式ID生成模块
├── disjob-registry                           # Server(Supervisor & Worker)注册模块
│   ├── disjob-registry-api                   # Server注册中心的抽象接口层
│   ├── disjob-registry-consul                # Server注册中心:Consul实现
│   ├── disjob-registry-database              # Server注册中心:Database实现
│   ├── disjob-registry-etcd                  # Server注册中心:Etcd实现
│   ├── disjob-registry-nacos                 # Server注册中心:Nacos实现
│   ├── disjob-registry-redis                 # Server注册中心:Redis实现
│   └── disjob-registry-zookeeper             # Server注册中心:Zookeeper实现
├── disjob-reports                            # 聚合各个模块的测试覆盖率报告
├── disjob-samples                            # Samples项目③pom.xml
│   ├── disjob-samples-conf                   # Samples使用到的配置文件
│   ├── disjob-samples-frameless-worker       # Worker单独部署的范例(普通Java-main应用)
│   ├── disjob-samples-springboot-merged      # Supervisor与Worker合并部署的范例(Spring-boot应用)
│   ├── disjob-samples-springboot-supervisor  # Supervisor单独部署的范例(Spring-boot应用)
│   └── disjob-samples-springboot-worker      # Worker单独部署的范例(Spring-boot应用)
├── disjob-supervisor                         # Supervisor代码
├── disjob-test                               # 用于辅助测试
└── disjob-worker                             # Worker代码