• Stars
    star
    136
  • Rank 267,670 (Top 6 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created almost 5 years ago
  • Updated 12 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A distributed scheduling job framework supporting DAG workflow for big data and regular jobs, providing programmable job types across different languages.

HodorScheduler

介绍

Hodor是一个专注于任务调度以及任务编排一站式分布式任务调度系统。

通过提供任务编程API和接口协议, 方便支持用户使用不同的编程语言实现任务执行以及自定义任务类型的扩展,以满足各种业务场景下的任务执行。

支持多种接入方式,支持Java SDK包方式、Java Agent独立进程方式接入,以及兼容XXLJob框架、Spring Task框架任务无缝接入。

多语言执行器实现,计划支持Go或者Rust语言执行器(正在设计与开发中)的接入,满足在资源有限的执行器节点执行,比如物联网场景下面的定时任务执行。

支持丰富的任务类型,除了支持普通的Java、脚本任务的执行,也支持了大数据任务Hadoop、Spark、Flink、Kettle等主流任务的执行,满足用户的不同场景。

主要特性

  1. 支持Cron、FixedRate、FixedDelay、OnceTime方式配置定时任务,可以方便地实现各种定时任务需求。
  2. 支持DAG方式进行任务编排,使得任务之间的关系更加清晰,同时提高了系统的可扩展性和灵活性。
  3. 支持Java任务和大数据任务调度,兼容XXLJob、SpringTask调度任务,满足不同场景下的任务调度需求。
  4. 支持可扩展执行器,用户可以根据自己的需求自定义实现任务类型,从而更好地适应不同的业务场景。
  5. 支持任务静态分片、动态分片、广播、WorkFlow等多种任务执行模式。
  6. 支持任务自动创建与手动创建以及批量创建等方式,任务的暂停、恢复、Kill等动作,以及实时日志查看等。
  7. 基于CopySet算法实现任务副本分配,提高了任务的可靠性和容错性,从而保障了任务的高可用性。

详细文档请查阅:https://www.yuque.com/tomgs/hodor

架构设计

hodor架构设计图

快速开始

项目结构:

hodor-scheduler
├─docs                                          # 文档存放位置
├─hodor-actuator                                # hodor任务执行器
│  ├─hodor-actuator-api                         # 执行器扩展接口
│  ├─hodor-actuator-java                        # jar包方式任务执行器
│  ├─hodor-actuator-agent                       # 独立进程方式任务执行器
│  ├─hodor-actuator-xxljob                      # 支持xxl-job执行器
│  └─hodor-actuator-springtask                  # 支持spring task执行器
├─hodor-admin                                   # hodor管理控制台(TODO)
├─hodor-client                                  # 提供与hodor server的交互sdk
├─hodor-common                                  # hodor公共依赖
├─hodor-core                                    # hodor核心业务
├─hodor-examples                                # hodor测试用例
├─hodor-cache                                   # hodor扩展
│  ├─hodor-cache-local                          # 基于本地内存的缓存
│  ├─hodor-cache-embedded                       # 基于embedded的分布式缓存
│  └─hodor-cache-redis                          # 基于redis的分布式缓存
├─hodor-model                                   # hodor公共数据模型
├─hodor-storage                                 # hodor storage模块,任务资源管理
├─hodor-register                                # hodor注册中心
│  ├─hodor-register-api
│  ├─hodor-register-embedded                    # 基于Raft实现注册中心
│  └─hodor-register-zookeeper                   # 基于zk实现注册中心
├─hodor-remoting                                # hodor通信框架
│  ├─hodor-remoting-api
│  └─hodor-remoting-netty
├─hodor-scheduler                               # hodor调度器实现
│  ├─hodor-scheduler-api
│  └─hodor-scheduler-quartz
└─hodor-server                                  # hodor调度服务

本地源码运行方式

  1. 在mysql下执行docs目录下面的hodor_ddl.sql。
  2. 在项目根目录下通过mvn package -DskipTests=true命令编译整个项目,因为涉及到一些代码的自动生成。
  3. 进入到hodor-server,启动HodorServer调度器。
  4. 进入到examples下面的hodor-actuator-java-example,启动java任务执行器程序
  5. java执行器启动完成后会自动将任务注册到调度器里面来

任务使用说明

详细参考 执行器操作指南

java任务接入demo

详细demo代码参考 hodor-examples/hodor-actuator-java-example 模块

普通java任务

@Job(group = "testGroup", jobName = "test1", cron = "0/30 * * * * ?")
public String test1(JobExecutionContext context) {
    log.info("Job [testGroup#test1] execute, context: {}", context);
    JobLogger logger = context.getJobLogger();
    logger.info("start executor job test1");
    logger.info("job argument: {}", context.getJobParameter());
    logger.info("executing......");
    logger.info("executed");
    return "a=123";
}

动态分片任务

// 任务动态切分
@Job(command = "splitStage")
public List<ShardData> split(JobExecutionContext context) {
    ShardData shardData = ShardData.builder().id(0).params("hello").build();
    ShardData shardData1 = ShardData.builder().id(1).params("world").build();
    return Lists.newArrayList(shardData, shardData1);
}

// 任务并行执行
@Job(command = "parallelJob")
public String parallelJob(JobExecutionContext context) {
    log.info("Job [parallelJob] execute, context: {}", context);
    JobLogger logger = context.getJobLogger();
    final ShardData parentJobData = context.getParentJobData(ShardData.class);
    logger.info("start executor job parallelJob, parentJobData: {}", parentJobData);
    log.info("start executor job parallelJob, parentJobData: {}", parentJobData);
    return "a=123";
}

// 任务汇总执行
@Job(command = "reduceJob2")
public void reduceJob(JobExecutionContext context) {
    log.info("Job [reduceJob] execute, context: {}", context);
    JobLogger logger = context.getJobLogger();
    logger.info("job argument: {}", context.getJobParameter());
    logger.info("executed");
    logger.info("Job [reduceJob] execute, context: {}", context);
    logger.info("Job [reduceJob] execute, results {}", context.getParentJobExecuteResults()
    );
    logger.info("Job [reduceJob] execute, statues {}", context.getParentJobExecuteStatuses());
}

xxljob任务接入demo

详细demo代码参考 hodor-examples/hodor-actuator-xxljob-example 模块

/**
 * 1、简单任务示例(Bean模式)
 */
@XxlJob("demoJobHandler")
public void demoJobHandler() throws Exception {
    XxlJobHelper.log("XXL-JOB, Hello World.");

    for (int i = 0; i < 5; i++) {
        XxlJobHelper.log("beat at:" + i);
        TimeUnit.SECONDS.sleep(2);
    }
    // default success
}

/**
 * 2、分片广播任务
 */
@XxlJob("shardingJobHandler")
public void shardingJobHandler() throws Exception {
    // 分片参数
    int shardIndex = XxlJobHelper.getShardIndex();
    int shardTotal = XxlJobHelper.getShardTotal();

    XxlJobHelper.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);

    // 业务逻辑
    for (int i = 0; i < shardTotal; i++) {
        if (i == shardIndex) {
            XxlJobHelper.log("第 {} 片, 命中分片开始处理", i);
        } else {
            XxlJobHelper.log("第 {} 片, 忽略", i);
        }
    }
}

spring task任务接入demo

详细demo代码参考 hodor-examples/hodor-actuator-springtask-example 模块

@Scheduled(fixedRate = 3000)
public void task1() throws InterruptedException {
    TimeUnit.SECONDS.sleep(2);
    System.out.println("执行 fixedRate 任务的时间:" + new Date(System.currentTimeMillis()));
}

@Scheduled(fixedDelay = 4000)
public void task2() throws InterruptedException {
    TimeUnit.SECONDS.sleep(2);
    System.out.println("执行 fixedDelay 任务的时间:" + new Date(System.currentTimeMillis()));
}

@Scheduled(cron = "0/5 * * * * ?")
public void task3() {
    System.out.println("执行 cron 任务的时间:" + new Date(System.currentTimeMillis()));
}

agent 方式任务接入demo

详细参考 执行器操作指南 中的agent方式的使用。

hodor打包部署说明

详细参考 安装部署操作指南

交流学习

目前,Hodor仍处于建设的过程中,团队成员只能抽出空闲时间投入其中,主要精力还是放在日常工作中。 如果有兴趣的同学想要参与Hodor的实现或者一起学习,欢迎通过微信联系我们,我们非常欢迎新的成员加入!

Hodor的未来发展方向包括以下几个方面:

  1. 前端界面和控制台开发,为用户提供更加友好、直观的任务管理界面。
  2. 执行器开发工作,包括执行编程框架和大数据任务执行器的优化,以提高系统的性能和稳定性。
  3. 通信协议改造,计划将目前自定义的协议改造为grpc的方式,以提高系统的可扩展性和兼容性。
  4. 优化CopySet算法的实现,以支持机架感知,更好地分配任务副本。
  5. 开发多语言执行器,主要放在go和rust语言,以满足用户不同的需求和偏好。

Wechat:(备注:Hodor)

image-20220529141555032

More Repositories

1

hutool

🍬A set of tools that keep Java sweet.
Java
28,875
star
2

Sa-Token

一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!—— 登录认证、权限认证、分布式Session会话、微服务网关鉴权、单点登录、OAuth2.0
Java
16,163
star
3

lamp-cloud

lamp-cloud 支持jdk21、jdk17、jdk11、jdk8,ta基于 SpringCloud + SpringBoot 开发的微服务中后台快速开发平台,专注于多租户(SaaS架构)解决方案,亦可作为普通项目(非SaaS架构)的基础开发框架使用,目前已实现插拔式数据库隔离、SCHEMA隔离、字段隔离 等租户隔离方案。
Java
5,470
star
4

hertzbeat

A real-time monitoring system with agentless, performance cluster, prometheus-compatible, custom monitoring and status page building capabilities.
Java
4,459
star
5

hmily

Distributed transaction solutions
Java
4,103
star
6

dynamic-tp

🔥🔥🔥轻量级动态线程池,内置监控告警功能,集成三方中间件线程池管理,基于主流配置中心(已支持Nacos、Apollo,Zookeeper、Consul、Etcd,可通过SPI自定义实现)。Lightweight dynamic threadpool, with monitoring and alarming functions, base on popular config centers (already support Nacos、Apollo、Zookeeper、Consul, can be customized through SPI).
Java
3,700
star
7

liteflow

Lightweight, fast, stable, and programmable component-based rule engine/process engine. Component reuse, synchronous/asynchronous orchestration, dynamic orchestration, multi-language scripting support, complex nested rules, hot deployment, smooth refreshing. Let you improve your development efficiency!
Java
2,955
star
8

raincat

强一致分布式事务框架
Java
1,907
star
9

domain-admin

域名SSL证书监测平台、SSL证书申请自动续签。Domain and SSL Cert monitor System.
Python
1,776
star
10

x-file-storage

一行代码将文件存储到 本地、FTP、SFTP、WebDAV、谷歌云存储、阿里云OSS、华为云OBS、七牛云Kodo、腾讯云COS、百度云 BOS、又拍云USS、MinIO、 AWS S3、FastDFS、 Azure Blob Storage、金山云 KS3、美团云 MSS、京东云 OSS、天翼云 OOS、移动云 EOS、沃云 OSS、 网易数帆 NOS、Ucloud US3、青云 QingStor、平安云 OBS、首云 OSS、IBM COS、其它兼容 S3 协议的平台。后续即将支持 Samba、NFS
Java
1,700
star
11

mayfly-go

web版linux(终端 文件 脚本 进程)、数据库(mysql pgsql oracle sqlserver 高斯 达梦 sqlite)、数据同步、redis(单机 哨兵 集群)、mongo统一管理操作平台。web version of linux(terminal file script process), database (mysql pgsql oracle sqlserver Gauss sqlite), redis(single sentinel cluster), mongo unified management and operation platform.
Vue
1,657
star
12

forest

A high-level and lightweight declarative HTTP client framework for Java. it makes sending HTTP requests in Java easier.
Java
1,645
star
13

electron-egg

A simple, cross platform, enterprise desktop software development framework
JavaScript
1,517
star
14

myth

Reliable messages resolve distributed transactions
Java
1,492
star
15

MaxKey

🗝️MaxKey SSO ,Leading-Edge IAM-IDaas(Identity and Access Management) Product,业界领先的IAM-IDaas身份管理和认证产品,支持OAuth2.x、OpenID Connect、SAML2.0、JWT、CAS、SCIM等SSO标准协议,基于RBAC统一权限控制,实现用户生命周期管理,开源、安全、合规、自主可控。
Java
1,460
star
16

easy-es

A foolproof Elasticsearch ORM framework that is easy to use, requires minimal coding, and is highly expandable...
Java
1,396
star
17

Jpom

🚀简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件
Java
1,184
star
18

RuoYi-Vue-Plus

基于RuoYi-Vue集成 Lombok+Mybatis-Plus+Undertow+knife4j+Hutool+Feign 重写所有原生业务 定期与RuoYi-Vue同步
Java
1,022
star
19

sureness

A efficient security framework focus on protection of API.
Java
859
star
20

