您使用什么样的网络服务器硬件来处理 100 Mbps+ 的静态文件?

您使用什么样的网络服务器硬件来处理 100 Mbps+ 的静态文件?

我目前使用 Amazon S3 来满足大部分静态文件服务需求,但我的月度账单变得非常昂贵。我使用日志做了一些粗略的计算,在高峰时段,我最昂贵的 Amazon 存储桶处理大约100180 Mbps 的流量。大部分是 50K 以下的图像。

S3 在存储和冗余方面非常有用,但如果可以的话,我实际上不需要为带宽和 GET 请求付费。我自己的数据中心有足够的廉价带宽,因此我将 nginx 服务器配置为缓存代理,然后用我的大部分文件(约 240 GB)填充缓存,这样我的磁盘就不会在空缓存上疯狂写入。

我尝试切换,我的我的服务器瘫痪了

看起来问题出在我的磁盘上 - 这台机器有 4 个 1 TB SATA 磁盘(Barracuda XT),设置成 RAID 10。这是我手头上唯一有足够存储空间的东西。我很确定 nginx 设置正确,因为我已经将它用作另一个较小的 Amazon bucket 的缓存代理。假设对于单台机器来说,这是一个合理的流量量,也许 SSD 值得一试。

如果您处理大量静态文件服务,您会使用什么硬件?

附加信息

文件系统:ext4,已安装 noatime、barrier=0、data=writeback、nobh(我在控制器上有电池备份)Nginx:worker_connections = 4096、worker_rlimit_nofile 16384、worker_processes 8、open_file_cache max=100000 inactive=60m

答案1

我认为问题不在于你的磁盘。首先,nginx 的 ncache 使用磁盘存储进行缓存。因此,磁盘速度可能是导致问题的一个潜在原因,具体取决于你的数据集有多热/多冷,但是,我认为没有理由你不能用你提到的硬件提供 100mb/秒的服务 - 特别是如果你使用 nginx。

我首先想到的可能是您的工作进程数太少,您的 worker_connections 可能太低,并且您的 open_file_cache 可能设置得不够高。但是,这些设置都不会导致高 IO 等待或类似的峰值。您说您正在提供 <50k 个图像,并且看起来您的设置中的 1/4 很容易被操作系统缓冲。Nginx 肯定没有最佳配置。

Varnish 以稍微不同的方式处理该问题,它使用 RAM 而不是磁盘作为缓存。

这很大程度上取决于您的数据集,但根据您提供的数据,我看不出磁盘 IO 出现如此峰值的任何原因。您是否检查过 dmesg 和日志以查看您的某个驱动器当时是否遇到了一些 IO 错误?我能想到的可能导致该峰值的唯一其他原因是超出了 nginx 的文件缓存,这将导致它必须进入 FIFO 模式来打开新文件。

确保您的文件系统已使用 noatime 安装,这应该可以减少您工作量的大量写入操作。

以定期处理 800mb/秒的机器为例:

# uptime
 11:32:27 up 11 days, 16:31,  1 user,  load average: 0.43, 0.85, 0.82

# free
             total       used       free     shared    buffers     cached
Mem:       8180796    7127000    1053796          0       1152    2397336
-/+ buffers/cache:    4728512    3452284
Swap:      8297568     237940    8059628

Quadcore Xeon:
    Intel(R) Xeon(R) CPU           X3430  @ 2.40GHz

$ ./bw.pl xxx.xxx 2010-09-01 2010-09-30
bw: 174042.60gb

average 543mb/sec, peaks at 810mb/sec

=== START OF INFORMATION SECTION === Model Family:     Seagate Barracuda
7200.12 family Device Model:     ST3500418AS Serial Number:    6VM89L1N
Firmware Version: CC38 User Capacity: 
500,107,862,016 bytes

Linux 2.6.36-rc5 (xxxxxx)   10/04/2010  _x86_64_    (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           4.33    0.00    2.40    5.94    0.00   87.33

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda             109.61     19020.67       337.28 19047438731  337754190

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           8.09    0.00    3.40   10.26    0.00   78.25

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda             138.52     21199.60       490.02     106210       2455

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.74    0.00    3.25    9.01    0.00   84.00

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda             125.00     21691.20       139.20     108456        696

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           4.75    0.00    3.12   14.02    0.00   78.11

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda             154.69     19532.14       261.28      97856       1309

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           6.81    0.00    3.36    9.48    0.00   80.36

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda             112.80     17635.20       309.00      88176       1545

磁共振成像仪:

https://i.stack.imgur.com/CRqPi.png

数据集:

# du -sh ads
211.0G  ads

# ls|wc -l
679075

答案2

你的光盘很差劲。

  • 尝试获取更多、更快的光盘。SAS 在这里表现很好,就像迅猛龙一样。

  • 话虽如此,最好的办法是获得...一块 SSD。

每个磁盘的 IOPS 可能约为 200。使用 SAS 时,IOPS 可以达到约 450,使用 Velocidaptors 时,IOPS 可以达到约 300。高端 SSD 可以达到... 50,000(不是开玩笑 - 我的意思是 5 0 0 0 0 0 0)IOPS。

算一下 ;) 单个 SSD(无 RAID)的速度大约是 Raid 10 的 62 倍 ;)

答案3

我们在后端使用 SSD 的服务器上提供大约 600 Mbps 的服务,前端使用 nginx+varnish。实际的处理器是一个小型 Intel Atom;我们在 LB 后面安装了四个这样的处理器,每个处理器的速率为 600 Mbits/秒(使用 DSR)。也许并不适合每种情况,但它非常适合我们的用例。

答案4

添加更多磁盘。您可以用磁盘数量(达到一定程度)来换取单个磁盘速度:也许您可以使用 X 个昂贵的 SAS 15kRPM 磁盘或使用(猜测,无意义的值)X*2 个便宜的 SATA 7k2RPM 磁盘获得相同的性能。您必须进行计算,看看哪种方式更适合您 - 这也取决于您在数据中心支付多少机架空间和电力。

SSD 将为您提供所需的所有 IOPS,但对于大容量存储来说它们并不便宜(这就是为什么它们的主要用例是数据库等工作负载)。

相关内容