基于go语言的开源调度系统整理

  1. pink https://github.com/busgo/pink
    通过Web界面管理操作简单方便,支持各种任务
    高可用可以部署 n 台调度集群节点,保证没有单点故障。
    部署简单、仅仅需要一个执行文件即可运行。
    集成方便,统一语言无关的任务抽象,接入不同语言的sdk。
    任务故障转移,任务客户端下线自动切至在线客户端任务机器。

  2. crocodile https://github.com/labulaka521/crocodile
    基于Golang开发的分布式任务调度系统,支持http、golang、python、shell、python3、nodejs、bat等调度任务
    依赖redis和mysql
    个人觉得界面可以借鉴

  3. gopherCron https://github.com/holdno/gopherCron
    依赖 Etcd 服务注册与发现
    Gin webapi 提供可视化操作
    Mysql # 任务日志存储
    cronexpr # github.com/gorhill/cronexpr cron表达式解析器
    秒级定时任务
    任务日志查看
    随时结束任务进程
    分布式扩展
    健康节点检测 (分项目显示对应的健康节点IP及节点数)

  4. gocron https://github.com/ouqiang/gocron
    Web界面管理定时任务
    crontab时间表达式, 精确到秒
    任务执行失败可重试
    任务执行超时, 强制结束
    任务依赖配置, A任务完成后再执行B任务
    账户权限控制
    任务类型
    shell任务 在任务节点上执行shell命令, 支持任务同时在多个节点上运行
    HTTP任务 访问指定的URL地址, 由调度器直接执行, 不依赖任务节点
    查看任务执行结果日志
    任务执行结果通知, 支持邮件、Slack、Webhook

  5. go-cron https://gitee.com/man0sions/go-cron
    golang分布式定时任务调度器,支持秒级调度,master节点下发指令,worker节点处理任务
    依赖etcd,mongodb

  6. jiacrontab https://gitee.com/iwannay/jiacrontab
    自定义job执行
    允许设置job的最大并发数
    每个脚本都可在web界面下灵活配置,如测试脚本运行,查看日志,强杀进程,停止定时…
    允许添加脚本依赖(支持跨服务器),依赖脚本提供同步和异步的执行模式
    支持异常通知
    支持守护脚本进程
    支持节点分组
    iacrontab 由 jiacrontab_admin,jiacrontabd 两部分构成,两者完全独立通过 rpc 通信
    jiacrontab_admin:管理后台向用户提供web操作界面
    jiacrontabd:负责job数据存储,任务调度

  7. clock https://github.com/BruceDone/clock
    dag图形界面配置

  8. PPGo_Job https://gitee.com/georgehao/PPGo_Job
    PPGo_Job是一款定时任务可视化的、多人多权限的管理系统,采用golang开发,安装方便,资源消耗少,支持大并发,可同时管理多台服务器上的定时任务。支持PHP,Python,Shell,Java,Go等常见编程语言的定时任务管理,也支持各类unix服务器的各种命令等

  9. gojob https://github.com/wj596/gojob
    极少依赖: 只依赖MySQL 数据库,分布式环境下使用内建的分布式协调机制,不需要安装第三方分布式协调服务,如Zookeeper、Etcd等;更少的依赖意味着后续需要更少的部署和运维成本。

易部署:原生Native程序,无需安装运行时环境,如JDK、.net framework等;支持单机和集群部署两种部署模式。

任务重试:支持自定义任务重试次数、重试时间间隔。当任务执行失败时,会按照固定的间隔时间进行重试。

任务超时:支持自定义任务超时时间,当任务超时,会强制结束执行。

失败转移:当任务在一个执行节点上执行失败,会转移到下一个可用执行节点上继续执行。如任务在节点A上执行失败,会转移到节点B上继续执行,如果失败会转移到节点C上继续执行,直到执行成功。

misfire补偿机制:由于调度服务器宕机、资源耗尽等原因致使任务错过激活时间,称之为哑火(misfire)。比如每天23点整生成日结报表,但是恰巧在23点前服务器宕机、此任务就错失了一次调度。如果我们设置了misfireThreshold为30分钟,如果服务器在23点30分之前恢复,调度器会进行一次执行,以补偿在23点整哑火的调度。

负载均衡:如果集群节点为集群部署,调度服务器可以使用轮询、随机、加权轮询、加权随机等路由策略,为任务选择合适的执行节点。既可以保证执行节点高可用、我单点隐患,也可以将压力分散到不同的执行节点。

任务分片:将大任务拆解为多个小任务均匀的散落在多个节点上并行执行,以协作的方式完成任务。比如订单核对业务,我们有天津、上海、重庆、河北、山西、辽宁、吉林、江苏、浙江、安徽十个省市的账单,如果数据量比较大,单机处理这些订单的核对业务显然不现实。

gojob可以将任务分为3片:执行节点1负责–>天津、上海、重庆、河北;执行节点2负责–>山西、辽宁、吉林; 执行节点13负责–>江苏、浙江、安徽。这样可以用3台机器来合力完成这个任务。如果你的机器足够,可以将任务分成更多片,用更多的机器来协同处理。

