Lustre、Gluster还是MogileFS?用于视频存储、编码和流媒体?

28
  • 性能: 对于小文件(<1GB)表现良好,对于大文件性能较差。
  • POXIS兼容性:非常好!不需要修改应用程序就可以使用MogileFS。
  • 复制、负载均衡和故障转移:一般。MogileFS有内置的复制和负载均衡机制,但是故障转移需要依赖其他软件。
  • 安装:非常简单!只需要通过Yum安装相应的RPM软件包即可。
  • Gluster:
    • 性能:取决于工作负载,通常比Lustre略慢。
    • FUSE开销:较高,但是易于部署和管理。
    • 扩展性:非常好!支持动态添加存储节点。
    • 复制、负载均衡和故障转移:非常好!Gluster有内置的复制和负载均衡机制,也支持自动故障转移。
    • 安装:非常简单!只需要通过Yum安装相应的RPM软件包即可。
  • 基于以上的经验教训,最终我选择了Gluster。它相对于Lustre来说更加容易部署和管理,而且在大部分情况下性能也能够满足我的需求。当然,具体选择哪个分布式文件系统还要根据自己的实际情况来进行权衡。

  • 性能:对于小文件而言表现良好,但对于中大型文件则不适用。这主要是由于 HTTP 的开销所致,因为所有文件都是通过 HTTP 请求发送/接收的,而且所有数据都使用base64编码,每个文件增加了33%的开销。
  • POXIX 兼容性不存在。所有应用程序都需要修改以使用 MogileFS,这使其在流媒体/编码方面变得无用,因为大多数流媒体服务器和编码工具都不了解 MogileFS 协议。
  • 复制和故障转移可以直接实现,负载均衡可以通过同时访问多个跟踪器来实现。
  • 安装相对容易,在大多数发行版中都有准备好的软件包可用。我唯一遇到的困难是将数据库设置为主从模式以消除单点故障。
    • Gluster:
  • 性能:对于流媒体而言非常糟糕。在10Gbps网络中,我无法达到超过几Mbps。在进行大量写入时,客户端和服务器CPU会飙升。对于编码工作而言,因为CPU饱和度在网络和I/O之前达到饱和状态。
  • POXIS:几乎兼容。我使用的工具可以像普通文件夹一样访问 gluster 挂载点,但在某些边缘情况下会出现问题。检查 gluster 邮件列表,您会发现有很多问题。
  • 复制、故障转移和负载均衡:最好的!如果它们真正起作用的话。Gluster非常新,存在很多错误和性能问题。
  • 安装过于简单。管理命令行非常出色,设置多个服务器之间的复制,条带化和分布式卷再容易不过了。
  • 最终结论:

    遗憾的是,结论是 "没有银弹"。

    目前我们将媒体文件存储在一个 Gluster3.2 的复制卷中进行存储和转码。只要您没有太多服务器,避免地理复制和条带化就可以正常工作。

    当我们将要流式传输媒体文件时,我们将其复制到一个通过 DR:DB 复制到第二个 lustre 卷中的 lustre 卷中。然后 wowza 服务器从 lustre 卷中读取媒体文件。

    最后,我们使用MogileFS在我们的Web应用程序服务器上提供缩略图。

    这并不是一个编程问题,也不应该在这里讨论。但是...我建议使用某种文件同步软件,比如unison、ifolder或rsync。由于文件并不是很大,它们可以存储在所有服务器上。在我看来,所有的集群文件系统都还没有完全成熟。 - mog
    1
    我认为它被称为Lustre... - Sean
    1
    Gluster在复制方面存在很多问题,它很容易出现错误。此外,卷修复也无法正常工作。 - Roman Newaza
    性能:适用于小文件,但对于中大型文件不可用。这主要是由于HTTP开销造成的,因为所有文件都通过HTTP请求发送/接收,将所有数据编码为base64,每个文件增加33%的开销。可以在HTTP中编码文件而不使用base64,我认为HTTP服务器很少使用base64。也许您测量错误了。最可能的瓶颈是在每个请求上使用HTTP标头,这对于大文件来说还好,但对于小文件来说非常糟糕。JSON-RPC 2.0甚至添加了有争议的批处理请求功能以解决此问题。 - vinipsmaker
    5个回答

    5
    GlusterFS在最近进行了大量的改进。他们现在为大文件提供“粒度锁定”。请参见这里:http://www.gluster.org/community/documentation/index.php/WhatsNew3.3。 此外,它也与视频帧速率有很大关联,如果您不需要4K速率,Gluster可以解决存储问题。如果需要更快的速度,则Infiniband可以发挥作用。

    2

    MogileFS非常适合这种情况。客户端库的质量略有不同,但如果没有使用任何语言访问它的大规模生产网站,我会感到惊讶。

    HTTP实际上是进行此类操作的良好协议。谁没有功能丰富和高效的HTTP客户端呢?


    2

    请了解Hadoop文件系统(HDFS)。它专注于处理非常大的文件和并行任务计算(使用map/reduce),虽然延迟较高但吞吐量非常高。目前在Facebook和amazon.com等大型安装中使用。


    1

    从这些系统中,最适合的是MoglieFS。

    但也许你可以不使用任何特殊的系统。比如说,你有4个AdobeFMS服务器:

    {video0.exmple.com,video1.exmple.com,video2.exmple.com,video3.exmple.com}.
    

    您可以使用简单的方案将所有视频分配到这4个服务器上,例如:
        /*
         *  pseudo code
         */
    
        $server_id = get_server_id(filename);
        ...
        ...
        int function get_server_id(filename) 
        { 
           return hash(filename) mod 4;
        }
    

    在你对视频进行编码之后,你的应用程序将会

    $server_id = get_server_id(file_name)
    copy file_name to /mnt/$server_id/
    

    客户端将使用类似于http://videoN.example.com/filename.mp4的东西来访问视频,其中N是使用get_server_id()从文件名计算出来的。

    Luster/Gluster并不是你应该寻找的。Luster FS更加成熟,但开发人员要求你将这种FS上的文件视为“缓存”,即它们随时可能丢失。

    Luster/Gluster旨在用于HPC中,以允许快速访问大量数据而无需单个存储服务器成为性能瓶颈。这些系统的另一个优点是它们符合POSIX标准。在HPC/科学研究环境中,通常没有时间浪费来重写你的应用程序,因为你安装了新的酷炫快速FS。


    那很好,直到其中一台服务器崩溃了。哎呀。 - Ask Bjørn Hansen
    除非采取特殊措施(即使在MoglieFS的情况下),服务器崩溃时都会发生“Oops”错误。此外,在上述设置中,“Oops”的含义将有所不同。如果4台服务器中的1台失败,则大约1/4的读/写请求将失败,直到从备份中恢复故障服务器。如果这种情况不可接受,那么使用rsync等工具相对容易地设置[只读]副本服务器。 - Konstantin Antselovich

    1

    Map-reduce对于90/10的写入/读取比率并没有帮助! 恒定的文件大小是一件好事,而且文件很小。 因此,MogileFS似乎是一个不错的选择,就像Luster/Gluster - 缓存情况并不合适。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接