正如标题所说,我想要完成的是一个包(通常大小可能在500Mb到1 1Gb之间),我想同时(并发)复制大约40台服务器,我一直在使用一个当时运行复制的脚本,因此我正在考虑以下可能性:
1-多进程库,并为每个复制函数创建单个进程,以便它们可以并发运行;-although我认为我可能最终会遇到I/O瓶颈,并且进程无法共享相同的数据。
2-我使用的不是单一的互联网连接,而是一个巨大的企业广域网。
谁能告诉我有没有其他更有效(更快)的方法来达到同样的目的?或者其他方法来解决这个问题呢?(我可以在一个双核工作站上运行这个任务)。
发布于 2012-04-19 06:27:46
假设你的机器有1Gbit的连接。如果你幸运的话,你会得到800Mbit/s的速度,复制每个1GByte需要大约10s,更新这些机器需要6-7分钟。如果这已经足够好了,你唯一需要做的就是有效地使用1Gbit来达到这个目标(你从你当前的脚本中看到了什么?好吧,1Gbit在WAN上可能是有限的,但您可以进行类似的分析)。在这里,多处理可能有帮助,也可能没有帮助。但它不会神奇地为你带来更多的带宽。
如果它不够好,我会考虑:
。
发布于 2012-04-17 06:38:14
1)我对此没有经验,但它看起来很适合您的用例:
sendfile(2)是一个系统调用,它提供了一种将数据从一个文件描述符复制到另一个文件描述符(套接字)的“零复制”方式。短语“零复制”指的是两个描述符之间的所有数据复制完全由内核完成,而不是将数据复制到用户空间缓冲区中。这在通过套接字(例如FTP)发送文件时特别有用。
和
你想什么时候使用它?基本上任何通过网络发送文件的应用程序都可以利用
(2)。
2)另一种选择是使用some torrent library。我最近learned (跳到31:00的torrent内容),facebook通过torrent分发他们的日常软件更新(在大约15分钟内用1.5 so的二进制文件更新上千个服务器)。
https://stackoverflow.com/questions/10182616
复制相似问题