在上面的问题的答案中,很明显git并不适合我的需求,鼓励重新考虑使用BitTorrent。
简短版
需要每天早上向70多人分发夜间构建,希望使用BitTorrent来平衡传输。
长版
注:如果您已经阅读了我的之前的问题,则可以跳过以下段落。
每天早上,我们需要将我们的夜间构建分发给70多人的工作室(艺术家、测试人员、程序员、制作等)。到目前为止,我们已将构建复制到服务器上,并编写了一个同步程序来获取它(在底层使用Robocopy);即使设置了镜像,传输速度仍然不可接受,在高峰时期需要花费一小时或更长时间进行同步(非高峰时期大约需要15分钟),这表明存在硬件I/O瓶颈和可能的网络带宽问题。
我目前所知道的
我目前所发现的:
我在维基百科上找到了一个关于BitTorrent协议的精彩文章,它是一篇有趣的阅读材料(我之前只知道种子是如何工作的基础知识)。此外,我还发现了这个StackOverflow答案,介绍了客户端和服务器握手后发生的BITFIELD交换。
我还发现了MonoTorrent C#库(GitHub源代码),可以用来编写我们自己的跟踪器和客户端。我们不能使用现成的跟踪器或客户端(例如uTorrent)。
问题
在我的初始设计中,我让我们的构建系统创建一个.torrent文件,并将其添加到跟踪器中。我将使用我们现有的构建镜像超级种子这个种子。
使用这个设计,我是否需要为每一个新的构建创建一个新的.torrent文件?换句话说,是否可能创建一个“滚动”的.torrent文件,如果构建内容只有20%发生了变化,则只需要下载这20%即可“获取最新”?... 实际上,在撰写上述问题时,我认为我需要创建新文件,但我可以将其下载到用户机器上的相同位置,哈希将自动确定我已经拥有的内容。这正确吗?
对评论的回应
为了完全同步整个构建(包括:游戏、源代码、本地化数据以及PS3和X360的光盘映像),共计约37,000个文件,总大小刚好不到50GB。随着生产继续,这个数字还会增加。在只有另外两个同步正在进行的时间,这次同步花费了29分钟才完成,如果考虑到早上9点会有50多个人想要获取最新版本,那么这个时间可以算是低峰期。
我们已经与IT部门调查了磁盘I/O和网络带宽的情况;结论是网络存储被饱和了。我们还将同步的统计数据记录到数据库中,这些记录显示即使只有少数用户,我们也得到了不能接受的传输速率。
关于不使用现成的客户端,这是一个法律问题,因为安装像uTorrent这样的应用程序可能会导致其他物品轻松地通过该程序下载。我们还希望有一个自定义的工作流程来确定您想要获取哪个构建(例如,根据您桌子上的DEVKIT是PS3还是X360)并通知可用的新构建等等。使用MonoTorrent创建客户端并不是我所担心的部分。