`

tbschedule

 
阅读更多
Console Demo地址:  www.tbschedule.com

Console下载: trunk/console/ScheduleConsole.war

技术支持: 忌少 jishao@taobao.com

推荐项目: QLExpress 简介高效的脚本引擎

pom引用:
<groupId>com.taobao.pamirs.schedule</groupId>
<artifactId>tbschedule</artifactId>
<version>3.2.6</version>

3.0-QuickStart
使用的问题解答
重要更新
tbschedule
此文档内部包括:
1、设计目标说明
2、主要概念解释
3、涉及的数据对象说明
4、涉及的业务接口说明
5、Sleep模式和NotSleep模式的区别
6、使用过程中的注意事项
1、调度器的设计目标
1、tbschedule的目的是让一种批量任务或者不断变化的任务,能够被动态的分配到多个主机的JVM中,不同的线程组中并行执行。所有的任务能够被不重复,不遗漏的快速处理。
2、调度的Manager可以动态的随意增加和停止
3、可以通过JMX控制调度服务的创建和停止
4、可以指定调度的时间区间:
PERMIT_RUN_START_TIME :允许执行时段的开始时间crontab的时间格式.以startrun:开始,则表示开机立即启动调度
PERMIT_RUN_END_TIME :允许执行时段的结束时间crontab的时间格式,如果不设置,表示取不到数据就停止
PERMIT_RUN_START_TIME ='0 * * * * ?' 表示在每分钟的0秒开始
PERMIT_RUN_START_TIME ='20 * * * * ?' 表示在每分钟的20秒终止
就是每分钟的0-20秒执行,其它时间休眠
格式信息请参照: http://dogstar.javaeye.com/blog/116130
2、主要概念
TaskType任务类型:
是任务调度分配处理的单位,例如:
1、将一张表中的所有状态为STS=’N’的所有数据提取出来发送给其它系统,同时将修改状态STS=’Y’,就是一种任务。TaskType=’DataDeal’
2、将一个目录以所有子目录下的所有文件读取出来入库,同时把文件移到对应的备份目录中,也是一种任务。TaskType=’FileDeal’。
3、可以为一个任务类型自定义一个字符串参数由应用自己解析。例如:"AREA=杭州,YEAR>30"
ScheduleServer任务处理器
1、是由一组线程【1..n个线程】构成的任务处理单元,每一任务处理器有一个唯一的全局标识,
   一般以IP$UUID[例如192.168.1.100$0C78F0C0FA084E54B6665F4D00FA73DC]的形式出现。 一个任务类型的数据可以由1..n个任务处理器同时进行。
2、这些任务处理器可以在同一个JVM中,也可以分布在不同主机的JVM中。任务处理器内部有一个心跳线程,用于确定Server的状态和任务的动态分配,
   有一组工作线程,负责处理查询任务和具体的任务处理工作。
3、目前版本所有的心跳信息都是存放在Zookeeper服务器中的,所有的Server都是对等的,当一个Server死亡后,其它Server会接管起拥有的任务队列,
   期间会有几个心跳周期的时延。后续可以用类似ConfigerServer类的存储。
4、现有的工作线程模式分为Sleep模式和NotSleep模式。缺省是缺省是NOTSLEEP模式。在通常模式下,在通常情况下用Sleep模式。
   在一些特殊情况需要用NotSleep模式。两者之间的差异在后续进行描述。
TaskItem任务项
是对任务进行的分片划分。例如:
    1、将一个数据表中所有数据的ID按10取模,就将数据划分成了0、1、2、3、4、5、6、7、8、9供10个任务项。
    2、将一个目录下的所有文件按文件名称的首字母(不区分大小写),
       就划分成了A、B、C、D、E、F、G、H、I、J、K、L、M、N、O、P、Q、R、S、T、U、V、W、X、Y、Z供26个队列。
    3、将一个数据表的数据ID哈希后按1000取模作为最后的HASHCODE,我们就可以将数据按[0,100)、[100,200) 、[200,300)、[300,400) 、
       [400,500)、[500,600)、[600,700)、[700,800)、[800,900)、 [900,1000)划分为十个任务项,当然你也可以划分为100个任务项,最多是1000个任务项。
任务项是进行任务分配的最小单位。一个任务项只能由一个ScheduleServer来进行处理。但一个Server可以处理任意数量的任务项。
例如任务被划分为了10个队列,可以只启动一个Server,所有的任务项都有这一个Server来处理;也可以启动两个Server,每个Sever处理5个任务项;
但最多只能启动10个Server,每一个ScheduleServer只处理一个任务项。如果在多,则第11个及之后的Server将不起作用,处于休眠状态。
4、可以为一个任务项自定义一个字符串参数由应用自己解析。例如:"TYPE=A,KIND=1"

TaskDealBean任务处理类
是业务系统进行数据处理的实现类。要求实现Schedule的接口IScheduleTaskDealMulti或者IScheduleTaskDealSingle。
接口主要包括两个方法。一个是根据调度器分配到的队列查询数据的接口,一个是进行数据处理的接口。
运行时间
1、可以指定任务处理的时间间隔,例如每天的1:00-3:00执行,或者每个月的第一天执行、每一个小时的第一分钟执行等等。
    间格式与crontab相同。如果不指定就表示一致运行。PERMIT_RUN_START_TIME,PERMIT_RUN_END_TIME
2、可以指定如果没有数据了,休眠的时间间隔。SLEEP_TIME_NODATA 单位秒
3、可以指定每处理完一批数据后休眠的时间间隔.SLEEP_TIME_INTERVAL 单位                                
OwnSign环境区域
是对运行环境的划分,进行调度任务和数据隔离。例如:开发环境、测试环境、预发环境、生产环境。
不同的开发人员需要进行数据隔离也可以用OwnSign来实现,避免不同人员的数据冲突。缺省配置的环境区域OwnSign='BASE'。
例如:TaskType='DataDeal',配置的队列是0、1、2、3、4、5、6、7、8、9。缺省的OwnSign='BASE'。
此时如果再启动一个测试环境,则Schedule会动态生成一个TaskType='DataDeal-Test'的任务类型,环境会作为一个变量传递给业务接口,
由业务接口的实现类,在读取数据和处理数据的时候进行确定。业务系统一种典型的做法就是在数据表中增加一个OWN_SIGN字段。
在创建数据的时候根据运行环境填入对应的环境名称,在Schedule中就可以环境的区分了。
调度策略
是指某一个任务在调度集群上的分布策略,可以制定:
1、可以指定任务的机器IP列表。127.0.0.1和localhost表示所有机器上都可以执行
2、可以指定每个机器上能启动的线程组数量,0表示没有限制
3、可以指定所有机器上运行的线程组总数。

3、业务接口说明
包含三个业务接口,:
1、IScheduleTaskDeal 调度器对外的基础接口,是一个基类,并不能被直接使用
2、IScheduleTaskDealSingle 单任务处理的接口,继承 IScheduleTaskDeal
3、IScheduleTaskDealMulti 可批处理的任务接口,继承 IScheduleTaskDeal
IScheduleTaskDeal 调度器对外的基础接口
public interface IScheduleTaskDeal<T> {
/**
* 根据条件,查询当前调度服务器可处理的任务
* @param taskParameter 任务的自定义参数
* @param ownSign 当前环境名称
* @param taskQueueNum 当前任务类型的任务队列数量
* @param taskQueueList 当前调度服务器,分配到的可处理队列
* @param eachFetchDataNum 每次获取数据的数量
* @return
* @throws Exception
*/
public List<T> selectTasks(String taskParameter,String ownSign,int taskQueueNum,List<TaskItemDefine> taskItemList,int eachFetchDataNum) throws Exception;

/**
* 获取任务的比较器,只有在NotSleep模式下需要用到
* @return
*/
public Comparator<T> getComparator();
}                                   
IScheduleTaskDealSingle 单任务处理的接口
public interface IScheduleTaskDealSingle<T> extends IScheduleTaskDeal<T> {
  /**
   * 执行单个任务
   * @param task Object
   * @param ownSign 当前环境名称
   * @throws Exception
   */
  public boolean execute(T task,String ownSign) throws Exception;
 
}                                      
IScheduleTaskDealMulti 可批处理的任务接口
public interface IScheduleTaskDealMulti<T>  extends IScheduleTaskDeal<T> {

/**
* 执行给定的任务数组。因为泛型不支持new 数组,只能传递OBJECT[]
* @param tasks 任务数组
* @param ownSign 当前环境名称
* @return
* @throws Exception
*/
  public boolean execute(Object[] tasks,String ownSign) throws Exception;
}                                     
4、Sleep模式和NotSleep模式的区别
1、ScheduleServer启动的工作线程组线程是共享一个任务池的。
2、在Sleep的工作模式:当某一个线程任务处理完毕,从任务池中取不到任务的时候,检查其它线程是否处于活动状态。如果是,则自己休眠;
   如果其它线程都已经因为没有任务进入休眠,当前线程是最后一个活动线程的时候,就调用业务接口,获取需要处理的任务,放入任务池中,
   同时唤醒其它休眠线程开始工作。
3、在NotSleep的工作模式:当一个线程任务处理完毕,从任务池中取不到任务的时候,立即调用业务接口获取需要处理的任务,放入任务池中。
4、Sleep模式在实现逻辑上相对简单清晰,但存在一个大任务处理时间长,导致其它线程不工作的情况。
5、在NotSleep模式下,减少了线程休眠的时间,避免大任务阻塞的情况,但为了避免数据被重复处理,增加了CPU在数据比较上的开销。
   同时要求业务接口实现对象的比较接口。
6、如果对任务处理不允许停顿的情况下建议用NotSleep模式,其它情况建议用sleep模式。
5、使用过程中的注意事项(待续)
分享到:
评论

相关推荐

    TBSchedule淘宝开源定时任务调度框架客户端demo

    **TBSchedule淘宝开源定时任务调度框架客户端demo详解** TBSchedule是淘宝开源的一个高效、稳定、易用的定时任务调度框架,它为企业级应用提供了强大的任务调度能力。本demo旨在帮助开发者理解如何在实际项目中集成...

    TBSchedule原理与实践demo

    ### TBSchedule原理与实践详解 #### 一、TBSchedule概述 TBSchedule是一款由阿里巴巴淘宝团队开发的开源分布式任务调度框架。该框架旨在解决大规模数据处理与定时任务分发的问题,支持高并发和高可用性。...

    TBSchedule资料

    《TBSchedule原理与实践》 在IT行业中,任务调度系统是不可或缺的一部分,尤其是在大数据处理、定时任务执行等领域。TBSchedule,作为一个高效且灵活的任务调度框架,深受开发者喜爱。本文将深入探讨TBSchedule的...

    TbSchedule中定时规则生成quartzcron

    `TbSchedule`是一个常见的任务调度框架,它允许开发者定义和管理定时任务。本篇文章将深入探讨如何在`TbSchedule`中生成定时规则,并将其转化为`QuartzCron`表达式,以便于利用`Quartz`库来执行这些任务。 `...

    tbschedule-ScheduleConsole美化版

    【tbschedule-ScheduleConsole美化版】是一款基于`tbschedule`框架的优化版本,主要针对原生的ScheduleConsole进行了界面和用户体验的改进。在本文中,我们将深入探讨`tbschedule`框架及其ScheduleConsole的增强版,...

    zookeeper+TOMCAT+TBSchedule集合

    【标题】"Zookeeper+Tomcat+TBSchedule集合"是一个综合性的技术组合,涉及到分布式协调服务Zookeeper、Web服务器Tomcat以及一个任务调度框架TBSchedule。这个组合在实际的分布式系统中常用于实现高效、可靠的任务...

    淘宝分布式调度框架TBSchedule

    淘宝分布式调度框架TBSchedule是淘宝的一块开源软件,TBSchedule有很多特性,包括批量任务,多主机,多线程,动态扩展,实时或定时任务,分片,并发,不重复执行。TBSchedule依赖于ZK存储调度数据,在使用中充当着...

    TBSchedule

    淘宝提供的开源分布式工具,依赖于zookeeper使用。

    tbschedule-3.3.3.2.jar

    TBSchedule是一个支持分布式的调度框架,能让一种批量任务或者不断变化的任务,被动态的分配到多个主机的JVM中,不同的线程组中并行执行。基于ZooKeeper的纯Java实现,由Alibaba开源。

    tbSchedule工程和实战项目

    **tbSchedule工程与实战项目详解** `tbSchedule`是一个基于Java开发的任务调度框架,它为开发者提供了一种灵活、高效的方式来管理和执行定时任务。在本文中,我们将深入探讨`tbSchedule`的核心特性、架构设计以及...

    java后端源码部署-tbschedule:tbschedule是一个由Alibaba开源的支持分布式的调度框架

    tbschedule是一个支持分布式的调度框架,让批量任务或者不断变化的任务能够被动态的分配到多个主机的JVM中, 在不同的线程组中并行执行,所有的任务能够被不重复,不遗漏的快速处理。基于ZooKeeper的纯Java实现,由...

    tbschedule:tbschedule一个简洁的分布式任务调度引擎

    tbschedule fork from 添加部分修改以适应自己的场景,目前引入的版本是官方2012-03-21最后提交版本 搭建zookeeper 以win7X64安装单机双集群为例, 1、复制zkEnv.cmd为zkEnv-slave1.cmd,并修改ZOOCFG=%ZOOCFGDIR%\...

    wed-job:wed-job是基于TBSchedule官方3.2.18版本的重置版。一个轻量级分布式任务调度框架,目前持续更新中,喜欢的同学欢迎关注^ _ ^

    tbschedule-wed正式更称为wed-job并发布第一个正式版 基于TBSchedule官方3.2.18的重置版。TBSchedule具有框架轻,0入侵,效率高(高过elastic-job和xxl-job)等诸多特点,无奈官方于3.3.3.2版本后停止了升级与BUG...

    nSchedule:学习TBSchedule

    【标题】:nSchedule——深入理解TBSchedule 在IT领域,调度系统是不可或缺的一部分,尤其是在分布式系统中,良好的任务调度能确保业务流程的高效运行。TBSchedule是一款基于Java开发的任务调度框架,由nSchedule...

    chronus:Chronus是360金融技术团队基于阿里开源项目TBSchedule重新安排的分布式调度

    Chronus是360金融技术团队基于阿里开源项目-TBSchedule进行重组的分布式调度平台,内部经历了5个变量版本。平台零开发,无缝支持Dubbo协议,未来支持HTTP,SpringCloud,期望成为微服务生态轻量级分布式调度平台。...

    DISchedule:对TBSchedule分布式任务调度进行了简单改造

    前段时间由于工作需要,简单研究了下tbschedule。发现其功能不错,但是真正用起来功能还是有点欠缺:日志无法与现有项目相结合持续需job数据时,不支持定期执行任务(quatz),只能在某个时间段内执行jobjob执行完毕...

    分布式任务调度框架 集合

    1. TBSchedule 一个简洁的分布式任务调度引擎 官方出处 http://code.taobao.org/p/tbschedule/wiki/index/ 2. DISchedule 对TBSchedule分布式任务调度进行了简单改造 3. light-task-scheduler LTS是一个轻量级...

    Spring Task+Zookeeper分布式定时任务调度组件-Taroco-Scheduler.zip

    Spring Task和Zookeeper是两种在分布式环境中常用于任务调度的技术。Spring Task是Spring框架的一部分,提供了在Java应用程序中实现定时任务的能力,而Zookeeper则是一个分布式协调服务,常被用作分布式系统的配置...

    Quartz-Book(2019-1-10).docx

    除了 Quartz 之外,还有其他的定时任务框架,如 TimeTask(虽然简单但功能有限),Elastic-Job(当当网的分布式定时任务框架),以及 TBSchedule(阿里巴巴开发的分布式定时任务框架)。这些框架各有特点,适用于...

    姓名-javaEE软件工程师-2年-模板(48).doc

    他还了解淘宝的TBSchedule框架。 在项目实践中,王强参与了裕隆佳田商贸综合管理系统的开发,负责了业务模块划分、数据库设计以及货运管理模块的主要功能实现。通过使用Jbpm、Struts配置校验、泛型技术和POI,他...

Global site tag (gtag.js) - Google Analytics