弹性扩缩容:调度器会感知执行节点的增加和删除、上线和下线,并将执行节点的变化情况应用到下一次的负载均衡算法和任务分片算法中。支持动态的执行节点动态横向扩展,弹性伸缩整个系统的处理能力。

调度唯一性:调度节点集群使用Raft算法进行主节点选举,一个集群中只存在一个主节点。任务在一个执行周期内,只会被主节点调用一次,保证调度的一致性。

调度节点高可用:集群内通过Raft共识算法和数据快照将作业元数据实时进行同步,调度节点收到同步的数据后存在自己内建BoltDB存储引擎中;作业元数据具有强一致性和多副本存储的特性;任务可在任意调度节点被调度,调度节点之间可以无缝衔接,任何一个节点宕机另一个节点可以在毫秒计的时间内接替,保证调度节点无单点隐患。

数据库节点高可用:由于作业元数据保存在节点自己的存储引擎中,MySQL数据库只用来保存调度日志。日志数据的特性使其可容忍短时间内不一致甚至丢失(虽然极少发生但理论上可容忍),因此将日志数据异步写入多库,无需对数据库做集群或者同步设置。极端情况下,数据库节点全部宕机都不会影响调度业务的正常运行,保证数据库节点无单点隐患。

任务依赖:任务可以设置多个子任务,触发时机。如:任务执行结束触发子任务、任务执行成功触发子任务、任务执行失败触发子任。

告警:支持邮件告警。任务调度失败会发送告警邮件到指定的邮箱,每个任务可配置多个告警邮箱。调度节点出现故障、数据库节点出现故障也会发送告警邮箱。

数字签名:支持HMAC( 哈希消息认证码 )数字签名,调度节点和执行节点之间可以通过数字签名来确认身份。

  1. https://github.com/v-mars/jobor
    只依赖mysql,真正的的分布式

支持server/controller/master(通过raft一致性算法)的高可用,一个Raft集群通常包含2*N+1个服务器,允许系统有N个故障服务器。
ldap(支持openldap,AD 认证)
server <-- gRPC --> worker
task abort
task timeout
api/restful [GET, POST, PUT, DELETE] task
shell task
python3 task server task
11.https://github.com/yohamta/dagu
12.https://github.com/fieldryand/goflow
13.https://github.com/tsundata/flowline

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/889379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多个终端查看的history不一样,如何确保多个终端会话之间的 history 一致,减少历史记录差异

问题&#xff1a; 在使用 Linux 系统时&#xff0c;history 命令显示的历史记录通常是与当前终端会话相关的。这就意味着&#xff0c;如果你在多个终端中打开会话&#xff0c;它们显示的历史记录可能不完全相同。这个问题通常是由以下原因引起的&#xff1a; 原因&#xff1a…

yolov8 转华为昇腾om脚本

目录 yolov8 转华为昇腾 om脚本 测试ok 推理demo: yolov8 转华为昇腾 om脚本 测试ok import sys import osos.chdir(os.path.dirname(os.path.abspath(__file__)))import torchcurrent_dir = os.path.dirname(os.path.abspath(__file__))paths = [os.path.abspath(__file__)…

unity打包sdk热更新笔记

Unity3D项目Plugins目录组织 https://blog.csdn.net/linxinfa/article/details/102978005 IPreprocessBuild 继承提供打包前&#xff0c;打包后接口 BuildAssetBundles UnityWebRequest’s DownloadHandlerAssetBundle / LoadFromFile / LoadFromMemoryAsync 数据完整性校…

12.11-12.12总结(约瑟夫问题 机器翻译 滑动窗口)

12.11 刷题 《算法竞赛》这本书看了很多了&#xff0c;但是题目没咋做&#xff0c;所以今天来刷一下题 P1996约瑟夫问题 还依稀记得大一的时候被约瑟夫支配的恐惧&#xff08;哭&#xff09;&#xff0c;但是现在做就感觉很简单&#xff08;虽然也敲了一会&#xff0c;今早感…

git SSL certificate problem: unable to get local issuer certificate

Git 客户端将会验证服务器端提供的SSL证书是否由受信任的证书颁发机构&#xff08;Certification Authority&#xff0c;CA&#xff09;签发。如果Git客户端无法找到或验证本地签发者证书&#xff0c;就会出现 unable to get local issuer certificate 或类似的错误。 该问题一…

使用秘钥登录服务器

在我们测试或生产环境中&#xff0c;为了服务器安全性&#xff0c;有时可能需要以 SSH 密钥的方式登录服务器&#xff0c;接下来&#xff0c;将演示如何通过 SSH 私钥的方式来远程服务器。 一、远程服务器生成密钥对 1、首先在目标远程服务器下生成 SSH 密钥对 ssh-keygen然…

css设置透明的几种办法

在CSS中&#xff0c;有几种方法可以设置元素的透明度。以下是主要的几种方式&#xff1a; 1. 使用 opacity 属性 定义&#xff1a;opacity 属性用于设置元素的整体透明度&#xff0c;包括其内容和背景。取值范围&#xff1a;取值从0&#xff08;完全透明&#xff09;到1&…

4,双向带头循环链表

目录 1&#xff0c;双向带头循环链表的定义 2&#xff0c;双向带头循环链表的实现 A&#xff0c;函数的声明 B&#xff0c;函数的定义 1&#xff0c;双向带头循环链表的定义 带头双向循环链表&#xff1a;结构复杂&#xff0c;一般用在单独存储数据。实际中使用的链表数据…

谷粒商城—分布式基础

1. 整体介绍 1)安装vagrant 2)安装Centos7 $ vagrant init centos/7 A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on…

