clover分布式任务调度系统

1、clover分布式调度介绍

clover分布式任务调度是完全使用Java技术自主开发

特点如下:

1、防单点故障

2、job可部署多台,但任务调度时,只有一台参执行。如果一台下线,

clover选择其他已在zookeeper注册job来执行。

3、可管理监控程序 ,相关负责人的job不可用会发送邮件通知

4、提供管理后台,可手动停止任务,设置任务执行频率、恢复策

略。人工干预指定哪些job来工作,可查看任务执行进度、任务执行失败时会收到报警并记录日志。

5、执行中的任务,但未执行完成,不会再次调度任务

6、支持灾难重现,server端不可用,但client端注册job信息会存储到临时DB中,当server重启后立即去读临时DB并执行相应job

7、job支持LOCAL、REMOTE模式以及ADD、UPDATE、DELETE操作

8、支持动态创建job、spring配置文件和注解方式注册job

9、可以查询所有运行报错日志查询

10、管理后台可以创建、修改、删除job

2、 总体框架分析





3、 总体框架分析-系统流程图


               


4、 技术-项目结构





5、 涉及技术


MongoDB集群:负责存储clover所有数据信息,当初想考虑使用LevelDB,但不方便管理,Redis完全放弃了,理由是对于频繁写操作性能下降、总有连接超时

ZK集群:负责server和client启动注册信息,所有server、client信息都是有读写操作权限,目的防止被他人或程序修改

ZeroMQ:负责server和client消息通信&后台管理页面创建、修改、删除job通信

使用ZeroMQ的理由:就是快,就是那么任性,流式技术框架storm使用,未来会考虑使用Spark的akka消息通信框架

Monitor:负责死亡心跳检测,监控server、client端,使用Java Timer实现

后台管理页面:bootstrap +jsp+highcharts

Spring:重新定义spring的xsd标签以及Annotation注解方式,注册job

Snappy:通信消息压缩方式,减少网络数据传输带宽

Curator:监听ZK数据包变更,并保持到内存中,方便程序快速获取server和client端信息

Quartz:基于quartz重写底层定时任务调度,考虑处理各种任务执行规则问题,而选择quartz来调度任务

6、clover使用



6.3、 项目中定义ClientJobClass



6.4、 spring项目使用-启动clover-client




6.5、 spring项目使用-启动job



6.6、 spring项目使用-启动clover-client


6.7、spring项目使用-启动clover-client




7、后台管理页面


7.1、主页面



7.2、zk管理页面



7.3、job管理页面



7.4、联系人管理页面



7.5、日志管理页面


8、性能分析


8.1、clover server压力

Server端只负责任务定时执行和分发到指定client端,由于使用了quartz,server端在定时轮训执行任务以及解析定时任务时间方面,对性能压力减少了很多

Server端分发消息,使用zeromq非阻塞方式发送消息给指定client端,目前部署两台服务器完全胜任所有性能压力

Server端支持集群部署,每次client发送消息随机Hash到某一台server服务器

当所有的server都不可用,为了不影响client的使用,将会把clientjob信息存储到临时DB中,此刻还会发送邮件报警给相关server负责人,server立即重启后,会把所有临时DB中数据读取并执行,此刻client可以继续收到消息并执行业务逻辑

Server端监听所有client端ZK消息后放入内存中,当client端zk数据信息发送变化后,才修改内存数据,这样可以提供server端获取client端zk信息速度,也减轻了zk不断被访问的压力

8.2zk压力


俺真心没啥压力,俺是一个大集群,你们这些大爷和土豪就每次启动容器时候将初始化信息放到我这边,而当你们数据信息发生变化(修改节点数据、节点数据不可用),监听者才会访问俺,其实想想你们没事 肯定不会经常变更数据滴,(*^__^*),不过 当你们挂了 或者关闭应用程序时候,我会把你们全部删除滴,这就会浪费伦家点时间和力气吧

8.3MongoDB




8.4zeromq




8.5zeromq push/pull模式


时间: 2024-08-03 17:46:35

clover分布式任务调度系统的相关文章

新一代分布式任务调度框架:当当elastic-job开源项目的10项特性

作者简介: 张亮,当当网架构师.当当技术委员会成员.消息中间件组负责人.对架构设计.分布式.优雅代码等领域兴趣浓厚.目前主导当当应用框架ddframe研发,并负责推广及撰写技术白皮书. 一.为什么需要作业(定时任务)? 作业即定时任务.一般来说,系统可使用消息传递代替部分使用作业的场景.两者确有相似之处.可互相替换的场景,如队列表.将待处理的数据放入队列表,然后使用频率极短的定时任务拉取队列表的数据并处理.这种情况使用消息中间件的推送模式可更好的处理实时性数据.而且基于数据库的消息存储吞吐量远远

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

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

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

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

分布式任务调度的解决方案

简介 随着系统规模的发展,定时任务数量日益增多,任务也变得越来越复杂,尤其是在分布式环境下,存在多个业务系统,每个业务系统都有定时任务的需求,如果都在自身系统中调度,一方面增加业务系统的复杂度,另一方面也不方便管理,因此需要有一个任务平台对分散的任务进行统一管理调度,基于目前的情况,任务平台需要支持以下几个方面: 1.任务统一管理,提供图形化界面对任务进行配置和调度. 2.任务并发控制,同一个任务在同一时间只能允许一个执行. 3.任务弹性扩容,可根据繁忙情况动态增减服务器分摊压力,对大任务进行分

如何构建延迟任务调度系统

一.需求目标 1.需求描述之前笔者接触过一些营销业务场景,比如说: 用户注册未登录过APP第二天早上10点发一条营销短信促活红包过期前两天短信通知,下午16:00发送等等定时任务处理业务.采用的技术方案是定时任务扫数据汇总表,分页读取一定数量然后处理然而随着业务的发展,业务多元化,遇到了以下场景: 拼团砍价活动过期前半小时提醒订单提交半小时内没有完成支付,订单自动取消,库存退还用户几天内没有操作过系统,发放激活短信以上场景处理时间不是固定的某个点,而是业务发生的时间推迟一段时间,针对以上的业务场

分布式工作流任务调度系统Easy Scheduler正式开源

分布式工作流任务调度系统Easy Scheduler正式开源 1.背景 在多位技术小伙伴的努力下,经过近2年的研发迭代.内部业务剥离及重构,也经历一批种子用户试用一段时间后,EasyScheduler终于迎来了第一个正式开源发布版本 -- 1.0.0.相信做过数据处理的伙伴们对开源的调度系统如oozie.azkaban.airflow应该都不陌生,在使用这些调度系统中可能会有这样的体验:比如配置工作流任务不能可视化.任务的运行状态不能实时在线查看.任务运行时不能暂停.不能支持参数传递.不能补数.

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

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

轻松构建微服务之分布式任务调度

微信公众号:内核小王子 关注可了解更多关于数据库,JVM内核相关的知识; 如果你有任何疑问也可以加我pigpdong[^1] 前言 ???? 我们在应用开发的时候,应该都碰到过这种需求:每天固定时间点跑一个任务:创建一些临时的任务去初始化数据或者做数据迁移:固定一个时间周期去轮询是否有新的状态发生:在java中有两个类可以帮我们处理这种需求,一个是java.util.TimerTask,一个是 java.util.concurrent.ScheduledExecutorService , 但是随

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

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