tbschedule源码学习
来源:互联网 发布:2k17德拉蒙德格林数据 编辑:程序博客网 时间:2024/06/11 03:59
tbschedule源码学习
tbschedule使用zk来解决集群间的同步问题,首先看一下zk上面的结构信息
- factory 是对应着每一个连接的机器,使用唯一的uuid做区分,后缀是zk自己维护的序列号
- strategy是任务执行策略相关的设置,在每个task-n下面记录了这个任务的策略信息包括可以执行的机器,每个机器该任务执行最多几个线程组,一个线程组里多少个线程。tbschedule在执行的时候这里作为信息的来源。tbschedule的后台也会修改这里
- tasks的是记录任务分配到那台机子的配置。tbschedule在运行的时候会读写这里的内容。任务的lead机子会定时更新这个目录,tbschedule任务片的派发直接依赖这个目录
tbschedule在启动的逻辑图
重要的类结构解析
- TBScheduleManagerFactory
- 这个类必须是单例模式,否则会出现重复执行多次,如果要改配置,再次执行init方法就可以
- ManagerFactoryTimerTask
- 保持心跳,定时更新配置,利用zk重新选出leader读取strategy,更新
- 和TBScheduleManagerFactory的数量一致,也只有一个。
- TBScheduleManager 任务策略的线程组管理器
- 这个类本身会创建多个,有定义了多个任务策略的就有多少个
- 会创建很多个线程IScheduleProcessor,个数为分配到的taskItem的个数
- 同一个组内执行线程持有相同的执行模式
TBScheduleProcessorNotSleep
或者TBScheduleProcessorSleep
,共享同一个任务池
- HeartBeatTimerTask
- 和TBScheduleManager的数量保持一致
- 定时重新分配zk/task下目录,只有leader
zk在这里的作用
zk作为一个黑盒的资源管理中心,类似于目录和文件于一体的结构,即可以存数据也可以创建子目录。
zk被用来选举出集群中的哪个机子是leader,同时记录任务的各种信息,baseTaskType会被频繁更新。
其他
每一个ManagerFactory在启动以后uuid保持不变。在第一次的时候managerFactory.uuid为null,初始化一个uuid,并向zookeeper注册使用EPHEMERAL_SEQUENTIAL模式(断掉会删除,但是path后会追加一个zookeeper内部维护的递增序列号),后面这个序列号是作为集群选举的关键。 注册后得到地址,保留下来并作为这个managerFactory.uuid。 后面重连的话就会直接使用uuid创建目录,使用EPHEMERAL模式(断掉会删除),后面不管重连多少次都会保持一致。应用重启的话 uuid会网上增加。ManagerFactory.uuid一旦设置值之后就不会再改变
IScheduleProcessor 检查是否需要退出的机制和线程中断的机制是一样的,都是协同机制,在某个点检查标志位
- 为了避免频繁读取zk/task下的结构,使用了本地缓存,用了zk目录节点的version作为是否脏的标识。
- 任务组每执行完一遍会休眠一段时间,避免重复空执行浪费资源
- tbschedule分配给每个机子的任务片(0,n)不会相同,每个机子返回可以执行的任务组可以由n多个一般是用返回的任务片取模,这就需要在配置的时候遵守一定的约定。
0 0
- tbschedule源码学习
- TBSchedule源码学习笔记-启动过程
- TBSchedule源码学习笔记-任务处理
- TBSchedule源码学习笔记-线程组任务调度
- tbschedule
- TBSchedule
- 分布式调度框架TBSchedule源码解析
- TBschedule入门
- tbschedule介绍
- TBSchedule初识
- TBSchedule原理与实践
- 分布式调度框架TBSchedule
- TBSchedule原理与实践
- TBSchedule 调度框架(一)
- 分布式任务系统 tbschedule
- tbschedule与spring整合
- 分布式任务调度系统分析(tbschedule)
- 淘宝定时任务 tbschedule实战
- gcc编译的时候一个undefined reference to `xxx'的一个细节
- MyBatis(2):config.xml文件
- Eclipse使用git最基本流程
- 12.24
- BZOJ 4695
- tbschedule源码学习
- 光纤通信原理
- gcc 软连接
- Java并发之线程池(三)
- 2016年12月
- 法律网推荐(二) 用Pig进行数据预处理
- C语言实验——大小写转换
- POJ 2068 Nim 已翻译
- 用java调用VS2010 debug生成的.exe文件