如果一台服务器不能满足大批量的任务;如果不想一台服务器挂掉造成整个任务执行瘫痪;或者只是想体验一下分布式任务调度。tbschedule来了。
一、tbschedule是什么?
tbschedule是一种能够让一种批量任务或者不断变化的任务,能够被动态的分配到多个主机的JVM中,不同的线程组中并行执行,所有的任务能够被不重复,不遗漏的快速处理的框架。
二、tbschedule用了什么技术?
使用zookeeper进行任务分配和同步。也就是说,基本的任务信息和调度信息都在zookeeper中存着。(下面有图解)
三、tbschedule两个核心bean类
1、ScheduleStrategy调度策略类
column | type | comment |
strategyName | String | 调度策略的名 |
IPList | String[] | 能够分配这个调度策略的服务器ip。127.0.0.1表示所有服务都可参与调度策略的分配。 |
numOfSingleServer | int | 一个服务器分配ScheduleServer的个数。 (别急,下面会介绍ScheduleServer) |
taskName | String | 任务名称。和ScheduleTaskType对应。 |
2、ScheduleTaskType基本任务类
column | type | comment |
baseTaskType | String | 任务名 |
sleepTimeNoData | long | 取不到任务时,休眠时间 |
sleepTimeInterval | long | 每次去任务的间隔时间 |
fetchDataNumber | int | 每次获取数据的数量 |
executeNumber | int | 在批处理的时候,每次处理的数据量 |
threadNumber | int | 开启处理任务的线程数量 |
processorType | String | 调度器类型。有"sleep"和"noSleep" |
dealBeanName | String | 处理任务的BeanName |
permitRunStartTime | String | 允许执行的开始时间 |
permitRunEndTime | String | 允许执行的结束时间 |
taskItems | String[] | 任务项数组 |
四、主要工作流程
1.定时更新调度策略在多台服务器的分配
启动定时器,定时更新调度策略在多台服务器的分配。下面给一个实例帮助大家理解。
图1是一个项目检测列调度策略类在的信息。如图显示可以看出这个项目有两台服务器104.122和106.111;调度策略的strategyName是EAGEYE-EVENT-MONITOR-Strategy,能够分配这个调度策略的服务器ip设置成了["127.0.0.1"],表示所有连上来的服务器都可以分配这个调度策略,就像红色框中看到的。如果某个时刻又连上来一台服务器106.112,定时更新调度策略的线程会将这台服务器信息添加到这个调度策略下面。
图1
2.定时更新基本任务的任务项在多个ScheduleServer中的分配
启动定时器,定时更新基本任务的任务项在多个ScheduleServer中的分配。
首先明确一个概念:ScheduleServer是分配任务项的基本单位。一台服务器可以启动多个SchedulerServer,但是一般情况一台服务器启动一个ScheduleServer,具体由调度策略类的numOfSingleServer参数控制。下面接着看图2,注释都写图上了,就不再啰嗦了。
图2
3.每台服务器任务线程组按着基本任务类中的设置,循环从zookeeper中得到属于自己的任务项,然后根据任务项从数据库或者缓存(就是从任务存储的地方)取任务,并执行。
至此整个分配任务和执行任务的流程都讲完了。
五、官方文档和demo
大家可以从官方文档了解更细节的东西,可以下源码项目下下来,里面有入门demo。http://code.taobao.org/p/tbschedule/wiki/index/