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

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

1         概述

1.1      平台概述

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

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

 

 

1.2      功能介绍

l  调度集群

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

l  任务依赖

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

l  任务分类

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

例如:

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

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

   

 

       核心调度模块基于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 其他待补充

http://www.cnblogs.com/loveyou/p/cuckoo.html

 

相关文章
|
5月前
|
存储 监控 固态存储
【vSAN分布式存储服务器数据恢复】VMware vSphere vSAN 分布式存储虚拟化平台VMDK文件1KB问题数据恢复案例
在一例vSAN分布式存储故障中,因替换故障闪存盘后磁盘组失效,一台采用RAID0策略且未使用置备的虚拟机VMDK文件受损,仅余1KB大小。经分析发现,该VMDK文件与内部虚拟对象关联失效导致。恢复方案包括定位虚拟对象及组件的具体物理位置,解析分配空间,并手动重组RAID0结构以恢复数据。此案例强调了深入理解vSAN分布式存储机制的重要性,以及定制化数据恢复方案的有效性。
117 5
|
6月前
|
机器学习/深度学习 人工智能 Shell
人工智能平台PAI操作报错合集之在分布式训练过程中遇到报错,是什么原因
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
2月前
|
消息中间件 监控 数据可视化
Apache Airflow 开源最顶级的分布式工作流平台
Apache Airflow 是一个用于创作、调度和监控工作流的平台,通过将工作流定义为代码,实现更好的可维护性和协作性。Airflow 使用有向无环图(DAG)定义任务,支持动态生成、扩展和优雅的管道设计。其丰富的命令行工具和用户界面使得任务管理和监控更加便捷。适用于静态和缓慢变化的工作流,常用于数据处理。
Apache Airflow 开源最顶级的分布式工作流平台
|
5月前
|
消息中间件 Java Kafka
"Kafka快速上手:从环境搭建到Java Producer与Consumer实战,轻松掌握分布式流处理平台"
【8月更文挑战第10天】Apache Kafka作为分布式流处理平台的领头羊,凭借其高吞吐量、可扩展性和容错性,在大数据处理、实时日志收集及消息队列领域表现卓越。初学者需掌握Kafka基本概念与操作。Kafka的核心组件包括Producer(生产者)、Broker(服务器)和Consumer(消费者)。Producer发送消息到Topic,Broker负责存储与转发,Consumer则读取这些消息。首先确保已安装Java和Kafka,并启动服务。接着可通过命令行创建Topic,并使用提供的Java API实现Producer发送消息和Consumer读取消息的功能。
97 8
|
6月前
|
存储 关系型数据库 MySQL
深度评测:PolarDB-X 开源分布式数据库的优势与实践
本文对阿里云开源分布式数据库 PolarDB-X 进行了详细评测。PolarDB-X 以其高性能、强可用性和出色的扩展能力在云原生数据库市场中脱颖而出。文章首先介绍了 PolarDB-X 的核心产品优势,包括金融级高可靠性、海量数据处理能力和高效的混合负载处理能力。随后,分析了其分布式架构设计,包括计算节点、存储节点、元数据服务和日志节点的功能分工。评测还涵盖了在 Windows 平台通过 WSL 环境部署 PolarDB-X 的过程,强调了环境准备和工具安装的关键步骤。使用体验方面,PolarDB-X 在处理分布式事务和实时分析时表现稳定,但在网络问题和性能瓶颈上仍需优化。最后,提出了改进建
7092 2
|
6月前
|
存储 缓存 分布式计算
高并发架构设计三大利器:缓存、限流和降级问题之缓存的应对策略问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之缓存的应对策略问题如何解决
|
3月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
1月前
|
存储 NoSQL Java
使用lock4j-redis-template-spring-boot-starter实现redis分布式锁
通过使用 `lock4j-redis-template-spring-boot-starter`,我们可以轻松实现 Redis 分布式锁,从而解决分布式系统中多个实例并发访问共享资源的问题。合理配置和使用分布式锁,可以有效提高系统的稳定性和数据的一致性。希望本文对你在实际项目中使用 Redis 分布式锁有所帮助。
110 5
|
2月前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
73 8