我正在研究分布式系统的设计。该系统由多个生产者,分布式队列和多个消费者即工人组成。 工作实例驻留在不同位置的数据中心内。有时手动断开一个位置。
在这种情况下,问题是来自断开连接的位置的工作人员从队列中获取了一些任务,然后在任务完成之前关闭。我想要:
解决此类问题的方便方法是什么?
答案 0 :(得分:1)
此设计可能对您有所帮助。每次工作人员消耗任务时,将任务从队列移动到其他分布式消耗任务列表。在此任务列表中,维护每个任务的时间戳。
然后,消耗该任务的工作者应该每隔一秒左右发送某种仍然存活的消息(类似于hadoop的listenbeat消息),该消息更新消耗任务列表中任务的时间戳。这是为了表明消费这项任务的工人仍然活着并且最近收到了他的消息。
现在,实现一个守护进程来监视这个消耗的任务列表,并将任务移回到时间戳早于阈值秒数的队列(考虑消息丢失)。