开源分布式任务调度平台Cuckoo-Schedule

1         概述

1.1      平台概述

  Cuckoo-Schedule是基于Quartz-Schedule的轻量级任务调度框架,具有易学习、易上手、开发高效稳定的特点。Demo地址:http://cuckoo.hellosr.com,测试用户:guest,密码:123456。

  Cuckoo-Schedule对调度模块与执行模块进行解耦,调度模块支持集部署、任务分组、任务依赖、权限管理、邮件告警、调度日志记录等功能,并提供WEB页面对任务进行管理,支持任务实时调度情况的查看、变更以及任务手动执行回溯、暂停等管理功能。执行模块支持客户端切面、脚本代码,实现客户端任务的零代码侵入。

1.2      功能介绍

调度集群

  Cuckoo-Schedule的分布式策略是以数据库作为边界资源的并发策略,每个集群节点遵守相同的调度规范,集群节点可动态扩容、删除。

任务依赖

  Cuckoo-Schedule支持任务的依赖于触发,从而使得任务执行有先后顺序。任务可以定时触发,也可以通过上级任务触发。同时一个任务的执行可以依赖多个任务的完成状态。

任务分类

  Cuckoo-Schedule既可以支持日切任务(每日执行任务),有可以支持数据流任务(按时间间隔执行),日切任务依赖组执行的日切业务时间在执行时保持一致,数据流任务依赖住执行的数据开始时间戳和结束时间戳保持一致。

例如:

  有任务A/B/C任务,如果依赖组是日切任务,那么这三个任务有相同的业务执行日期。如果依赖组是数据流任务,那么这三个任务有相同的开始时间戳和结束时间戳。

任务分片

  针对数据量超大的任务,需要制定分片策略,将任务拆解成多个小任务通过不同的客户端执行,达到提供任务调度速率的目标。Cuckoo-Schedule可以针对任务层级设置任务执行参数,作为参数传递给客户端并进行任务分片执行。

任务执行查看

  Cuckoo-Schedule支持任务执行日志情况查看,也支持任务执行依赖关系执行情况查看,便于任务执行异常情况下排查问题原因。

任务重跑

  当任务执行失败后,支持手工对任务进行重跑操作,重跑是可以选择是否执行触发任务。

任务暂停

  当客户端某个系统需要上线或者重启操作时,可以通过控制台手工暂停客户端任务的调度,避免由于服务重启的情况下,造成任务失败。

任务告警

  由于客户端系统上线、服务宕机、网络波动等问题会造成任务执行过程中的中断、超时等情况,Cuckoo-Schedule可以设置告警邮件接收列表,以及任务层级设定告警超时提醒时间。

任务配置

  任务配置支持管理界面进行配置,也支持通过SQL的形式将任务导入。通过这两种方式,可以做到,在开发环境通过页面配置任务,在测试与线上环境是,通过将开发环境配置好的SQL导入到系统中。保证各个环境任务一直,避免人工操作造成的不一致情况发生。

客户端分类

  客户端通过appName区分不同的客户端类型,不同的定时任务由不同类型的客户端执行。有助于在微(多)服务架构中,各个服务执行自己的任务。

客户端切面

  在支持Spring的客户端服务中,可以通过引入Cuckoo-Client配置,通过注解的形式织入Cuckoo任务调度逻辑,开发简单易上手。

客户端脚本任务

  Cuckoo-Schedule支持执行各类脚本,例如:shell、python、node、perl、curl等

2         快速搭建

2.1      下载

  GitHub地址:https://github.com/suyin58/cuckoo-schedule

  QQ群讨论组:639066328

2.2      工程搭建

2.2.1      数据库配置

  工程下载完成后,依次执行工程目录下的《00.quartz-core.sql》、《01.cuckoo-shcedule.sql》、《02.data-for-test.sql》

