Как закешировать много мелких файлов на диск?

Ситуация. Есть сервис для просмотра видео. Трафик где-то 6 гбит/с. Контент - файлы размером до 4 мб.
Есть 5 промежуточных серверов которые пропускают через себя трафик с основного хранилища. Трафик около 1.5 гбит/с. На промежуточных серверах стоят ssd в рейд 0, ёмкость около 1.7 Тб на каждом.
Задача - закешировать часть контента.
Проблема. При одновременной записи в кеш и чтение с кеша начинаются тормоза при просмотре видео с этого промежуточного сервера.
Вопрос. Как организовать кеш на дисках чтобы тормозов не было? Замечено что тормоза появляются только при одновременной записи и чтении с диска. Если только писать на диск или только читать с диска тормозов при просмотре нет.
Как решить эту задачу?
Тормозов нет так же если использовать varnish с кешем в ram. Но это не вариант. Нужен именно кеш на дисках.
Какое еще может быть решение?
  • Вопрос задан
  • 1323 просмотра
Пригласить эксперта
Ответы на вопрос 2
sgjurano
@sgjurano
Разработчик
А насколько высокий iowait на ваших машинках?

Вообще, отвечать с диска — не слишком удачная идея, лучше всего будет держать в памяти второй уровень кэширования, тогда вы сможете отвечать на существенную часть запросов вообще не трогая дисковую подсистему.

Для справки:
SSD latency ~ 1 ms
RAM latency ~ 100 ns
SSD throughout ~ 1Gb/sec
RAM throughout ~ 10Gb/sec
Ответ написан
Комментировать
@ZIM555 Автор вопроса
Спасибо за информацию. Сейчас работает varnish с кешем в ram. Но даже с 20gb кеша на 5 серверах даёт выигрыш в трафике около 20 Мбит/с с каждого сервера в лучшем случае. Nginx на файлах выдавал до 120 Мбит/с.

Вопрос как организовать это чтобы часть Кеша была в памяти а часть на диске?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы