一款高性能分布式golang定时任务 Jobor

251 阅读2分钟

github: github.com/v-mars/jobo…

Jobor分布式定时任务

✨ 功能特性v3.0.4

  • 为简化使用和理解成本,之前v2版本的Master Raft模式已经移除,目前Master节点只支持单节点,如有需要请联系作者购买企业版
  • worker高可用,并且通过路由标识,worker可以部署在不同环境,实现不同环境worker的权限控制,worker的系统环境依赖(Python,Golang,执行依赖的文件)
  • 调度server与worker通过grpc通信
  • 支持LDAP(openldap,AD)协议用户认证
  • 支持SSO/OIDC/Oauth协议用户认证
  • 支持多种任务脚本 [ api/restful请求, shell, python3 ] e.g
  • 基于Casbin实现的权限认证
  • 任务日志自动清理功能

提示

Jobor V3已经修复已知所有Bug,并且新增功能:父子任务执行、执行节点组、worker节点支持agent、ssh两种模式、任务归属负责人、支持国产HTTP,RPC框架CloudWeGo(字节跳动)、支持golang任务类型执行。

架构图

部署(推荐使用docker模式运行)

第一步,准备好Master/Server和Worker服务启动配置:  
server: conf/config.yaml  
worker: conf/worker.yaml  
  
第二步,拉取依赖镜像:  
docker pull iocean/jobor:server-v3.0.5  
docker pull iocean/jobor:worker-v3.0.4  
docker pull iocean/jobor:worker-go-v3.0.4  
docker pull iocean/jobor:worker-py-v3.0.4  
  
第三步,启动Master/Server和Worker服务:  
Server/Master:  
docker run -itd --name jobor-server --restart=always --net=host -v /etc/localtime:/etc/localtime -v ${HOST_DIR}/conf:/data/conf -v ${HOST_DIR}/log:/data/log --net=host iocean/jobor:server-v3.0.5  
通用 Worker:  
docker run -itd --name jobor-worker --restart=always --net=host -v /etc/localtime:/etc/localtime -v ${HOST_DIR}/conf:/data/conf -v ${HOST_DIR}/log:/data/log --net=host iocean/jobor:worker-v3.0.4  
执行 Python Worker:  
docker run -itd --name jobor-worker-py --restart=always --net=host -v /etc/localtime:/etc/localtime -v ${HOST_DIR}/conf:/data/conf -v ${HOST_DIR}/log:/data/log --net=host iocean/jobor:worker-py-v3.0.4  
执行 Golang Worker:  
docker run -itd --name jobor-worker-go --restart=always --net=host -v /etc/localtime:/etc/localtime -v ${HOST_DIR}/conf:/data/conf -v ${HOST_DIR}/log:/data/log --net=host iocean/jobor:worker-go-v3.0.4  

构建

go build -o ./app ./main.go  
go build -o ./app ./cmd/worker/main.go  

启动Server(推荐使用docker模式运行)

go build -o ./app ./main.go  
  
./app -c ./conf/config.yaml  

启动Worker(推荐使用docker模式运行)

go build -o ./app ./cmd/worker/main.go  
./app -c ./conf/worker.yaml  

默认

username: admin
password: admin

DB

数据库推荐使用:MySQL8.0  
字符集:utf8mb4  
在配置文件最后一行粘贴以下语句  
/etc/mysql/conf.d/mysql.cnf  
  
[mysqld]  
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION  
  

Jobor预览

TODO

task

  • 支持server/controller/master(通过raft一致性算法)的高可用,一个Raft集群通常包含2*N+1个服务器,允许系统有N个故障服务器(企业版)。
  • ldap(支持openldap,AD 认证)
  • SSO/OIDC/Oauth(支持SSO/OIDC/Oauth认证)
  • server <-- gRPC --> worker
  • task abort
  • task timeout
  • api/restful [GET, POST, PUT, DELETE] task
  • shell task
  • python3 task
  • golang task
  • father task
  • children task
  • worker 预执行(如:执行python 前先执行 pip install xx)
  • worker 节点支持:agent和ssh两种模式
  • 路由标识多选
  • 任务缓存执行