我需要建立一个系统,其中我们有一组机器产生独特的文件,让他们称为生产者,一组机器接收这些文件,我们称之为消费者。生产者的任何机器都可以基于某种散列机制将文件发送给一个或多个消费者。我需要建立一种机制,以确保文件以有保证的方式交付。即生产者或消费者可能崩溃/重新启动,并能够从他们停止的地方继续。有没有什么简单的可伸缩的方法来实现这一点,这在任何容错系统中似乎都是很常见的需求?生产者和消费者的数量预计会在运行中增加/减少。
发布于 2010-07-02 15:39:54
使用某种形式的消息传递来实现您所描述的内容可能是最容易的。您可能想看看http://www.zeromq.org;我自己也使用过这个库,我可以全心全意地推荐它。
附注:如果您不需要使用C++,那么在您的情况下选择一些Erlang可能会很有趣。
发布于 2010-07-02 15:54:48
您所描述的内容听起来有点像Google File System架构的复制机制。您最感兴趣的是本文的3.1和3.2节,以及图2中的插图。
适用于您的案例的摘要(带有简化):
本文中描述的GFS实现了许多优化,包括将写操作流水线传输给使用者,而不是同时将一台机器的带宽分配给n台机器。
为了通过崩溃进一步保证安全性,可以使用Intent Log使写操作成为幂等操作。这既可以只在生产者端(例如,您在超时后重试),也可以在消费者端(在重新启动时,继续操作)。
https://stackoverflow.com/questions/3163901
复制相似问题