如何确保分布式系统中的单一交付?

问题描述:

我有一个分布式的电子邮件传送系统,可以在特定的日期和时间定期发送电子邮件到一个地址列表。如何确保分布式系统中的单一交付?

我有一堆服务器轮询数据库,并等待正确的时间发送电子邮件。

如何确保这些服务器不会同时向同一客户发送同一电子邮件?我必须在这里创建某种分布式锁机制吗?有没有更好,更有效的方法来做到这一点?如果没有,什么是推荐的最佳实践实现这种分布式锁(我目前的堆栈的node.js + Postgres的)

好了,一个可能的解决办法是公正的,使用一致性哈希,对哈希(主题+时间+无论如何),并且不执行任务,如果它不是正确的投票工作者。

分布式锁定,本身效率很低,难以扩展,但我的意思是你可以查看lamports面包店,令牌环传递网络,胖乎乎的所有人都是活泼的方面总狗屎,胖乎乎的也很难实施,你也可以拥有一个轻量级的法定人数,但那也不是很有效。

TLDR,一致的哈希,可能是一个聪明的方法,或者说,我不明白为什么你没有一个单独的轮询器,只是将所有的工作转发给负载均衡器,按计划进行工作。