2.2.2      服务端搭建(web工程)

  修改resources下service.properties配置文件的数据库连接配置、邮件发送配置,以及cuckoo.server.tcpPort(用于客户端连接)

2.2.3      客户端搭建(web工程)

  修改resources下spring-mvc-context.xml的配置,服务器集群注意server配置为服务器cuckoo.server.tcpPort的值,appName用于区分不同的应用,clientTag用于区分客户端实例。

2.2.4      查看任务调度情况

  启动服务端工程和客户端工程,访问服务端Web服务,查看启动效果

3         模块介绍

3.1      核心调度模块

  

核心调度模块基于Quartz-Schedule进行调度管理,任务的触发有quartz进行触发,任务执行完成后,如果存在下级任务,那么会触发下级任务的执行。

3.2      注册模块

  

3.3      通信模块

  服务端和客户端的通信采用mina框架构建TCP消息通信,通过自定义的消息格式对消息进行传递与处理。

3.4      权限管理

  权限管理分为三部分,

  权限角色:管理员(拥有查看执行权限,可以将任务分组权限再次分配给普通用户)、普通用户(仅拥有自己创建的任务分组权限,可以将自己创建的任务权限分配给其他用户)、游客(仅用于演示用:拥有所有分组的查看权限,没有操作和再次分配权限)。

  任务分组:权限的控制维度到分组层级,一个任务分组可以包含多种任务。

  权限分类:分配权限 > 操作权限 > 只读权限。每个用户都任务分组都有不同的权限分类,只读权限,只能查看任务分组、操作权限,可以查看任务分组,并且可以对分组下任务进行增删改查以及重跑调度操作等权限、分配权限可以将任务分组的权限分配给其他用户。

3.5      客户端执行模块

  

上图为Cuckoo任务类型的Spring切面执行方式,仅通过注解的方式,将切面织入到应用层面上即可。如果是Script任务类型,那么客户端会调用Runtime.process的方式执行脚本命令。

  

4         高级功能

4.1      参数传递

  调度模块调用客户端执行模块的时候,会传递如下参数:

Cuckoo任务

  需要注解支持,可以通过方法获得对应的参数

    执行参数:JobInfoBean.getCuckooParallelJobArgs()

    日切任务参数:JobInfoBean.getTxDate()

    非日期任务参数:JobInfoBean.getFlowLastTime();  JobInfoBean.getFlowCurrTime();

客户端脚本执行

  自动追加参数:script 执行参数  配置参数(日切:txDate【yyyyMMdd】 / 非日切:flowLastTime【时间戳Long】 flowCurTime【时间戳Long】)

    例如:日切任务--< sh /home/job/execdaily.sh 执行参数  20150101

      非日切任务-->< sh /home/job/execundaily.sh 执行参数  1490926800000 1490926800000

4.2 其他待补充

时间: 2024-08-10 01:55:19

开源分布式任务调度平台Cuckoo-Schedule的相关文章

宜信开源|分布式任务调度平台SIA-TASK的架构设计与运行流程

