Сейчас я обслуживаю видео конференций через Nginx на 3 серверах; 4 ядра, достаточно памяти (без подкачки) и RAID-10 с 8 дисками на сервер. К сожалению, iostat -xd 1 дает мне 100% на всех 3 серверах, а iotop показывает, что Nginx ест эти 99-100%.
Я думал о распределенных ФС (но какую и поможет ли?); какие-либо другие способы предотвратить это без простой покупки новых серверов (со всеми накладными расходами ...)?
Обратите внимание, что видео невозможно уместить в памяти; их слишком много, и они слишком велики. В раздаче тоже нельзя класть в память всего несколько.
Моя работа заключается в создании крупных (> 1 млн пользователей) коммерческих систем VoD, и если вы не можете использовать многоадресную / произвольную передачу и не использовать CDN, у вас есть только один вариант - масштабировать ваши системы хранения и сети для обработки максимального количества одновременных операций ввода-вывода. нагрузка вам нужна.
Конечно, локальное кеширование, как вы уже слышали, может помочь, но я всегда настраиваю наши стримеры так, чтобы предполагать нулевое кеширование. Очевидно, что наши варианты использования будут другими, но если у вас сравнительно небольшой каталог видео, вы можете подумать о размещении своего контента либо на томах на основе SSD и / или на флэш-накопителях на основе PCIe, таких как комплект FusionIO (есть и другие производители такого типа. в наши дни, но поскольку ФИО были первыми на блоке, я знаю их лучше всех и доверяю им). Когда мы создали мою первую значительную платформу такого типа, мы в конечном итоге использовали буквально десятки тысяч 72 ГБ 2,5-дюймовых дисков SAS просто для того, чтобы обеспечить достаточную возможность произвольного чтения, потому что это то, что вам нужно, логика говорит, что вам будет все равно о последовательной производительности, потому что видеоконтент - это просто большие файлы, но когда у вас есть так много людей, воспроизводящих разные видео с разных начальных точек, этот тип кеширования в значительной степени выходит за рамки окна, вам нужна лучшая производительность случайного чтения, которую вы можете получить. Также важно убедиться, что у вас может быть максимально эффективный путь от диска к сетевому порту, нет простого способа оптимизировать его, кроме понимания ваших дисков / контроллеров / шин / сетевых адаптеров и драйверов.
Кстати, изменения файловой системы вряд ли решат эту проблему.