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

摘要:
l任务依赖Cuckoo-Schedule支持任务的依赖于触发,从而使得任务执行有先后顺序。Cuckoo-Schedule可以针对任务层级设置任务执行参数,作为参数传递给客户端并进行任务分片执行。l任务执行查看Cuckoo-Schedule支持任务执行日志情况查看,也支持任务执行依赖关系执行情况查看,便于任务执行异常情况下排查问题原因。

1 概述

1.1 平台概述

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

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

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

1.2 功能介绍

l 调度集群

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

l 任务依赖

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

l 任务分类

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

例如:

有任务A/B/C任务开源分布式任务调度平台Cuckoo-Schedule第2张,如果依赖组是日切任务,那么这三个任务有相同的业务执行日期。如果依赖组是数据流任务,那么这三个任务有相同的开始时间戳和结束时间戳。

l 任务分片

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

l 任务执行查看

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

l 任务重跑

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

l 任务暂停

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

l 任务告警

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

l 任务配置

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

l 客户端分类

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

l 客户端切面

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

l 客户端脚本任务

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 核心调度模块

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

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

3.2 注册模块

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

3.3 通信模块

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

3.4 权限管理

权限管理分为三部分,

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

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

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

3.5 客户端执行模块

开源分布式任务调度平台Cuckoo-Schedule第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 其他待补充

免责声明:文章转载自《开源分布式任务调度平台Cuckoo-Schedule》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇POM 总是提示找不到依赖UCOSII使用之消息队列下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

分布式 OAuth2.0认证授权(黑马讲义) aBiu

1.分布式系统认证方案 1.1什么是分布式系统 随着软件环境和需求的变化 ,软件的架构由单体结构演变为分布式架构,具有分布式架构的系统叫分布式系统,分布式系统的运行通常依赖网络,它将单体结构的系统分为若干服务,服务之间通过网络交互来完成用户的业务处理,当前流行的微服务架构就是分布式系统架构,如下图: 分布式系统具体如下基本特点: 分布性:每个部分都可以独立...

分布式日志系统

FROM:http://go-on.iteye.com/blog/1789466 背景 Google、Facebook、Amazon等互联网巨头对于数据的创造性使用,创造出了很多辉煌的商业产品。如Amazon创造出的新的推荐模式:”查询此商品的顾客也查询了。。。。。”、“看过此商品的后的顾客买的其他商品有。。。。。。”、“购买了您最近浏览过的商品的顾客同时...

保姆级教程!手把手教你使用Longhorn管理云原生分布式SQL数据库!

作者简介 Jimmy Guerrero,在开发者关系团队和开源社区拥有20多年的经验。他目前领导YugabyteDB的社区和市场团队。 本文来自Rancher Labs Longhorn是Kubernetes的云原生分布式块存储,易于部署和升级,100%开源且持久,由业界采用最为广泛的Kubernetes管理平台创建者Rancher Labs推出,并于...

分布式系统详解(二)--基础知识(概论)

  一、 引言         由于网上介绍的分布式的系统讲解并没有多少,所以在这儿就希望可以写一套系统的分布式的详解,未来也结合springboot的搭建分布式系统进行详细构建。也愿意坚持写下去,写给自己也分享给大家,希望大家可以提出宝贵的意见,一同长进。哈哈。。第一篇文章,开个头。 二、分布式定义。   了解起来分布式呢,顺便也介绍一下集群,这两个概念...

.NetCore之基础

.NetCore几大特点     这篇文章主要从.NetCore全面开源、依赖注入、包引入、跨平台、应用服务器的特点来入手。大约需要10分钟的阅读时间。   与.Net的区别     在.Net与.NetCore在代码编写上并无太大的区别,都使用C#作为编程语言。主要体现在.NetCore更加拥抱开源、与世界共同发展。   开源的重要性     一般...

分布式存储ShardingSphere 分布式治理 (based on zookeeper)

分布式存储-ShardingSphere 分布式治理 (based on zookeeper) 其实前面几篇,关于shardingSphere的我知道的功能点已经聊得差不多了,但是现在多节点集群部署的方式已经成为了一种趋势,而如果每个节点中的配置文件都需要手动一个个修改的话,那将为运维工作带来了很大的不愉快,所有ShardingShere内部整合了Zk,...