阿里巴巴分布式调度引擎tbschedule实战三tbschedule的调度原理

那年仲夏 提交于 2019-12-20 02:11:58

大家好,在讲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的调度原理!下章节我们开始实战配置

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!