2010-07-02 62 views
2

我需要建立一個系統,我們有一組機器產生獨特的文件,讓他們叫他們生產者和一組機器接收這些文件,我們稱之爲消費者。來自PRODUCERS的任何機器都可以將文件發送給一個或多個消費者[基於某種散列機制]。我需要建立一個機制,確保文件交付發生在一個有保證的mannner。即生產者或消費者可能會崩潰/重新啓動並能夠從他們離開的地方繼續。是否有任何傻瓜證明可擴展的方式來實現這一點,它似乎是任何容錯系統中相當普遍的需求?生產者和消費者的數量預計會隨時增加/減少。異步分佈式文件傳輸

回答

0

你所描述的可能是使用某種形式的消息傳遞最容易實現的。你可能想看看http://www.zeromq.org;我自己曾與這個圖書館合作,並可以全心全意地推薦它。

另一方面:如果你不需要使用C++,在你的情況下,挑選一些Erlang可能會很有趣。

1

您所描述的內容聽起來有點像Google File System體系結構的複製機制。你會是最感興趣的部分3.1和紙張的3.2,連同在圖中的插圖2

摘要(以簡化),因爲它適用於您的情況:

  1. 生產者發送數據,等待回覆。
  2. CONSUMER(s)答覆:「我已收到所有數據。」
  3. PRODUCER發送「完成寫入」命令,等待回覆。
  4. CONSUMER(s)答覆:「我已將數據刷新到磁盤。」
  5. 現在(並且只有現在)考慮數據,「保存」。

GFS如在論文中描述實現了許多優化,包括流水線寫入到消費者而不是同時橫跨Ñ機分割一個機器的帶寬。

爲了進一步通過崩潰保證您的安全,您可以使用Intent Log使寫操作冪等。這可能只在生產者的末端(例如,在超時之後重試),或者在消費者的末端(重啓時,繼續操作)。