Настройка nginx для отдачи популярных файлов с SSD

Друзья, ломаю голову над несколько не тривиальной задачей.
Суть: есть файлообменник. Storage-серверы укомплектованы SSD-дисками. Есть план складывать на SSD часто запрашиваемые файлы и отдавать их с них. Подсчетом популярности файлов, копированием и удалением уже не популярных (размеры SSD, увы, ограничены) будет заниматься скрипт в автоматическом режиме.

Проблема — если скрипт сработал и удалил файл в момент того, когда его кто-то скачивает, соединение оборвется с ошибкой.

Наведите на мысль, как реализовать механизм временных локов активных файлов на удаление, либо, может быть, есть какой-то магический способ заставить nginx искать файл в другом location'е (с HDD) при его исчезновении из текущего места? Последнее, конечно, звучит больше как сказка, но мало ли…
  • Вопрос задан
  • 3132 просмотра
Пригласить эксперта
Ответы на вопрос 5
@Thomas
>Проблема — если скрипт сработал и удалил файл в момент того, когда его кто-то скачивает, соединение оборвется с ошибкой.

Не оборвется так как в Linux файл будет обращаться через открытый дескриптор файла. Легко проверить, если поставить слушать файл и потом его удалить (речь про ext системы), так вот плеер будет спокойно играть дальше трек, и только при повторном обращении выдаст ошибку о том что файл не найден.
Ответ написан
mgyk
@mgyk
Не совсем красивый вариант, зато будет быстрым и автономным.
Суть в том, что нужно два nginx.
nginx1 делает proxy_cache и складывает файлики на ssd по мере необходимости
nginx2 отдает файлики первому с hdd

После наполнения кэша у вас постоянно будут наиболее актуальные фаила в кэше, менее актуальные будут из него временами вылетать.

Для вашего варианта, можно сделать с try files и rewrite на тот локейшн который отдает с hdd
Ответ написан
@bondbig
Рекомендую по вопросам настройки nginx обращаться непосредственно в официальный список рассылки. Там максимальная концентрация весьма компетентных в данном вопросе людей, в т.ч. и сам автор часто отвечает. Получите максимально верный вариант.
Ответ написан
Комментировать
@IgorStepin
Вы уверены, что соединение оборвется с ошибкой? Если Линукс, то он открытые файлы (например, видео) после удаления продолжают работать (проигрываться, до закрытия файла, видимо), насколько помню. Так что, возможно, проблемы просто нет.
Ответ написан
nginc.conf
Включам кеш
proxy_cache_path /mnt/tmp/cash levels=1:2 keys_zone=cache:1m max_size=200M;
proxy_temp_path /mnt/tmp 1 2;
соответственно прописываешь в локейшене что и как кешировать
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы