具有奇数要求的文件传输:容错但不重复

时间:2010-07-16 03:32:15

标签: algorithm architecture open-source file-transfer

我需要为复杂的文件传输提出解决方案。我可以这样做,但我想知道是否有人知道开源解决方案已经完成了我想要做的90%。

要求很奇怪。不要试图理解它们,它们是政治,领土和官僚主义的地狱混合物。

我控制两个服务器,每个服务器从一组上游源中获取文件。我对来源有一些影响(但不是完全控制)。我的两台服务器收集这些文件并将新文件链接到一个处理目录(这有点简化)。

我的两台服务器,我们称之为A和B,现在必须将这些文件发送到下游的一对服务器。我几乎无法控制下游服务器,我们称之为X和Y.

  1. 文件由文件名唯一标识。如果它具有相同的文件名,则它是相同的文件。
  2. 可能有无穷无尽的文件流。他们的名字包含时间戳。
  3. 服务器A和B(我的服务器)通常会获得相同的文件。如果文件显示在服务器A上,则98%可能会在服务器B上显示相同的文件名。
  4. A和B必须使用sftp或类似方法将收到的文件推送到X和Y.我不允许在X和Y上安装软件。我不允许使用shell帐户,即使是受限制的帐户。 现在它变得奇怪了:
  5. A和/或B收到的每个文件必须由A或B(但不是两者)复制到EITHER X或Y,但不能同时复制到两者。
  6. 我上游的资源可能包含同一文件的重复副本(这对A / B服务器来说不是问题,每个服务器都可以跟踪它们的内容)。
  7. 必须容忍A,B,X或Y的失败(只要其伙伴仍处于活动状态)。来自==>的文件流A / B ==> X / Y不能停止。
  8. 为了安全起见,我的本地部门希望文件在A和B之间重复,这一点让我感到高兴,但是下游接收者(不同的部门)坚持认为他们想要X和Y进行故障转移。 ..但每个文件只能复制到A或B,不能同时复制(或仅在极少数情况下)。如果下游人员只管理重复文件,那将很容易(呃)。鉴于文件名可以快速识别重复,这真的不难。哦,他们不想这样做。即使X或Y的失败可能会丢失一些文件。去图。

    所以我正在研究一种算法来完成所有这些,并且我已经取得了一些进展,但是处理竞争条件,节点故障,节点重启,以及A和B的独立性等等。如果经过一个月的努力,朋友说“你为什么不使用SuperOpenSourceSolution?你可以让它在一天内工作!”我将会有点不高兴。 p>

    那么......有没有人知道开箱即用(或接近这样)的解决方案?我知道那里有一般的MFT解决方案,但我没有听说他们可以做这种事情。

    我已经看过rsync了,但我看不出它会如何处理奇怪的发行版。

    感谢。

1 个答案:

答案 0 :(得分:1)

看起来条件(5)很难,如果A和B可以查询你没有指定的X和Y的状态,它会有所减轻。

这让我想起了可能有用的NNTP Ihave/Sendme协议。

如果你不能自由地做出“你有 P ”机器X和Y的请求,我会感觉这个任务可能像经典{{3 }}。如果是这样,那么你必须做设计师面临不可能约束的事情,并提供令人满意的解决方案(例如Two Army Problem),其工作时间足够长或者“足够好”不够好,那么你必须向管理层表明他们确实已经问过不可能的事情。

我知道你说不要问,但为什么在幂约束(5)中禁止幂等转移呢?