2022年5月27日 作者 zeroheart

如何避免重复调度

1.XXL-JOB集群通过DB锁实现调度一致性,防止调度重复

xxl-job集群通过DB锁实现调度一致性,防止调度重复 – 灰信网(软件开发博客聚合) (freesion.com)

基于数据库的集群方案,数据库选用Mysql;集群分布式并发环境中进行定时任务调度时,会在各个节点会上报任务,存到数据库中,执行时会从数据库中取出触发器来执行,如果触发器的名称和执行时间相同,则只有一个节点去执行此任务。

2.redis分布式锁

调度前获取分布式锁,成功的话就执行,不成功有人在执行就放弃,但是可能存在一个过期时间的问题,如果过期之后在调度还会重复执行.解锁之类的也要考虑还好,如果超时了考虑只能解自己加的锁.

如果缓存时间过了,在执行中的程序还没结束,怎么防止重复执行?

如果不需要续期,不用看门狗机制,那就自己设置超时时间吧

(26条消息) Redisson的“看门狗”机制,一个关于分布式锁的非比寻常的BUG_普通网友的博客-CSDN博客_redisson看门狗机制

(26条消息) 分布式锁redisson的使用 看门狗原理_Bee.F的博客-CSDN博客_redisson分布式锁看门狗

看门狗对于多个key的续命,不是遍历的,也是用时间轮来触发的续命操作.调度(定时任务)嵌套调度(看门狗续命)啊…..

可以使用redisson,增加看门狗机制,为未执行结束的锁续期.锁多的话怎么办?

3.zk的分布式锁,这个不多说了,和redis类似.