不稳定网络中的分布式队列消费者

Distributed queue consumers in unstable net

我从事分布式系统的设计工作。该系统由多个生产者、分布式队列和多个消费者(即工人)组成。 Workers 实例驻留在不同位置的数据中心内。有时手动断开一个位置。

在这种情况下,问题是来自断开连接位置的工作人员从队列中获取了一些任务,然后在任务完成之前关闭。我要:

  1. 活着的地方的工人能够得到这样的任务并完成它
  2. 当断开连接的 worker 最终打开时,它应该确定任务是否已经被其他 worker 完成并决定如何处理它

解决此类问题的简便方法是什么?

此设计可能对您有所帮助。每次工作人员使用任务时,将任务从队列移动到其他分布式的已使用任务列表。在此任务列表中,为每个任务维护一个时间戳。

然后使用该任务的工作人员应该每秒左右发送某种 still alive 消息(类似于 hadoop 的 hearbeat 消息)以更新已使用任务的时间戳任务列表。这是说明消费这个任务的worker还活着,最近收到了他的消息

现在,实现一个守护进程来监视这个消耗的任务列表,并将时间戳早于阈值秒数的任务移回队列(考虑消息丢失)。