`

clover分布式任务调度系统

阅读更多

1、clover分布式调度介绍

 

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

特点如下:

1、防单点故障

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

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

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

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

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

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

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

7job支持LOCALREMOTE模式以及ADDUPDATEDELETE操作

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

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

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

 

 

2、 总体框架分析

 



 

 

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

 

               

 

4、 技术-项目结构

 


 

 

 

5、 涉及技术

 

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

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

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

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

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

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

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

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

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

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端,由于使用了quartzserver端在定时轮训执行任务以及解析定时任务时间方面,对性能压力减少了很多

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

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

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

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

 

 

8.2zk压力

 

 

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

 

 

8.3MongoDB

 


 

8.4zeromq

 


 

 

8.5zeromq push/pull模式

 

2
2
分享到:
评论
9 楼 lee3836 2015-11-18  
求源码,大牛
8 楼 luxianping 2015-08-03  
      大神   git上找不到了  求共享
7 楼 Stark_Summer 2015-02-05  
Stark_Summer 写道
james_lover 写道
开源了吗?最近更好再找分布式调度系统,
kettle的任务调度实在是太差了。
我在考虑给kettle加个分布式调度系统。用zookeeper来管理任务及任务依赖。
用fabric在浏览器上画任务流,提供任务调度管理,就像用kettle客户端一样,能支持任务单个执行,任务跳过。任务重试。任务暂停。

您好,目前我开发这个版本是为公司做的,后续我会做个分支专门开源的,使用技术,必须开源代码,请放心。

看这个你的这个架构 应该挺复杂的,我这边现在支持动态创建定时任务,使用spring注解方式创建定时任务,还有通过控制来删除或者停止任务
6 楼 Stark_Summer 2015-02-05  
lianglaiyang 写道
能不能把源码发出来?
我在考虑给kettle加个分布式调度系统。用zookeeper来管理任务及任务依赖。
用fabric在浏览器上画任务流,提供任务调度管理,就像用kettle客户端一样,能支持任务单个执行,任务跳过。任务重试。任务暂停。

您好,目前我开发这个版本是为公司做的,后续我会做个分支专门开源的,使用技术,必须开源代码,请放心。
5 楼 Stark_Summer 2015-02-05  
james_lover 写道
开源了吗?最近更好再找分布式调度系统,
kettle的任务调度实在是太差了。
我在考虑给kettle加个分布式调度系统。用zookeeper来管理任务及任务依赖。
用fabric在浏览器上画任务流,提供任务调度管理,就像用kettle客户端一样,能支持任务单个执行,任务跳过。任务重试。任务暂停。

您好,目前我开发这个版本是为公司做的,后续我会做个分支专门开源的,使用技术,必须开源代码,请放心。
4 楼 lianglaiyang 2015-02-05  
能不能把源码发出来?
3 楼 james_lover 2015-02-04  
开源了吗?最近更好再找分布式调度系统,
kettle的任务调度实在是太差了。
我在考虑给kettle加个分布式调度系统。用zookeeper来管理任务及任务依赖。
用fabric在浏览器上画任务流,提供任务调度管理,就像用kettle客户端一样,能支持任务单个执行,任务跳过。任务重试。任务暂停。
2 楼 Stark_Summer 2015-02-04  
semmy 写道
看起来挺酷的

还是以实用为主吧,最近还在苦逼优化和改造呢
1 楼 semmy 2015-02-04  
看起来挺酷的

相关推荐

Global site tag (gtag.js) - Google Analytics