libi / dcron

轻量分布式定时任务库 a lightweight distributed job scheduler library
MIT License
422 stars 73 forks source link

新加入节点可能导致任务重复运行 #5

Closed singerlio closed 4 years ago

singerlio commented 4 years ago

启动新的节点,如果任务中有小于 10s(defaultDuration) 的定时任务, 可能会导致有的任务会同时在两个节点中运行。

解决方案: 在 dcron.Start() 中至少等待 defaultDuration 时间后再运行 d.cr.Start()。但是此方案可能会导致有的任务停滞运行一段时间。

libi commented 4 years ago

相当于节点启动时内先进行注册然后等待defaultDuration再执行任务,这样有可能会导致在这defaultDuration有任务分配到该节点导致丢失某些任务。 这个问题只需要将节点的更新周期改成1s应该就可以了。 最优方案可以参考redlock分布式锁的设计,在任务启动时写做2次验证,保证任务唯一执行。

singerlio commented 4 years ago

感谢回复,修改更新周期确实是一个折衷的办法。 我再研究下分布式锁的方案。

libi commented 4 years ago

欢迎提交pr