主要内容:
第一部分 TBSchedule基本概念及原理
1. 概念介绍
2. 工作原理
3. 源码分析
4. 与其他开源调度框架对比
第二部分 TBSchedule分布式调度示例
1. TBSchedule源码下载
2. 引入源码Demo开发示例
3. 控制台配置任务调度
4. selectTasks方法参数说明
5. 创建调度策略参数说明
6. 创建任务参数说明
第一部分 TBSchedule基本概念及原理
1. 概念介绍
TBSchedule是一个支持分布式的调度框架,能让一种批量任务或者不断变化的任务,被动态的分配到多个主机的JVM中,不同的线程组中并行执行。基于ZooKeeper的纯Java实现,由Alibaba开源。
2. 工作原理
TBSchesule对分布式的支持包括调度机的分布式和执行机的分布式,其网络部署架构图如下:
2.1 数据存储
执行机和调度机均以ZooKeeper为注册中心,所有数据以节点及节点内容的形式注册,通过定时汇报主机状态保持存活在ZooKeeper上。
首先看下执行机对ZooKeeper的使用配置文件:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName">
<bean id="scheduleManagerFactory"
class="com.taobao.pamirs.schedule.strategy.TBScheduleManagerFactory"
init-method="init">
<property name="zkConfig">
<map>
<entry key="zkConnectString" value="${schedule.zookeeper.address}" />
<entry key="rootPath" value="${schedule.root.catalog}" />
<entry key="zkSessionTimeout" value="${schedule.timeout}" />
<entry key="userName" value="${schedule.username}" />
<entry key="password" value="${schedule.password}" />
<entry key="isCheckParentPath" value="true" />
</map>
</property>
</bean>
</beans>
1)执行机部署启动,会在ZooKeeper上创建永久根节点schedule.zookeeper.address
,其后所有的操作均在该根节点下进行。
这里以/ttest/creditjob
为根节点,查看执行机注册后情况:
[zk: 172.26.50.86:2181(CONNECTED) 28] ls /ttest/creditjob
[strategy, baseTaskType, factory]
[zk: 172.26.50.86:2181(CONNECTED) 29] ls /ttest/creditjob/factory
[127.0.0.1$MIE-ZHANGTAO-D1$9D3029EC0C574403B6CFD0C146644A77$0000000000, 127.0.0.1$MIE-ZHANGTAO-D1$D826BC6565DC4D6CB85F7AE321EE51AE$0000000001]
可以看到根节点下面有3个永久子节点,strategy
存储调度机创建的策略信息,baseTaskType
存储调度机创建的任务信息,factory
存储执行机注册的主机信息。每台执行机启动后,都会在factory
下创建一个临时顺序子节点
,该节点名是由TBSchedule源码生成的主机唯一表示。
根节点内容为当前TBSchedule内置版本号,可在程序修改,实际没什么意义。
[zk: 172.26.50.86:2181(CONNECTED) 17] get /ttest/creditjob
tbschedule-3.2.12
2)调度机部署启动,这时不会对ZooKeeper节点做任何操作。打开调度机配置面板:
配置好ZooKeeper接入点,点击管理主页,进入调度任务管理面板:
输入各项参数创建新任务后,此时会在baseTaskType
下面创建任务名称永久子节点(调度机所有都宕机重启后,仍能保持数据的完整性),而当前节点的内容就是配置的各项参数。
[zk: 172.26.50.86:2181(CONNECTED) 37] ls /ttest/creditjob/baseTaskType
[IScheduleTaskDealSingleTest]
[zk: 172.26.50.86:2181(CONNECTED) 39] get /ttest/creditjob/baseTaskType/IScheduleTaskDealSingleTest
{
"baseTaskType":"IScheduleTaskDealSingleTest","heartBeatRate":5000,"judgeDeadInterval":60000,"sleepTimeNoData":500,"sleepTimeInterval":