第十壹本書技术文章编程爱好者

分布式定时任务(一)

2016-09-19  本文已影响9343人  lyndon_nfc

1,什么是分布式定时任务;
2,为什么要采用分布式定时任务
3,怎么样设计实现一个分布式定时任务
4,当前比较流行的分布式定时任务框架

1,什么是分布式定时任务

2,为什么要采用分布式定时任务

单点定时任务的缺点:

分布式定时任务的优势

3,怎么样设计和实现一个分布式定时任务
3.1 分时方案

untitled.png

3.2 HA高可用方案:

untitled1.png

3.3 多路心跳方案:

untitled2.png

3.4 任务抢占方案:

untitled4.png

3.5 任务轮询或任务轮询+抢占排队方案

untitled5.png

通过以上这些方案,可以看出3.5的方案才是优先选择的,扩展性好,开发复杂度不是很高。那么这种方案需要的需要的技术原理是什么呢,那就是分布式互斥锁和队列。

3.6 原理

untitled7.png

有两台服务器运行定时任务,其中serverA的T2做了加锁操作,其他程序必须等它释放锁了才能运行。 那么如果serverA在加锁的过程中,出现宕机怎么办,是否会一直处于别锁状态。那么我们可以在每个锁都设置一个超时阈值,一旦超时便自动解锁。这样就不会因为宕机导致锁一直不被释 放。另外我们还要考虑命名空间的问题,主要是防止出现同名锁,导致被覆盖。

untitled8.png

从上图中可以看出,TaskQueue中排队情况,运行是自上而下的,当然这个顺序可以自己设置规则,只需要先进先出的远程即可。另外,Task Queue我们需要做至少两个节点,他们遵循主 从结构的原则,主节点需要实时向从节点同步数据,保证在主节点不可用,从节点可以替代。当然,这里可以使用权重轮询的方式,加上数据异步同步,让所有节点都可以做主从的切换, 根据运行状况来分配,可能会更好,但是这样开发难度也有所提高,但是大大增加了高可用性。

3.7 总结:

4,当前比较流行的分布式定时任务框架:
4.1 Quartz:

4.2 Elastic-job:

从以上可以看出Elastic-job是在Quartz的基础上又做了一次全面的升级,做了配套的周边基础服务工作,完全成为了一个成熟的分布式定时任务框架。后面会分别介绍Quartz和 Elastic-job的详细原理和具体的使用方法。

关于quartz分布式定时任务,可以参考
分布式定时任务(二)
分布式定时任务(三)

上一篇 下一篇

猜你喜欢

热点阅读