【发布时间】:2011-09-08 07:43:24
【问题描述】:
这个问题延续了我昨天从题为using git to distribute nightly builds的问题中学到的知识。
在对上述问题的回答中,很明显 git 不适合我的需求,并鼓励使用 BitTorrent 重新检查。
短版
需要每天早上向 70 多人分发夜间构建,希望使用 git BitTorrent 来负载平衡传输。
加长版
注意。如果你读过我的previous question,你可以跳过下面这段。
每天早上,我们都需要将每晚的构建分发给 70 多人(艺术家、测试人员、程序员、制作人员等)的工作室。到目前为止,我们已经将构建复制到服务器并编写了一个同步程序来获取它(使用下面的 Robocopy);即使设置了镜像,传输速度也慢得令人无法接受,因为在高峰时间(非高峰时间大约为 15 分钟)需要长达一个小时或更长时间才能同步,这表明硬件 I/O 瓶颈和可能的网络带宽。
到目前为止我所知道的
到目前为止我发现了什么:
我在 Wikipedia 上找到了关于 BitTorrent protocol 的优秀条目,这是一本有趣的读物(我以前只知道种子如何工作的基础)。在客户端-服务器握手之后发生的 BITFIELD 交换中也发现了这个StackOverflow answer。
我还找到了MonoTorrent C# Library (GitHub Source),我可以用它来编写我们自己的跟踪器和客户端。我们不能使用现成的跟踪器或客户端(例如 uTorrent)。
问题
在我的初始设计中,我让构建系统创建一个 .torrent 文件并将其添加到跟踪器。我将使用我们现有的构建镜像超级种子 torrent。
使用这种设计,我是否需要为每个新版本创建一个新的 .torrent 文件?换句话说,是否有可能创建一个“滚动”.torrent,如果构建的内容只有 20% 的变化,那么这就是所有需要下载的内容 get latest?
...实际上。在编写上述问题时,我认为我需要创建新文件但是我将能够下载到用户机器上的相同位置并且哈希将自动确定我已经拥有的。它是否正确?
回应cmets
为了完全同步整个构建(包括:游戏、源代码、本地化数据和 PS3 和 X360 的光盘映像)约 37,000 个文件,仅不到 50GB。随着生产的继续,这将增加。此同步需要 29 分钟才能完成,当时只发生了 2 次其他同步,如果您考虑到上午 9 点我们将有 50 多人想要获得最新信息,那么这是一个低峰。
我们与 IT 部门一起调查了磁盘 I/O 和网络带宽;结论是网络存储正在饱和。我们还将统计数据记录到同步数据库中,这些记录表明,即使只有少数用户,我们的传输速率也无法接受。
关于不使用现成的客户端,在用户计算机上安装像 uTorrent 这样的应用程序是一个法律问题,因为可以使用该程序轻松下载其他项目.我们还希望有一个自定义工作流程来确定您想要获得哪个版本(例如,仅 PS3 或 X360,具体取决于您桌面上的 DEVKIT)并通知可用的新版本等。使用 MonoTorrent 创建客户端不是部分我很担心。
【问题讨论】:
-
您分发的文件大小是多少?您是否尝试过良好的压缩?您也可以使用二进制 diff 工具对比之前的版本,该补丁几乎可以满足所有人的需求(其他人将下载完整的软件包)。
-
您确定更改协议/工具会解决问题吗?与您的硬件、网络带宽等相比,您是否对您尝试在网络上分发的内容进行了真正的数学计算...例如,您是否检查过文件系统缓存(参见:blogs.technet.com/b/askperf/archive/2007/05/08/…)?
-
我真的不明白为什么您不能使用现成的客户端,您是否也在运行内部网络浏览器和文字处理器?
-
更新了问题并回复了 cmets。
-
使用开箱即用的 e-mule 怎么样?
标签: c# continuous-integration bittorrent