yft-design

一款美观且功能强大的在线设计工具,具备海报设计和图片编辑功能,基于fabric.js的开源版【稿定设计】。适用于多种场景,如海报生成、电商产品图制作、文章长图设计、视频/公众号封面编辑等 。A beautiful and powerful online design tool
TypeScript
788
star
21

payment-spring-boot

微信支付V3支付,支持微信优惠券,代金券、商家券、公众号支付、微信小程序支付、分账、支付分、商家券、合单支付、先享卡、电商收付通等全部微信支付功能API,同时满足服务商、商户开发需求。一键集成,上手快,欢迎star。
HTML
766
star
22

dante-cloud

Dante Cloud 国内首个支持阻塞式和响应式融合的微服务 。以「高质量代码、低安全漏洞」为核心,采用领域驱动模型(DDD)设计思想,完全基于 Spring 生态全域开源技术和 OAuth2.1 协议,支持智能电视、IoT等物联网设备认证,满足国家三级等保要求、支持接口国密数字信封加解密、防刷、高防XSS和SQL注入等一系列安全体系的多租户微服务解决方案。
Java
706
star
23

mendmix-cloud

Mendmix定位是一站式分布式开发架构开源解决方案及云原生架构技术底座。Mendmix提供了数据库、缓存、消息中间件、分布式定时任务、安全框架、网关以及主流产商云服务快速集成能力。基于Mendmix可以不用关注技术细节快速搭建高并发高可用基于微服务的分布式架构。
Java
694
star
24

newcar

🪢A modern animation engine for JavaScript ecosystem based on Skia (canvaskit-wasm)
TypeScript
691
star
25

RuoYi-Cloud-Plus

重写RuoYi-Cloud所有功能 整合 SpringCloudAlibaba Dubbo3.0 Sa-Token Mybatis-Plus MQ OSS ES Xxl-Job Docker 全方位升级 定期同步
Java
685
star
26

SMS4J

让简单的事情回归简单的本质。 SMS4J为短信聚合框架,帮您轻松集成多家短信服务,解决接入多个短信SDK的繁琐流程。 目前已接入数家常见的短信服务商,后续将会继续集成。后续的版本中我们还将推出更多的相关功能 你的 ⭐️ ⭐️⭐️Star⭐️⭐️ ⭐️,是我的动力!如果你觉得还不错,请点上一颗小星星
Java
662
star
27

tianai-captcha

可能是java界最好的开源行为验证码 [滑块验证码、点选验证码、行为验证码、旋转验证码, 滑动验证码]
Java
587
star
28

TLog

Lightweight distributed log label tracking framwork
Java
546
star
29

easy-query

java/kotlin high performance lightweight solution for jdbc query,support oltp and olap query,一款java下面支持强类型、轻量级、高性能的ORM,致力于解决jdbc查询,拥有对象模型筛选、隐式子查询、隐式join
Java
500
star
30

neutrino-proxy

中微子代理(内网穿透)
Java
499
star
31

cubic

一站式问题定位平台,分布式实例监控、线程栈监控、线程池监控、动态arthas命令集、依赖分析等等等,助你快速定位问题
Java
494
star
32

go-view

GoView 说明文档,GoView 是一个低代码数据可视化开发平台,将图表或页面元素封装为基础组件,无需编写代码即可完成业务需求。 它的技术栈为:Vue3 + TypeScript4 + Vite2 + NaiveUI + ECharts5 + Axios + Pinia2 + PlopJS
Vue
472
star
33

gobrs-async

Gobrs-Async (异步任务 编排框架) 是一款功能强大、配置灵活、带有全链路异常回调、内存优化、异常状态管理于一身的高性能异步编排框架。为企业提供在复杂应用场景下动态任务编排的能力。 针对于复杂场景下,异步线程复杂性、任务依赖性、异常状态难控制性; Gobrs-Async 为此而生。
Java
441
star
34

fast-request

IntelliJ IDEA plugin Restful Fast Request
Shell
431
star
35

CloudEon

CloudEon uses Kubernetes to install and deploy open-source big data components, enabling the containerized operation of an open-source big data platform. This allows you to reduce your focus on underlying resource management and maintenance.
FreeMarker
421
star
36

dax-pay

免费开源的支付网关,支持支付宝、微信、云闪付等通道,提供收单、退款、聚合支付、对账、分账等功能,通过HTTP方式进行调用,不与其他系统产生耦合关联,可以快速集成到各种系统中,提供可视化界面进行管理,便于实现统一的支付信息管理。
Java
360
star
37

