天天看点

[开源]一款分布式高性能任务调度框架,支持多种任务、工作流设计

作者:一飞开源
一飞开源,介绍创意、新奇、有趣、实用的开源应用、系统、软件、硬件及技术,一个探索、发现、分享、使用与互动交流的开源技术社区平台。致力于打造活力开源社区,共建开源新生态!
一飞开源-开源推荐,致力于将开源项目技术应用第一时间推送给目标用户,降低开源作者、开源团队、开源组织的开源项目运营推广难度及成本,让开源项目精准畅通传递触达至目标群体,传递价值、分享共赢!

一、开源项目简介

[开源]一款分布式高性能任务调度框架,支持多种任务、工作流设计

一款分布式高性能任务调度框架

Openjob 一款分布式高性能任务调度框架,支持多种定时任务、延时任务、工作流设计、轻量级分布式计算、无限水平扩容,并具有较高的可伸缩性和容错性,以及完善权限管理、强大的告警监控、原生支持多语言。

二、开源协议

使用Apache-2.0开源协议

三、界面展示

[开源]一款分布式高性能任务调度框架,支持多种任务、工作流设计
[开源]一款分布式高性能任务调度框架,支持多种任务、工作流设计
[开源]一款分布式高性能任务调度框架,支持多种任务、工作流设计
[开源]一款分布式高性能任务调度框架,支持多种任务、工作流设计
[开源]一款分布式高性能任务调度框架,支持多种任务、工作流设计
[开源]一款分布式高性能任务调度框架,支持多种任务、工作流设计
[开源]一款分布式高性能任务调度框架,支持多种任务、工作流设计
[开源]一款分布式高性能任务调度框架,支持多种任务、工作流设计
[开源]一款分布式高性能任务调度框架,支持多种任务、工作流设计

四、功能概述

特性

高可靠

分布式无状态设计,采用 Master/Worker 架构,支持多样的数据库(MySQL/PostgreSQL/Oracle)

高性能

底层使用一致性分片算法,全程无锁化设计,任务调度精确到秒级别,支持轻量级分布式计算、无限水平扩容。

定时调度

支持分布式定时任务、固定频率任务、高性能秒级任务、一次性任务定时调度。

分布式计算

支持单机、广播、Map、MapReduce 和分片多种分布式编程模型,轻松实现大数据分布式计算。

延时任务

基于 Redis 实现高性能延时任务,底层实现任务多级存储,提供丰富的统计和报表。

工作流

内置工作流调度引擎,支持可视化 DAG 设计,简单高效实现复杂任务调度。

权限管理

完善的用户管理,支持菜单、按钮以及数据权限设置,灵活管理用户权限

报警监控

全面的监控指标,丰富及时的报警方式,便于运维人员快速定位和解决线上问题。

跨语言

原生支持 Java/Go/PHP/Python 多语言 ,以及Spring Boot、Gin、Swoft 等框架集成。

五、技术选型

开源对比

项目 Quartz Elastic-Job XXL-JOB Openjob
定时调度 Cron Cron Cron 1. 定时任务 2. 秒级任务 3. 一次性任务 4. 固定频率
延时任务 不支持 不支持 不支持 基于 Redis 实现分布式高性能延时任务,实现定时与延时一体化
任务编排 不支持 不支持 不支持 通过图形化编排任务(workflow)
分布式计算 不支持 静态分片 广播 1. 广播 2. Map/MapReduce 3. 多语言静态分片
多语言 Java 1. Java 2. 脚本任务 1. Java 2. 脚本任务 1. Java 2. Go(Gin、beego) 3. PHP(Swoft)* Python(Agent) 4. 脚本任务 5. HTTP任务 6. Kettle
可视化 1. 历史记录 2. 运行日志(不支持存储)3. 监控大盘 1. 历史记 2. 运行日志(支持 H2/Mysql/Elasticsearch)3. 监控大盘 4. 操作记录 5. 查看日志堆栈
可运维 启用、禁用任务 1. 启用、禁用任务 2. 手动运行任务 3. 停止任务 1. 启用、禁用任务 2. 手动运行任务 3. 停止任务
报警监控 邮件 邮件 1. 邮件 2. webhook 3. 企微 4. 飞书
性能 每次调度通过DB抢锁,对DB压力大 ZooKeeper是性能瓶颈 由Master节点调度,Master节点压力大。 任务采用分片算法,每个节点都可以调度,无性能瓶颈,支持无限水平扩展,支持海量任务调度。

依赖

<openjob.worker.version>1.0.4</openjob.worker.version>
<dependency>
    <groupId>io.openjob.worker</groupId>
    <artifactId>openjob-worker-core</artifactId>
    <version>${openjob.worker.version}</version>
</dependency>

<!--If your project base on `Spring Boot`, you can directly use the following dependencies-->
<dependency>
    <groupId>io.openjob.worker</groupId>
    <artifactId>openjob-worker-spring-boot-starter</artifactId>
    <version>${openjob.worker.version}</version>
</dependency>           

六、源码地址

访问一飞开源:https://code.exmay.com/

继续阅读