一.分布式任务调度的背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务.我们常常需要一些任务调度系统来帮助解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构.在此背景下,很多原先的任务调度平台已经不能满足业务系统的需求,于是出现了一些基于分布式的任务调度平台. 1.1 分布式任务调度的演进 在实际业务开发过程中,很多时候我们无可避免地需要使用一些定时任务来解决问题.通常我们会有多种解决方案:使用 Crontab 或 SpringCron (当然这种情况可能机器

分布式任务调度平台xxl-job的使用(java)

xxl-job是一个开源的任务调度平台(github地址https://github.com/xuxueli/xxl-job),且在分布式场景下有很好的支持性,可以对单个的任务单次执行,或者定时执行.在分布式场景下,可以选择不同的路由策略进行执行job,如指定第一个或最后一个执行器执行,轮询执行等等,十分的灵活,下面介绍下在java环境下如何对接xxl-job的平台. 一.调度中心的配置部署 xxl-job作为开源的项目,他支持多种语言的任务,但是其调度平台是由java语言编写,基于集群Quar

分布式任务调度平台SIA-TASK的架构设计与运行流程

一.分布式任务调度的背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务.我们常常需要一些任务调度系统来帮助解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构.在此背景下,很多原先的任务调度平台已经不能满足业务系统的需求,于是出现了一些基于分布式的任务调度平台. 1.1 分布式任务调度的演进 在实际业务开发过程中,很多时候我们无可避免地需要使用一些定时任务来解决问题.通常我们会有多种解决方案:使用 Crontab 或 SpringCron (当然这种情况可能机器

分布式任务调度平台XXL-JOB

为获得更好的阅读体验,请访问原文:传送门 一.分布式任务调度概述 什么是任务调度平台 任务调度是指基于给定的时间点,给定的时间间隔又或者给定执行次数自动的执行任务.我们可以思考一下在以下场景中,我们应该怎么实现: 支付系统每天凌晨 1 点,进行一天清算,每月 1 号进行上个月清算: 电商整点抢购,商品价格8点整开始优惠 12306 购票系统,超过 30 分钟没有成功支付订单的,进行回收处理 为什么需要任务调度平台 定时任务是程序员不可避免的话题,很多业务场景需要我们某一特定的时刻去做某件任务.一

分布式任务调度平台XXL-JOB搭建

分布式任务调度平台XXL-JOB,作者许雪里1.源码下载地址①.GitHub:https://github.com/xuxueli/xxl-job②.码云:https://gitee.com/xuxueli0323/xxl-job 2.文档地址①.中文文档:http://www.xuxueli.com/xxl-job/#/②.英文文档:http://www.xuxueli.com/xxl-job/en/#/ 3.源码结构通过上面给出的源码下载地址,我们将源码clone到IDEA中,如下:tabl

分布式任务调度平台XXL-JOB本地配置可能遇到的问题和解决方案

一. 基本概念 XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源代码并接入多家公司线上产品线,开箱即用. 二. 本地实例配置问题 这个地方就不做过多赘述了,官方文档上以及说的很详细.网上的博客也有很多.接下来主要讲一下作者在本地配置运行过程中遇到的各种问题. 这里作者使用的环境 1. JDK 1.8 2. Maven 4.0 3. Mysql 8.0 4. 操作系统 Mac os (这里是关键,这也是下边各种问题的关键) 三. 配置运行

开源分布式搜索平台ELK+Redis+Syslog-ng实现日志实时搜索

logstash + elasticsearch + Kibana+Redis+Syslog-ng ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进行数据索引. logstash是一个应用程序日志.事件的传输.处理.管理和搜索的平台.你可以用它来统一对应用程序日志进行收集管理,提供 Web 接口用于查询和统计.其实logstash是可以被别的替换,比如常见

CentOS7搭建开源分布式搜索平台ELK实现日志实时搜索并展示图表

    一.简介  Elasticsearch是个基于Lucene实现的开源.分布式.restful的全文本搜索引擎,此外他还是一个分布式实时文档存储,其中每个文档的每个filed均是可被索引的数据,且可被搜索,也是一个带实时分析功能的搜索引擎,能够扩展至数以百计的节点实时处理PB级别的数据.它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等.日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬

分布式云平台基础服务

Net 分布式云平台基础服务建设说明概要 1)  背景 建设云平台的基础框架,用于支持各类云服务的业务的构建及发展. 2)  基础服务 根据目前对业务的理解和发展方向,总结抽象出以下几个基础服务,如图所示 3)  概要说明 基础服务的发展会根据业务的发展,调整和完善,也会不断的改进,演变及完善:当然根据目前公司的现状和对基础服务的迫切程度,基础服务各模块的定位和发展预期将如下所述. 1)     数据库中间件 公司现状: 1)     对多种类型数据库的支持需求迫切,如同时支持mysql,orc