TimesFM(Time Series Foundation Model)安装(2)

TimesFM&#xff08;Time Series Foundation Model&#xff09;安装简介 readme TimesFM&#xff08;Time Series Foundation Model&#xff09;安装简介&#xff08;1&#xff09;-CSDN博客https://blog.csdn.net/chenchihwen/article/details/144359861?spm1001.2014.3001…

Cesium进阶教程——自定义图形、外观、绘图基础、现有着色器移植至Cesium、ShadowMapping、视频GIS、模型压平、卷帘

基础必看 https://blog.csdn.net/m0_55049655/article/details/139720401 参考路线 http://www.xt3d.online/tutorial/further/article.html 自定义图形 https://blog.csdn.net/m0_55049655/article/details/138908327 https://blog.csdn.net/m0_55049655/article/details/14…

国际荐酒师(香港)协会亮相第六届地博会助力中欧地标交流合作

国际荐酒师&#xff08;香港&#xff09;协会亮相第六届知交会暨地博会&#xff0c;助力中欧地理标志产品交流合作 12月9日&#xff0c;第六届粤港澳大湾区知识产权交易博览会暨国际地理标志产品交易博览会&#xff08;以下简称“第六届知交会暨地博会”&#xff09;在中新广州…

Apache Spark 的基本概念和在大数据分析中的应用。

Apache Spark是一个开源大数据处理框架&#xff0c;被广泛应用于大规模数据分析、机器学习和图形处理等领域。它具有以下几个基本概念&#xff1a; RDD&#xff08;Resilient Distributed Dataset&#xff09;&#xff1a;RDD是Spark中最基本的数据抽象概念&#xff0c;代表了一…

spring boot之@Import注解的应用

我们知道spring boot会通过ComponentScan定义包扫描路径进行业务定义的bean的加载&#xff0c;但是对于很多不在此包路径下定义的bean怎么办呢&#xff1f;比如其他jar包中定义的。这时候import就发挥作用了&#xff0c;通过它也可以实现bean的定义。具体是怎么做的呢&#xff…

Horovod:分布式深度学习训练库;Horovod库中DistributedOptimizer

目录 Horovod:分布式深度学习训练库 环境准备 代码示例 运行脚本 Horovod库中DistributedOptimizer DistributedOptimizer的作用 举例说明 Horovod:分布式深度学习训练库 Horovod是一个开源的分布式深度学习训练库,它能够在多个节点(机器)和多个GPU上高效地并行运行…

【Liunx篇】基础开发工具 - vim

文章目录 一.vim的基本概念1.正常/命令模式2.插入模式3.底行模式/末行模式4.视图模式5.替换模式 二.vim的基本操作1.进入vim&#xff1a;2.退出vim: 三.vim正常模式命令集1.光标定位&#xff1a;2.复制/粘贴3.撤销4.剪切/删除5. 更改 四.vim底行模式命令集1.保存/退出2.调出行号…

Windows安装WSL子系统及docker,以及WSL和docker配置、使用及问题解决

在Windows操作系统中,Ubuntu子系统(也称为Windows Subsystem for Linux, WSL)为开发者提供了一个在Windows环境下运行Linux环境的平台。然而,有时用户在按照Ubuntu子系统或者使用WSL时,可能会遇到各种问题,下面总结一下解决方式。 想要在Windows上安装Docker(实际上是基…

构建Modbus TCP写多个寄存器指令详解

构建Modbus TCP写多个寄存器指令详解 在Modbus TCP通信中&#xff0c;构建正确的指令对于实现设备间的数据交换至关重要。本文将详细解释如何构建一个Modbus TCP指令&#xff0c;用于向设备地址为1的从站&#xff0c;从地址200&#xff08;0xC8&#xff09;开始&#xff0c;连…

【Golang】Go语言编程思想(六):Channel,第三节,使用Channel实现树的遍历

使用 Channel 实现树的遍历 tree 在此处简单回顾一下之前学过的二叉树遍历&#xff0c;首先新建一个名为 tree 的目录&#xff0c;并在其下对文件和子目录进行如下组织&#xff1a; 其中 node.go 存放的是 Node 的定义&#xff1a; package treeimport "fmt"type…

【0363】Postgres内核 从 XLogReaderState readBuf 解析 XLOG Record( 8 )

上一篇: 【0362】Postgres内核 XLogReaderState readBuf 有完整 XLOG page header 信息 ? ( 7 ) 直接相关: 【0341】Postgres内核 读取单个 xlog page (2 - 2 ) 文章目录 1. readBuf 获取 page header 大小1.1 XLOG record 跨 page ?1.2 获取 XLOG Record 的 长度(xl…