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 其他待补充

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

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

    一.分布式任务调度的背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务.我们常常需要一些任务调度系统来帮助解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构.在此背 ...

  2. 转载《分布式任务调度平台XXL-JOB》

    <分布式任务调度平台XXL-JOB>       博文转自 https://www.cnblogs.com/xuxueli/p/5021979.html 一.简介 1.1 概述 XXL-J ...

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

    <分布式任务调度平台XXL-JOB>       一.简介 1.1 概述 XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源代码并 ...

  4. 一文读懂分布式任务调度平台XXL-JOB

    本文主要介绍分布式任务调度平台XXL-JOB(v2.1.0版本),包括功能特性.实现原理.优缺点.同类框架比较等 基本介绍 项目开发中,常常以下场景需要分布式任务调度: 同一服务多个实例的任务存在互斥 ...

  5. Java 分布式任务调度平台:PowerJob 快速开始+配置详解

    本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri 引言 HelloGitHub 推出的<讲解开源项目>系列. 项目地址: https://github.c ...

  6. SpringCloud微服务实战——搭建企业级开发框架(四十二):集成分布式任务调度平台XXL-JOB,实现定时任务功能

      定时任务几乎是每个业务系统必不可少的功能,计算到期时间.过期时间等,定时触发某项任务操作.在使用单体应用时,基本使用Spring提供的注解即可实现定时任务,而在使用微服务集群时,这种方式就要考虑添 ...

  7. 大众点评开源分布式监控平台 CAT 深度剖析

    一.CAT介绍 CAT系统原型和理念来源于eBay的CAL的系统,CAT系统第一代设计者吴其敏在eBay工作长达十几年,对CAL系统有深刻的理解.CAT不仅增强了CAL系统核心模型,还添加了更丰富的报 ...

  8. 分布式任务调度平台XXL-JOB搭建教程

    关于分布式任务调度平台XXL-JOB,其实作者 许雪里 在其发布的中文教程中已经介绍的很清楚了,这里我就不做过多的介绍了,关于其搭建教程,本人依照其文档搭建起来基本上也没遇到啥问题,这里通过博客的形式 ...

  9. XXL-JOB分布式任务调度平台安装与部署

    配XXL-JOB分布式任务调度平台安装与部署

随机推荐

  1. geoR文档翻译

    说来惭愧,很久没有更新自己的博客了.期间个人生活经历了很多变故,心理上的打击尤甚.加之没有取得好的科研成果,痛定思痛,还是下苦功夫多多学习. 最近对比验证各种方法的插值精度,用到了R语言地统计学包,由 ...

  2. Repaints and Reflows 重绘和重排版

    当浏览器下载完所有页面HTML标记,JavaScript,CSS,图片之后,它解析文件并创建两个内部数据 一棵DOM树 表示页面结构 Normal 0 7.8 磅 0 2 false false fa ...

  3. MVC插件实现

    本人第一篇随笔,在园子里逛了这么久,今天也记录一篇自己的劳动成果,也是给自己以后留个记录. 最近领导让我搞一下插件化,就是实现多个web工程通过配置文件进行组装.之前由于做过一个简单的算是有点经验,当 ...

  4. Shell常见用法小记

    shell的简单使用 最近发现shell脚本在平常工作中简直算一把瑞士军刀,很多场景下用shell脚本能实现常用的简单需求,而之前都没怎么学习过shell,就趁机把shell相关的语法和常见用法总结了 ...

  5. 【Egret】使用Egret开发的HTML5项目,使用本地电脑作为服务器进行移动端调试流程

    流程: 1.先开启本机IIS服务器 具体开启流程如下:http://www.jb51.net/article/29787.htm 2.添加服务器MIME类型, 按照以下两个教程把所有的MIME类型都添 ...

  6. 【Egret】2D 使用中的一些疑难解决技巧!

    1.问题:声音在ios上无法播放    解决方法:①首先需要预加载一个声音                        ②然后目前只有点击之后才能播放声音,不能默认播放 2.问题:滚动条问题   解 ...

  7. 手机自动化测试:appium源码分析之bootstrap十三

    手机自动化测试:appium源码分析之bootstrap十三   poptest(www.poptest.cn)是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开 ...

  8. 七个 Android 程序猿提高效率必备工具

    Android 程序猿提高效率必备工具 0x00 Code tree for GitHub 这个 Chrome 浏览器插件.Github 作为最大同性交友网站,每天的工作几乎是从打开这个网站开始的.当 ...

  9. rxjava2学习笔记(1)

    1.什么是RxJava? 简单,清晰的多线程编程框架.可方便的写出维护性高,逻辑清晰的Java程序. 2.什么是观察者模式? 入门教程讲这种高大上抽象概念都是耍流氓! 3.开始 3.1github地址 ...

  10. Node.js 安装配置介绍

    Node.js 安装配置 本章节我们将向大家介绍在window和Linux上安装Node.js的方法. 本安装教程以Node.js v6.10.1 LTS(长期支持版本)版本为例. Node.js安装 ...