什么是通过网络将文件夹复制到多个服务器的最快方法(Python)

时间:2012-04-16 22:29:43

标签: parallel-processing multiprocessing python-2.7

正如标题所说,我想要完成的是一个包(通常大小可能在500Mb和1Gb之间变化),我想同时复制40个服务器(同时),我'我一直在使用一个运行副本的脚本,因此我正在考虑这些可能性:

1-多进程库,为每个复制功能创建一个进程,以便它们可以并发运行; - 尽管我认为我可能最终会遇到I / O瓶颈,而且流程无法共享相同的数据。

2 - 我没有使用单一的互联网连接,而是使用庞大的企业广域网。

有谁能告诉我是否还有其他更有效的方法(更快)来实现同样的目标?或者其他一些解决方法?(我可以从2核工作站运行此任务)。

2 个答案:

答案 0 :(得分:1)

1)我对此没有任何经验,但它看起来很适合您的用例:

  

sendfile(2)是一个系统调用,它提供了将数据从一个文件描述符复制到另一个文件描述符(套接字)的“零复制”方式。短语“零拷贝”指的是两个描述符之间的所有数据复制完全由内核完成,而不将数据复制到用户空间缓冲区中。这在通过套接字(例如FTP)发送文件时特别有用。

  

您何时想使用它?   基本上任何通过网络发送文件的应用程序都可以利用sendfile(2)。

2)另一种选择是使用some torrent library。我最近learned(跳过31:00获取洪流的东西)facebook通过torrent分发他们的日常软件更新(并在15分钟内更新1000个服务器和1.5GB二进制文件)。

答案 1 :(得分:0)

假设您的机器具有1Gbit连接。如果你很幸运/工作,你将获得800Mbit / s,复制每个1GByte和6-7分钟需要大约10s才能更新这些机器。如果这还不错,那么你唯一需要做的就是有效地使用1Gbit来达到目标​​(你从目前的脚本中看到了什么?好的1Gbit可能在WAN上很有用,但你可以做类似的分析)。多处理在这里可能会有所帮助,也可能没有帮助......但它不会神奇地为你带来更多带宽。

如果不够好,我要么考虑:

  • 去P2P(见miku; s回答),所以只要一台机器有一点点 它可以使用它自己与其他机器共享的数据 带宽。这有多大程度上取决于你的 网络拓扑(存在其他瓶颈点)。

  • 查看多播,如果网络足够您控制,您可以正确地路由这些东西(这看起来很漂亮) 不太可能是广域网,但也许有一天在IPv6的仙境......)。 而不是复制相同的数据40次(假设它是相同的 你每次只播放一次,所有接收者都选择它 同时起来。多播UDP不可靠(更多用于 我认为是IPTV,但有attempts to build reliable file transfer tools using multicast技术,例如OpenPGMMS's own implementation