1

我有大约 100 个客户端(Windows 机器大多带有一到两台 Mac/Ubuntas),我需要通过中央服务器在客户端之间同步大量文件,中央服务器对同步文件几乎不起作用(主要管理访问权限)。

现在我看到两种可用的解决方案:

  1. 使用 XML-RPC。看起来不错,但我不确定性能。从那我用谷歌搜索了这种方法的性能是低于标准的。

  2. 使用 paramiko 并通过 scp 的 ftp 复制文件。我不喜欢那个解决方案,因为我将文件存储在 riak 中,这将是服务器端的双重 i/o 工作:首先,将文件写入磁盘,然后从磁盘读取文件,最后将其写入 riak .

是否有第三种方法,例如使用套接字和自己编写文件传输代码?是否有异步 XML-RPC 服务器,我的任务需要一个吗?

文件传输过程中的操作:

  1. 上传用户认证

  2. 检查用户的磁盘配额

  3. 基于规则的访问权限管理(谁可以读/写每个文件/目录)。

  4. 将文件放在 riak 中是因为需要一定程度的容错能力。

正如我所看到的,这个应用程序实际上更接近 Dropbox 而不是 rsync。我们实际上会使用 dropbox api,但该存储将与我们的其他系统深度集成,因此我们希望对其进行更多控制。

4

1 回答 1

0

当您说“同步大量文件”时,我首先想到的是 rsync。如果您不知道该工具,它可以让您有效地同步本地和远程目录。它可以配置为跳过未更改的内容,使其非常高效。

现在,当您说服务器“几乎不处理同步文件”时,什么是“几乎”?如果对文件无事可做,则可以使用 rsync。如果文件确实有一些繁重的计算,这些成本可能会使传输成本相形见绌,因此 IO 不是您的瓶颈,您可以使用任何工具来解决它而不会降低性能。

现在,如果您可以镜像服务器上的文件并在那里应用各种修改,那么您可以使用 rsync 有效地传输它们。这将使您无需重新发明文件传输轮,而是在经过验证的基础架构上进行构建。我必须在这里强调,我从你的描述中不明白你到底在做什么,也许如果你更多地描述要求,会有一个更好或不同的答案。

根据更新的问题进行编辑:

Python rsync绑定应该允许您甚至从 MS Windows 系统同步访问。它没有提到 OS X,但由于它与 POISX 相当接近,因此它很可能在没有太多麻烦的情况下工作。在服务器端,您只需监视本地文件系统的更改(例如查看iwatch),然后将差异提交到您的数据库。使用这两个应该可以帮助您入门,如果稍后的性能不够,您可以连接到 rsync 服务器(开源)并从那里触发数据库更新,而无需通过文件系统。

于 2013-06-16T14:45:32.187 回答