大家好,在讲tbschedule使用之前,我们先了解下tbschedule的调度原理,不然大家对tbschedule的配置会不太理解
任务分片,调度器/线程组!我们前面对这些名词做一个大概的解释!
今天针对这些名词我们来深入的讲解下tbschedule的调度原理。
第一张图
还是我们前面讲过的分布式多线程多主机复杂模式。其实这是参照tbschedule的原理画出的一张模式图!
我们看课件的第二张图!
这张图是tbschedule的调度原理图!下面我们来讲下这张图!首先是我们最原始的大任务!将a表数据备份到b表去!总数据量是100万条!tbschedule会把copyTask这个任务做拆分。具体拆分出多少个小任务出来。这些在我们的管控台都是可配置的。图中是将大任务总共拆分出了10个小任务!每个小任务处理10w条数据。这样就分给多台机器执行就不会产生重复数据了。针对这个大任务!我们需要创建多少个线程来运行!这一点是在管控台去配置的!比如说我们需要创建25工作个线程来执行这10歌小任务!在tbschedule里面每5个线程被分为一组!这一组线程称为一个调度器!能明白这个意思吧!tbschedule里配置创建多少个线程来执行任务!它配置的单位是调度器!图中总共配了点5个调度器。那么tbschedule会创建25个线程来完成这些小任务!每个调度器被分到了2个小任务!调度器分配任务是由tbschedule来完成的。它有自己的一套算法!好了。线程最终是运行在服务器上的!对不对!图中我们有两台服务器!这两台服务器来分这5个调度器。这个分配也是由tbschedule完成实现的!机器1分到了3个调度器。机器2被分到了2个调度器!
服务器多线程都已经创建好了!下一步是不是让这些多线程去运行程序了?
我们处理任务的逻辑的代码都写在了DemoTask这个类里了!多线程需要去运行这个类的代码就等于在跑我们的任务了!
来看我们的第三张图!
我们每个调度器,会去创建一个DemoTask类的对象,这里解释下我们DemoTask的代码!我们来看代码!DemoTask是包含在我们的test-tbschedule工程里面!核心的两个方法selectTasks,这个叫数据采集接口。意思就是查到我们要备份的数据,返回出去!tbschedule呢!会把返回的数据放到队列中去,每个调度器会有一个自己的队列!看图2。对不对!
execute数据执行接口。tbschedule会从队列里取出数据传到这个方法的行参里,然后我们自己写代码逻辑,将数据insert到备份表中去
每个调度器里包含5个线程。这5个线程是怎么去运行DemoTask对象的数据采集接口和数据执行接口的?看课件图
数据采集接口。肯定不能多线程去采集!因为我们当前每个调度器执行的都是小任务,如果多线程去采集小任务的数据,采集到的数据会重复!对不对?所以呢只能允许一个线程去采集!采集到了放入缓存队列。最后全部线程,也就是5个线程从队列取。并发运行execute接口!这就是调度器的运行原理。调度器是怎么去采集到自己小任务的数据的?是通过selectTasks方法的形参queryCondition来获取的。任务怎么分的说到底还是通过参数来分的。比如我们当前的备份场景。1000w条数据!分片通过条件查询来分!每个小任务的查询条件不一样!这个条件会被传到queryCondition里来,它是一个list.因为我们一个调度器会处理多个小任务。看图2,现在一个调度器就是处理两个小任务。所以这里是一个list类型。如有任何问题请加qq群:751124494
这就是我们tbschedule的调度原理!下章节我们开始实战配置
来源:CSDN
作者:hanhua6771
链接:https://blog.csdn.net/hanhua6771/article/details/103616087