Конфигурация отдает большие файлы и отдает неплохо. Выжимали 1.5
гигабита (500-1000 соединений) и можно было больше, да не требовалось.
Все работает хорошо, до тех пор пока утилизация жестких дисков не
достигает 100%. Как только появляется популярный файл, на который
нападают 100-200 активных клиентов, жесткий диск, на котором он лежит
- умирает. При этом отдача снижается почти на порядок (в реальном
случае с 1.3 гбит до 200 мегабит) хоть и остальные 19 жестких дисков
не нагружены.
I/O с перегруженного диска медленно => блокировки воркеров => тормоза
других клиентов, которые работают со свободными жесткими дисками =>
снижение отдачи трафика. При этом load average взлетает до 100 и выше.
По-моему ничего, кроме ускорения дисковой подсистемы сделать нельзя.
gmirror, mdraid (raid10), популярные файлы в tmpfs, SSD (в порядке
увеличения предпочтения) могут помочь.
Если у кого-то есть мысли буду рад выслушать.
Над каждым диском свой nginx. Снаружи балансер, знающий на какой из этих
nginx'ов нужно проксировать/редиректить любой запрос.
X-воркеров на N-дисков + хитрый балансировщик, который знает где какие
файлы лежат - сложно все это. Самое лучшее, конечно, это если бы в
nginx появился полноценный aio.