老师你好,worker如果同时跑两个,同一时间段任务可能会执行两次,这样会不会有问题?
来源:8-10 监听etcd中的强杀任务通知
hehehei
2019-02-17
如果两个worker同时运行,当执行同一个任务时,会有两种情况。如果当前woker的任务正在执行,另一个woker执行相同任务会因为有锁而执行失败,也就是说一个任务只在一个worker中执行成功;当一个woker执行完后另一个woker才执行这个任务,同一个任务在两个worker中都能执行成功。所以目前worker的逻辑是否不严谨?
目前目前任务的执行信息都是在当前worker的内存中,这样只能防止当前worker不去重复执行自己的任务,而不能防止其他worker执行同样任务。woker的执行状态是否也需要放到etcd中进行维护?
写回答
1回答
-
小鱼儿老师
2019-02-21
同学好,防止并发的思路就是上锁,现在无非是N个worker抢一把分布式锁。
因为所有机器的时钟基本一样,所以同一时刻拉起任务只有一个worker能成功,其他的worker需要等待下次调度。
特殊场景是,job瞬间退出,那么因为时钟的差异,可能会多个worker出现接连的执行,但这种场景对于遵循幂等性的实现来说不是问题。
另外一种调度任务的架构,就是master管理调度,在etcd指派任务到worker,由单个worker来负责某个任务,这种可以避免抢占。
012022-08-19
相似问题