如何有效地将大量文件从我的python客户端传输到服务器并返回?

时间:2013-06-16 12:06:57

标签: python networking file-io xml-rpc file-transfer

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

目前我看到两种解决方案:

  1. 使用XML-RPC。看起来很棒,但我不确定性能。从那以后我用google搜索这种方法的表现就差不多了。

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

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

    文件传输过程中的操作:

    1. 上传用户的身份验证

    2. 检查用户的磁盘配额

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

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

    5. 正如我所看到的,这个应用程序实际上更接近dropbox而不是rsync。我们实际上使用了dropbox api,但是这个存储要与我们的其他系统深度集成,所以我们希望能够更好地控制它。

1 个答案:

答案 0 :(得分:0)

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

现在,当你说服务器“对同步文件几乎没有工作”时,什么是“差不多”?如果文件无关,则可以使用rsync。如果文件实际上存在大量计算,那么这些文件的成本可能会使传输成本相形见绌,因此IO不是您的瓶颈,您可以使用任何工具而不会降低性能。

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

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

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