为服务中度写nginx的使用1GB的文件,最好的文件系统,读取性能明智?(Best file sys

2019-07-30 04:36发布

我要建大型文件服务器,并且需要堆栈溢出社区咨询文件系统选择(Linux版)。

文件服务器将服务1-2GB大小的静态文件的Nginx通过(主要是每个请求不同)下,在恒定中等写入磁盘(RAID5 SATA / 7200磁盘大规模)。 写入读比为约1:5-10,对于每秒写入每1个字节,5-10被读取。 最重要的我是读性能,我可以写入速度较慢生活。

什么Linux的文件系统将是这个任务的最佳解决方案? 为什么:)谢谢!

Answer 1:

为用户提供服务重内容最好的结果,有调别的东西。 请看看Nginx的核心开发者的评论如下:

  1. 关闭sendfile的 ,这是由于没有能力控制预读(从磁盘读取,因此块)工作在linux下这样的工作量坏。

    SENDFILE关闭;

  2. 使用大输出缓冲器

    output_buffers 1个512K

  3. 尝试使用AIO,以确保更好的磁盘并发性(和linux下的注意,它需要的directio为好),即是这样的

    AIO上; DIRECTIO 512;

其它建议:

  1. 检查文件系统交换,不使用

  2. 文件系统 - EXT4,XFS。 好让data_writeback和noatime挂载选项



Answer 2:

我实现了每个“真正的”磁盘(主轴)“随机读取”性能80MB /秒。 这里是我的发现。

因此,首先决定你需要多少流量向下推至用户,有多少存储你每台服务器需要。

您可以跳过下面给出既然你已经有了一个RAID5安装盘安装建议。

让我们用3个* 2 TB磁盘专用1Gbps的带宽服务器的一个例子。 保持第一盘致力于OS和TMP。 对于其他2个磁盘您可以创建一个软件RAID(对于我来说,它的工作比板载硬件RAID更好)。 否则,你需要在独立磁盘平分你的文件。 想法是保留两个磁盘共享的读/写负载平分。 软件RAID-0是最好的选择。

Nginx的CONF有实现的使用nginx的性能较高水平两个方面。

  1. 使用的directio

    AIO上;
    DIRECTIO 512; output_buffers 1个8米;

    “这个选项会要求你有公羊良好的金额”大约需要RAM的12-16GB。

  2. 用户级IO

    output_buffers 1个2M;

    “确保您已设置预读以4-6MB软件RAID安装” blockdev看看-setra 4096的/ dev / md0的(或独立磁盘安装)

    此设置将优化使用系统文件缓存,并需要更少的内存。 大约需要RAM的8GB。

常见的注意事项:

  • 保持“SENDFILE关闭;”

你可能还喜欢使用带宽节流,以便能够在可用带宽连接的100S。 每个下载的连接将使用活动的公羊4MB。

        limit_rate_after 2m;
        limit_rate 100k;

上述两种溶液的比例将容易到1 k 3磁盘服务器上同时+用户。 假设你有1Gbps的带宽,每个连接在1Mb的/ ps的进行节流还有就是要优化磁盘需要额外的设置写入,而不会影响读取得多。

使所有上传到主操作系统磁盘上的挂载说/ tmpuploads。 这将确保没有间歇的干扰而沉重的读取,但事情。 然后使用从移动/ tmpuploads文件用的oflag =直接“DD”命令。 就像是

dd if=/tmpuploads/<myfile> of=/raidmount/uploads/<myfile> oflag=direct bs=8196k


Answer 3:

非常大的文件往往不是非常依赖于您所使用的文件系统,现代文件系统(即不胖!)做存储的大型连续块分配它们,从而减少寻道延迟的一个很好的工作。 在哪里你会看到它们之间的差异是小文件的性能,在外面的空间的情况下,并发等分裂性...存储大文件是比较容易的问题,我怀疑你会看到可测量的差异。

然而,总是:如果你真的关心,标杆。 大约有文件系统的性能没有简单的答案。



文章来源: Best file system for serving 1GB files using nginx, under moderate write, read performance-wise?