В настоящее время я использую 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:
Набор данных:
# 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 отлично подходит для обработки множества подключений, но не на высшем уровне с точки зрения кеширования и производительности системы.