异步分布式文件传输

时间:2010-07-02 07:19:29

标签: c++ algorithm

我需要构建一个系统,我们有一组机器生成唯一文件,让我们称之为生产者,一组机器接收这些文件,我们称之为消费者。生产者的任何机器都可以将文件发送到一个或多个消费者[基于一些散列机制]。我需要构建一个机制,确保文件传递发生在一个有保证的mannner。即生产者或消费者可能会崩溃/重新启动,并能够从他们中断的地方继续。是否有任何可靠的可扩展方式来实现这一点,它似乎是任何容错系统中的常见需求?预计生产者和消费者的数量会随时增加/减少。

2 个答案:

答案 0 :(得分:1)

您所描述的内容听起来有点像Google File System架构的复制机制。您将对本文的第3.1和3.2节以及图2中的插图最感兴趣。

适用于您的案例的摘要(简化):

  1. PRODUCER 发送数据,等待回复。
  2. 消费者(s)回复,“我收到了所有数据。”
  3. PRODUCER 发送“完成写入”命令,等待回复。
  4. 消费者(s)回复,“我已将数据刷新到磁盘。”
  5. 现在(现在)考虑数据,“已保存。”
  6. 本文中描述的GFS实现了许多优化,包括将写入流水线化,而不是同时在 n 机器上分割一台机器的带宽。

    为了通过崩溃进一步提高安全保障,您可以使用Intent Log使写入操作具有幂等性。这可能只是在生产者的最后(例如,你在超时后重试),或者在消费者端也是如此(重启时,继续操作)。

答案 1 :(得分:0)

您所描述的内容可能最容易使用某种形式的消息传递来实现。你可能想看看http://www.zeromq.org;我自己和这个图书馆合作过,可以全心全意地推荐它。

旁注:如果您不需要使用C ++,那么在您的情况下选择一些Erlang可能会很有趣。