什么是分布式调度引擎?
大家在公司做项目的时候都应该有过这种task类型的工程吧?
下面我们通过一个简单的场景来了解下分布式调度引擎的!我们来看课件图一。
简单介绍下这个场景啊。场景的需求是这样的。每天晚上凌晨12点到凌晨3点备份a表的数据都b表去!
解决当前场景的方案有很多啊!我们先来看一个最简单,最原始的方案。叫
单线程模式,就是写一个while true。不停的去比配两张表的数据,没有数据就让线程sleep一会,一select到数据就开始insert备份,这种模式只有一个线程在运行整个任务!并且只有一台主机!处理的比较慢。效率很低!
为了更高效的处理task任务。于是推出了第二种方案,
就是下面的多线程简单模式!
这种模式下有三个线程同时在跑这个任务。thread1线程不停的在数据库里查找要更新的数据。找到了就将数据放入队列queueA中。这个queueA是一个队列。thread2和thread3不停的在队列中取数据。将数据insert要备份的表中去!这是典型的队列的生产消费模式!3个线程同时运转这样就大大的加快了我们任务处理的效率了。这种模式下是多线程。单主机去处理。也是有缺陷的!比如说服务器A挂了!整个任务处理就停止了。存在着单点风险!还有一点就是。比如说A服务器创建线程的最高上限是3个!打个比方啊。如果我们需要6个线程来同时处理当前任务!那这个多线程简单模式就解决不了我们的问题了,于是就有了第三种方案。看下面的图
分布式多线程多主机复杂模式
这种模式下就是在多线程模式下扩展了服务器!图中的单主机变成了两台!主机扩展了。我们的线程数量是不是也随之可以增加了!处理任务的效率就更加的快了!但也会给我们带来新的问题!一个任务交给两台机器去执行!会出现重复数据!对不对!所以图中将我们的任务做了拆分。分成了两个小任务。每台机器执行一个小任务。这样就不会产生重复数据了,每个主机呢还是按照多线程简单模式来处理这些任务的!分别各自启动了4个线程配合队列的生产消费模式来处理小任务!
回到我们之前的问题,什么是分布式调度引擎
这个问题我们拆成两个问题来解释!1什么是分布式?2什么是调度引擎。
什么是分布式?。这个分布式可以理解为将一个任务拆分,分给多台主机去处理!这个就叫分布式,那么调度引擎又是什么呢?图中多出了一个调度引擎!调度引擎在这个模式下是拿来干什么的?我们来分析下!它处理的工作我基本都写上去了!
给机器器动态分配任务,实现⾃自动容错
这个是什么意思呢?前面多线程简单模式我们有谈到过单点风险! 分布式多线程多主机复
杂模式能解决这个单点的问题!它是怎么去解决的呢?比如说a挂了!B还在,这就叫解决单点问题了吗?。不是的。因为A的小任务没人处理了?对不对。所以说a挂了b还需要把a的任务给接过来。这样单点风险才算真正意义的解决!调度引擎其中的一个工作就是 会不停的检测每台主机的健康情况,给每台机器去动态的分配任务。比如说a挂了!它会检测到!它会把a的任务交给b去处理!这叫动态分配任务实现自动容错!不需要人工去干预。
给机器器创建多线程执⾏小任务
我们主机的多线程也是交给调度引擎去创建的.
任务分片,其实就是任务的拆分!也是调度引擎去处理的。你只要告诉调度引擎拆分的规则就好了!
因为我们这个模式下是多主机跑任务的!你的任务必须拆分!要不然多台机器跑一个任务会产生重复数据的
给机器器分配调度器
这个调度器是什么意思呢?调度器其实就是线程组!我们的多线程会分组!每个线程组称为一个调度器。一个线程组包含5个线程。
每台机器创建多少个线程也是由我们的调度引擎去分配的。这是tbschedule的逻辑!好了。这就是我们的 分布式多线程多主机复杂模式。这种模式下会出现一个分布式调度引擎的角色用来解决我们分布式下作业的产生的各种问题!
好了。这就是我们tbschedule的调度原理,
tbschedule源码实现完整篇章
http://java52.com/kcdetail.html?course=2