disjob

A distributed job scheduling and distributed computing framework
Java
329
star
38

Jinx

Spring-boot框架采用netty取代tomcat 来做http服务
Java
294
star
39

orion-visor

一款高颜值、现代化的智能运维&轻量堡垒机平台。
Java
280
star
40

RedisFront

RedisFront 是一款开源免费的跨平台 Redis 桌面客户端工具, 支持单机模式, 集群模式, 哨兵模式以及 SSH 隧道连接, 欢迎下载使用.
Java
268
star
41

northstar

国内最优秀的基于JAVA的AI开源量化交易平台,秒替文华、MC、金字塔。具备历史回放、策略研发、模拟交易、实盘交易等功能。兼顾全自动与半自动的使用场景。
Java
259
star
42

dataCompare

big data comparison and data profiling platform: low code,data comparison and data profiling
Java
231
star
43

issues-translate-action

The action for translating Non-English issues content to English.
TypeScript
174
star
44

distribute-transaction

分布式事务书籍随书源码
Java
98
star
45

koalas-rpc

企业生产级百亿日PV高可用可拓展的RPC框架。理论上并发数量接近服务器带宽,客户端采用thrift协议,服务端支持netty和thrift的TThreadedSelectorServer半同步半异步线程模型,支持动态扩容,服务上下线,权重动态,可用性配置,泛化调用,页面流量统计,泛化调用等,支持trace跟踪等,天然接入cat支持数据大盘展示等,持续为个人以及中小型公司提供可靠的RPC框架技术方案
Java
98
star
46

stream-query

Java
89
star
47

J2EEFAST

J2eeFAST 是一个 Java EE 企业级快速开发平台,永久免费、真开源,拒绝标题党。基于经典技术组合(Spring Boot、Spring MVC、Apache Shiro、MyBatis-Plus、Freemarker、Bootstrap、AdminLTE)采用经典开发模式,让初学者能够更快的入门并投入到团队开发中去。 在线代码生成功能,包括核心模块如:组织机构、角色用户、菜单及按钮授权、数据权限、系统参数、内容管理、license认证,BPM工作流等。采用松耦合设计;界面无刷新,一键换肤;众多账号安全设置,密码策略;在线定时任务配置;支持多数据源;支持读写分离、分库分表.
Java
82
star
48

TestHub

一款基于流程编排的自动化测试工具
Java
65
star
49

mybatis-plus-ext

mybatis-plus框架的拓展包,在框架原有基础上做了进一步的轻度封装,增强内容:多数据源自动建表、数据自动填充、自动关联查询、冗余数据自动更新、动态查询条件等。
Java
40
star
50

dromara.github.io

Dromara Official Website
TypeScript
39
star
51

binlog4j

Java
33
star
52

athena

Java
22
star
53

WeMQ

WeMQ是一款面向物联网设备运营商的开源物联网设备调试系统,提供完整的物联网设备调试方案,集成设备管理、MQTT服务器管理、客户管理等功能,自研Nmqs通信层组件,实现了连接信息的加密,保证了数据的安全性。
HTML
18
star
54

open-capacity-platform

JavaScript
14
star
55

transaction-book

distributed transaction book
12
star
56

mybatis-jpa-extra

简化MyBatis CUID操作,增强SELECT分页查询
Java
10
star
57

carpack

📦 The packer of Newcar to package animation into Windows, MacOS, Linux, Android, IOS with Tauri.
TypeScript
9
star
58

website

Dromara Official Website (Old)
JavaScript
7
star
59

hmily-admin

Java
7
star
60

plus-doc

HTML
7
star
61

soul-benchmark

Soul performance test
3
star
62

gateway-book

2
star
63

hmily-dashboard

Vue
2
star
64

open-giteye-api

Java
2
star
65

skyway

2
star
66

hmily-admin-helm-chart

Smarty
2
star
67

tlog-homepage

JavaScript
1
star
68

soul-doc

1
star
69

northstar-monitor

JavaScript
1
star
70

stream-query-docs

文档
HTML
1
star
71

newcar-local-template

The Local Mode Template of Newcar
JavaScript
1
star
72

canvaskit-ts

This version's CanvasKit-WASM move the CanvasKit namespace and auto-init it.
1
star
73

Newcar-Animation-Studio

The visual studio of Newcar, which makes the animation producing more rapid.
Vue
1
star