我正在考虑将bittorrent用于大型数据分发问题,其中数据源为PB级,用户最多需要几个TB。一些细节

  • 潜在的洪流数量百万
  • 种子大小从100Mb到100Gb不等
  • 世界各地稳定的集群集,能够充当播种机,每个集群持有总种子量的很大一部分(例如平均60%)
  • 希望同时下载几TB数据的相对较少的同时用户(少于100个)。

  • 我希望 Activity 的torrent数量比可用的总种子数量少,但是服务质量很重要,因此每个torrent必须有多个种子播种者,或者必须有某种机制来启动新的种子播种者。

    我的问题是,bittorrent客户可以处理大量的torrent种子,其中大多数都是闲置的吗?我是否需要在集群中的所有种子上分割种子,或者每个节点都可以对其可以访问的所有种子进行种子播种?哪个客户会做得最好?是否有用于管理播种机集群的工具?

    我假设可以将跟踪器扩展到此级别。

    最佳答案

    有两个主要问题:

  • 每个种子文件(通常)都需要定期向跟踪器发布,这可能会占用大量带宽。
  • 需要以一定的方式编写bittorrent客户端以扩展大量torrents

  • 至于跟踪器的流量,我们假设您有100万个种子,典型的重新发布间隔为30分钟,但某些跟踪器将其设置为1小时。保守一点,假设您的跟踪器使用1小时的通告间隔。您每小时必须发出一百万个GET请求,比方说每个请求分别增加400个字节和减少100个字节(假设大多数响应不包含任何对等项),即大约增加111 kB/s,持续减少28 kB/s。并不是很糟糕,但是请记住,TCP需要额外的往返次数来建立连接,因此又要减少40个字节,又要增加40个字节。

    仅使用UDP trackers可以缓解这种情况。然后,您只需要一个连接消息,就可以为每个公告重用连接ID。然后,每个公告消息将为100字节,并且返回的消息也将更加紧凑,我们假设60字节。这样一来,您就能将28 kB/s的速度调高,而将16kB/s的速度调低,这只是为了让torrent保持公布。为此,您需要一个具有不错的udp跟踪器支持的客户端(例如,一个缓存连接ID的客户端)。

    还不错,假设与您的种子将发送的实际数据相比微不足道。

    但是,您不一定需要在单独的数据中心之间分割种子,也可以使用HTTP服务器为种子添加种子。所有主要的Bittorrent客户端都支持http种子,因此您不必担心会向跟踪器发出通知(URL被刻录到.torrent本身中)。

    至于使用torrent可以很好地扩展的客户,我不确定,我还没有做过任何测量。仅生成一百万个随机种子并尝试加载它应该是相当简单的。

    我已经在libtorrent rasterbar中进行了一些优化工作,以使其能够很好地与许多torrent一起扩展,尽管我还没有尝试过数百万次。

    我已经写了一个关于该主题的博客文章here

    09-10 08:13
    查看更多