algorithm - 具有奇怪要求的文件传输 : fault tolerant but non-duplicating

标签 algorithm architecture open-source file-transfer

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

6年前关闭。




Improve this question




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

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

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

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

  • 文件由其文件名唯一标识。如果它有相同的文件名,它就是同一个文件。
  • 文件可能无穷无尽。他们的名字包含一个时间戳。
  • 服务器 A 和 B(我的服务器)通常会获得相同的文件。如果文件出现在服务器 A 上,那么它将有 98% 的可能性以相同的文件名出现在服务器 B 上。
  • A 和 B 必须使用 sftp 或类似方法将他们收到的文件推送到 X 和 Y。我不允许在 X 和 Y 上安装软件。我不允许使用 shell 帐户,即使是受限制的帐户。
    现在变得奇怪了:
  • A 和/或 B 收到的每个文件必须由 A 或 B(但不是两者)复制一次到 X 或 Y,但不能同时复制到两者。
  • 我上游的源可能包含同一文件的重复副本(这对我在 A/B 服务器上不是问题,它们每个人都可以跟踪他们提取的内容)。
  • 必须容忍 A、B、X 或 Y 的故障(只要其伙伴仍处于事件状态)。来自 ==> A/B ==> X/Y 的文件流不能停止。

  • 让我明白所有这一切的一点是,为了安全起见,我的本地部门希望文件在 A 和 B 之间复制,但下游接收器(不同的部门)坚持他们想要 X 和 Y 进行故障转移......但是每个文件只能复制到 A 或 B,不能同时复制(或仅在极少数情况下)。如果下游人员只管理重复文件,那将很容易(呃)。鉴于文件名可以快速识别重复,这真的不难。哦,好吧,他们不想那样做。即使 X 或 Y 失败可能会丢失一些文件。去搞清楚。

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

    那么......有人知道开箱即用(或几乎如此)的解决方案吗?我知道那里有通用的 MFT 解决方案,但我还没有听说他们可以做这种事情。

    我看过 rsync 但我看不出它如何处理奇怪的分布。

    谢谢。

    最佳答案

    看起来条件 (5) 很棘手,如果 A 和 B 可以查询您未指定的 X 和 Y 的状态,则会有所缓解。
    这让我想起了NNTP Ihave/Sendme可能有用的协议(protocol)。
    如果你不能自由地对机器 X 和 Y 提出“你有 P”的请求,我有一种感觉,这个任务可能像经典的 Two Army Problem 一样被证明是不可能的。 .如果是这样,那么你必须做设计师面临不可能的限制所做的事情,要么提供一个令人满意的解决方案(例如 TCP 4,3-way handshake ),它在足够的时间内工作,或者如果“足够好”还不够好,那么你必须向管理层表明他们确实要求不可能的事情。
    我知道您说过不要问,但是为什么要像约束(5)那样禁止幂等转移?

    关于algorithm - 具有奇怪要求的文件传输 : fault tolerant but non-duplicating,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3261746/

    相关文章:

    algorithm - 检查两个给定数字是否互质的最快方法是什么?

    symfony - Symfony2 中的模块化应用程序结构

    api - 如何开源使用 API key 的应用程序

    web-services - 为什么 RESTful 应用程序更容易扩展

    c# - 如何将 asp.net webform 和 mvc 4 应用程序迁移到 AngularJS 站点

    java - Java 中的持久数据结构

    .net - .NET 的测试自动化工具

    PHP 函数 'return' 没有返回值

    c - 具有随机输入的递归函数的时间复杂度

    sql - 需要 SQL 方面的专家建议