通过本地网络集中分发/同步大型文件集

通过本地网络集中分发/同步大型文件集

尽管我完全清楚这个问题已经被问过很多次了古戈尔次数多了,我就会尽量不再重复。

我有许多文件集(有些文件很小,但有些很大,大约 10-20GB)。我有多台服务器,每台服务器可以托管一个或多个文件集。当然,一台服务器可以托管总文件集的 50%,另外 50% 可以托管其他数量的文件集。

你可以想到至于大型媒体文件的集合、真正大型的图像库、完整的应用程序等等,其实都不重要,只要集合中包含大型文件即可。

服务器可以在任何时间点更新其集合的副本(或者用全新的文件替换集合中的文件,或者对某些文件应用补丁,这将导致几乎相同的文件只有细微的差别)。

另一方面,我有很多客户,他们应该能够从服务器获取任何给定的集合(或多个集合),并且在想要使用该集合时,让他们的集合副本与服务器上的集合保持最新(同步)。

我考虑过的工具如下:

  • rsync——它非常适合同步许多中小型文件,但在同步大型文件时不太理想,因为它使用从两端读取整个文件的算法来确定是否应复制文件。当文件第一次需要复制或文件完全更改时,这种方法是可行的,但当 10GB 文件中只有 1% 发生更改时,这种方法就不太可行了。
  • SVN——在查找差异并仅传输这些差异方面,它非常有用,但我不太确定它在磁盘使用方面是否优化(由于一次集合存储在存储库中,整个集合在客户端和服务器上的大小是否会增加一倍?)。
  • Torrent——从分发角度来看,这种方法是可行的。例如,为服务器上的每个集合创建一个 torrent,开始在那里播种,接收这些集合的客户端也会继续播种到其他客户端,从而将负载分布到拥有该集合副本的每台计算机上。但是,我不确定一旦服务器上的集合发生变化,它是否能够以某种方式分配差异……是否需要为每次更改创建新的 torrent?另外,我不知道 torrent 在本地网络中的速度如何(它能否在网络受限的情况下以最大速度在一台服务器和一台客户端之间传输文件。或者它会增加一些严重的协议开销?网络拥塞怎么办?)
  • 定制解决方案。好吧,这里没什么可补充的,但它很可能是重新发明轮子,而且如果我意识到的话,一些现有的解决方案很可能适合我的需求。

因此,问题是:哪种分发/同步方法(实用程序、方法)最适合我的情况?

答案1

如果您可以放心地假设所有客户端都具有一致的版本,则可以使用现成的二进制修补工具并推出自己的解决方案,将差异推送到客户端并应用它们。但是,如果客户端的版本不一致,则必须读取客户端上的文件才能确定需要发送哪些差异(基本上是 rsync 问题)。但是,如果客户端是一致的,您只需计算一次差异并将其发送出去即可。

听起来你正在寻找类似多播 rsync实现。我从未使用过此工具,但值得一看。目前看来他们只针对 Linux 和 Unix 操作系统。

答案2

最后,我选择了 BitTorrent。原因如下。

  • 它的速度很快:它完全饱和了服务器的上行链路(尽管由于大量的微小数据包,它确实会降低所涉及计算机的网络速度,但可以通过禁用 UDP 数据包来优化)。
  • 它是真的能够良好且快速地分发任何文件集上的任何更改集(BT 协议的最小数据单位是“片段”,其大小从 4KB 到 4MB 不等,并且每个文件被分成片段,对片段进行校验,然后只传输不同的片段,无论相关文件的大小是 KB 还是 GB - 都可以非常快速地完成)。
  • 它是完全分布式的:您可以托管来自许多不同源服务器的多组文件,并让客户端检索文件,无论它们存储在何处(我知道这是一种没有实际意义的观点)。
  • 在服务器将其内容副本上传到网络后,服务器负载急剧下降,并且新部署的客户端接收最新集的时间也急剧减少,因为集是从整个计算机网络接收的,而不是单个集中式服务器。
  • 它可以在小型安装中使用,只需正确配置 uTorrent 客户端程序,即可用于创建 .torrent、跟踪种子/对等点以及在客户端计算机上接收数据。

我遇到的仅有的两个缺点是:

  • 为大数据集创建 torrent 可能需要花费大量时间(很多:5-10 分钟),而创建 .torrent 时(读取整个数据集,将其拆分成多个部分,进行校验和计算),如果数据集不在本地可用而是从网络获取,则速度会进一步减慢。此外,当想要将任意数量的更改分布到大型数据集上时,需要的时间也相同 - 每台计算机(包括服务器和所有客户端)都需要执行校验和部分,正如我所说,这可能会很漫长。(我必须在此指出,就我而言,更改非常小,并且只为几 MB 的更改数据而复制 GB 的数据是不切实际的,因此这是一个非常可接受的权衡。)
  • 初始播种机可能需要一段时间才能达到全速,因此如果需要在少于 5 台计算机之间复制文件,则此方法并不合适(但实际上,即使使用 2-3 台计算机也可以注意到好处)。

好了,我希望能够帮助那些面临同样困境的人。

答案3

您可以尝试缓存网络文件系统:

它们都在本地缓存读取和写入,因此如果您有足够的本地缓存空间,它们就不会受到网络性能的约束。

答案4

您可以使用 Windows Storage Server 2008,它与不同供应商的 NAS 设备一起出售,但它非常好用且有效,并且具有单实例存储功能,可以为您节省几 GB。然后,您可以使用专用设备来处理大文件。

大多数 NAS 都配有双网卡,甚至可以获得四端口网卡,因此如果您拥有千兆或更高的 LAN 基础设施,那么您可以捆绑/组合这些端口以提供更大的吞吐量。

放入更多 RAM 就可以了,www.broadberry.com http://www.broadberry.com/nasstorage_servers.html

Dell 也销售 Windows Storage Server,请购买具有 iscsi 的服务器,以便您以后可以通过 iscsi 使用存储。

希望有帮助

相关内容