管理多个媒体服务器以及它们之间的文件分配的最佳方法是什么?

时间:2009-05-11 03:05:41

标签: php mysql

我有一个文件主机网站可以刻录2gbit的带宽,所以我需要开始添加辅助媒体服务器来存储文件。使用大量文件管理多服务器设置的最佳方法是什么?最好只通过php。

目前,我只有大约100Gb的文件...所以我可以获得第二台服务器,镜像它们之间的所有内容,然后轮流50 / 50,33 / 33/33等流量。但是一旦文件总量超出单个服务器的容量,这不会工作。

我的想法是在DB中存储一个存储服务器列表,每个服务器上剩余可用空间量。上传文件后,php将选择文件实际上传到哪个服务器,并在服务器之间均匀分布所有文件。

希望得到更多的投入/灵感。

不能使用亚马逊等任何第三方服务。这些文件的范围从几个字节到一个千兆字节。

由于

5 个答案:

答案 0 :(得分:2)

您可以尝试MogileFS。它是一个分布式文件系统。有一个很好的PHP API。您可以创建类别并将文件上载到该类别。对于每个类别,您可以定义应分配的服务器数量。您可以使用API​​在随机节点上获取该文件的URL。

答案 1 :(得分:1)

如果您正在进行与您所说的一样多的数据传输,那么看起来您正在做的事情正在快速增长。

您可能值得花时间与托管服务提供商联系,看看他们是否通过iscsi,nas或其他方式提供任何类型的共享存储解决方案。理想情况下,存储不仅会大到足以存储您拥有的所有内容,而且还能够动态增长,超出您的需求。我知道我的托管服务提供商提供了这样的解决方案。

如果他们不这样做,您可能会考虑将服务器放在某处提供类似服务的位置,或者允许您安装自己的存储服务器(可以从现成的组件和软件如Freenas或Openfiler中廉价构建) )。

一旦您拥有了一个集中式存储平台,您就可以在您的内容中添加Web服务器,并根据负载对其进行负载平衡,同时访问相同的中央存储库。

这不仅是正确的方法,如果您努力继续以目前正在增长的速度增长,它将在未来为您提供更多的冗余和可扩展性。

使用存储在哪里的数据库存储库提供的其他解决方案可行,但它不仅在折叠中增加了额外的复杂层,而且在访问者和他们希望访问的数据之间增加了一层处理

如果丢失硬盘怎么办?丢失了1/3或1/2的所有数据?

静态内容的重IO应该与其他操作系统和应用程序数据位于同一个主轴上吗?

答案 2 :(得分:0)

最好的办法是将文件放入某种可扩展的存储空间。在本地存储文件应该只有充分的理由(它们是敏感的,私密的等)

最好的办法是将内容移到云端。 Mosso的CloudFiles或Amazon的S3都允许您存储几乎无限量的文件。然后,您可以通过API访问所有内容。如果需要,您可以使用MySQL跟踪元数据以便于搜索,并让服务处理文件的实际存储。

答案 3 :(得分:0)

我认为你自己的想法并不是最糟糕的。得到一堆服务器,并为每个文件存储它所在的服务器。如果上传新文件,请先使用最多自由空间*。每个服务器都处理它自己的交付(而不是通过主服务器管道)。

<强>的优点:

  • 为单个文件使用多个服务器。例如for cutekitten.jpg:filepath="server1\cutekitten.jpg;server2\cutekitten.jpg",然后根据服务器负载选择服务器(或随机,或交替,...)

  • 如果您小心,您可以根据当前负载自动移动文件。因此,如果您的可爱小猫图像被硬编码/斜线扫描,请将其移至负载最低的服务器并更新条目。
    你可以用一个cron-job做到这一点。只记录最后xx分钟的下载。尝试一些公式(每分钟下载 filesize (服务器负载的产品))进行加权。选择增加/减少这些文件分发到的服务器数量的阈值。

  • 如果你添加一个新的服务器,那就相对无痛(只需将地址添加到服务器池中)

<强>缺点:

  • 自制软件解决方案总是存在风险

  • 您的负载分配算法必须经过充分测试,否则可能会发生不好的事情(到处都是镜像)

  • 不断移动文件以进行平衡会增加额外的服务器负载

*或使用混合加权算法:自由空间,服务器加载,文件受欢迎程度

免责声明:我自己从未见过这种情况,只是猜测。

答案 4 :(得分:0)

考虑HDFS,它是Apache的Hadoop的一部分。这将与PHP集成,但您将设置第二个应用程序。当文件空间使用超过一台服务器的能力时,这也将解决服务器和处理事务之间的所有平衡点。不过,这不仅仅是在PHP中,但我不认为这就是你说“纯粹”时的意思。

请参阅http://hadoop.apache.org/core/docs/current/hdfs_design.html了解它的想法。它们涵盖了如何处理大型文件,许多文件,复制等的整个想法。