请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师你好,worker如果同时跑两个,同一时间段任务可能会执行两次,这样会不会有问题?

如果两个worker同时运行,当执行同一个任务时,会有两种情况。如果当前woker的任务正在执行,另一个woker执行相同任务会因为有锁而执行失败,也就是说一个任务只在一个worker中执行成功;当一个woker执行完后另一个woker才执行这个任务,同一个任务在两个worker中都能执行成功。所以目前worker的逻辑是否不严谨?
目前目前任务的执行信息都是在当前worker的内存中,这样只能防止当前worker不去重复执行自己的任务,而不能防止其他worker执行同样任务。woker的执行状态是否也需要放到etcd中进行维护?

正在回答 回答被采纳积分+3

1回答

小鱼儿老师 2019-02-21 17:51:00

同学好,防止并发的思路就是上锁,现在无非是N个worker抢一把分布式锁。


因为所有机器的时钟基本一样,所以同一时刻拉起任务只有一个worker能成功,其他的worker需要等待下次调度。


特殊场景是,job瞬间退出,那么因为时钟的差异,可能会多个worker出现接连的执行,但这种场景对于遵循幂等性的实现来说不是问题。


另外一种调度任务的架构,就是master管理调度,在etcd指派任务到worker,由单个worker来负责某个任务,这种可以避免抢占。

0 回复 有任何疑惑可以回复我~
  • 老师好,关于您说的这个特殊场景,如果一个worker的时钟比较快,先拿到了锁,但是job瞬间推出了,那么其他时钟比较慢的节点可能刚好到达这个job执行的时间,会造成job被重复执行的情况, 我理解咱们这种架构是解决不了这个问题的对吗?
    回复 有任何疑惑可以回复我~ 2022-08-19 15:53:30
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信