Назад | Перейти на главную страницу

Какое оборудование веб-сервера вы используете для обработки статических файлов со скоростью 100 Мбит / с?

В настоящее время я использую Amazon S3 для большинства моих потребностей в обслуживании статических файлов, но мой ежемесячный счет становится очень дорогим. Я сделал некоторые приблизительные вычисления с использованием журналов, и в часы пик мой самый дорогой ведро Amazon обрабатывает около 100 180 Мбит трафика. В основном изображения менее 50К.

S3 очень полезен, когда дело касается хранилища и избыточности, но мне действительно не нужно платить за пропускную способность и запросы GET, если я могу помочь. У меня достаточно недорогой полосы пропускания в моем собственном центре обработки данных, поэтому я настроил сервер nginx в качестве кэширующего прокси, а затем загрузил в кеш большую часть моих файлов (около 240 ГБ), чтобы мой диск не писал как сумасшедший на пустой кеш.

Я попытался перерезать, и мой мой сервер задохнулся.

Похоже, проблема была в моих дисках - на этой машине установлено 4 диска SATA (Barracuda XT) по 1 ТБ (Barracuda XT) в RAID 10. Это единственное, что у меня было под рукой с достаточным объемом памяти для этого. Я почти уверен, что nginx был настроен правильно, поскольку я уже использовал его в качестве прокси-сервера для кеширования для другой, меньшей корзины Amazon. Предполагая, что это разумный объем трафика для одной машины, возможно, стоит попробовать SSD.

Если вы обрабатываете большие объемы статических файлов, какое оборудование вы используете?

Дополнительная информация

Файловая система: ext4, смонтированный noatime, барьер = 0, данные = обратная запись, nobh (у меня есть резервная батарея на контроллере) Nginx: worker_connections = 4096, worker_rlimit_nofile 16384, worker_processes 8, open_file_cache max = 100000 неактивен = 60 м

Ваш. Диски. Сосать. Точка.

  • Старайтесь покупать больше и намного быстрее дисков. SAS отлично подходит здесь, как и велоцирапторы.

  • Тем не менее, лучше всего получить ... SSD.

Ваши диски, вероятно, производят около 200 операций ввода-вывода в секунду каждый. С SAS вы можете получить это примерно до 450, с Velocidaptors примерно до 300. Высококлассный SSD может дать вам ... 50 000 (без шуток - я действительно имею в виду 5 0 0 0 0 0 0) IOPS.

Посчитайте;) Один SSD без RAID был бы примерно в 62 раза быстрее, чем ваш Raid 10;)

Я не думаю, что проблема в вашем диске. Сначала ncache nginx использует дисковое хранилище для кеширования. Таким образом, скорость диска будет одной из потенциальных причин проблем в зависимости от того, насколько горячий / холодный ваш набор данных, однако я не вижу причин, по которым вы не могли бы обслуживать 100 МБ / с с упомянутым оборудованием, особенно если вы повторно используете nginx.

Первое, что я могу предположить, это то, что количество ваших рабочих процессов было низким, ваши worker_connections, вероятно, были слишком низкими, и вы, вероятно, не установили достаточно высокий open_file_cache. Однако ни одна из этих настроек не вызовет ни большого ожидания ввода-вывода, ни подобного всплеска. Вы говорите, что обслуживаете <50k изображений, и похоже, что 1/4 вашего набора может быть легко буферизована ОС. Конечно, Nginx настроен не оптимально.

Varnish решает проблему несколько иначе, используя оперативную память, а не диск для кеширования.

Многое зависит от вашего набора данных, но, основываясь на данных, которые вы предоставили, я не вижу причин для такого всплеска ввода-вывода диска. Вы проверяли dmesg и журналы, чтобы узнать, не возникало ли на одном из ваших дисков ошибок ввода-вывода в то время? Единственное, что, как мне кажется, могло вызвать этот всплеск, - это превышение файлового кеша nginx, что привело бы к переходу в режим FIFO, открывающему новые файлы.

Убедитесь, что ваша файловая система смонтирована с noatime, что должно значительно сократить количество операций по списанию с вашей рабочей нагрузки.

В качестве примера машины, которая регулярно обрабатывает 800 МБ / с:

# 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

MRTG:

http://imgur.com/KYGp6.png

Набор данных:

# du -sh ads
211.0G  ads

# ls|wc -l
679075

Мы обслуживаем около 600 Мбит / с на сервере с твердотельными накопителями на внутренней стороне и nginx + varnish на передней панели. Фактический процессор - это маленький Intel Atom; у нас есть четыре из них за LB со скоростью 600 Мбит / с каждый (с использованием DSR). Возможно, не для каждой ситуации, но он идеально подходит для нашего случая использования.

Добавьте еще дисков. Вы можете торговать скоростью одного диска с количеством дисков (до определенного момента): возможно, вы можете получить ту же производительность с X дорогими дисками SAS 15kRPM или (предполагая, не значащие значения) X * 2 дешевыми дисками SATA 7k2RPM. Вы должны посчитать и посмотреть, что лучше для вас - и это также зависит от того, сколько вы платите за место в стойке и мощность в вашем центре обработки данных.

SSD обеспечит вам все необходимое количество операций ввода-вывода в секунду, но они недешевы для массового хранения (поэтому их основным вариантом использования является база данных, подобная рабочим нагрузкам).

Достаточно ли оперативной памяти на используемом вами компьютере для кэширования рабочего набора файлов в ОЗУ?

А еще - вы смотрели что-нибудь вроде Varnish? Nginx отлично подходит для обработки множества подключений, но не на высшем уровне с точки зрения кеширования и производительности системы.