Как удалять файлы с сервера по условию, что они не используются в текущий момент?
Здравствуйте!
Такая ситуация - есть сайт event-агентства, на котором можно смотреть видео с различных мероприятий.
Агентство довольно крупное, монополист в своем городе и видео копятся очень быстро. Сейчас они решили размещать все видео на своем Яндекс.Диске, на хостинге 50Гб не хватает, больше покупать не хотят.
Файлы на диске хранятся в архивах.
Недавно я написал такой простой функционал: при открытии страницы какого-то события, PHP-скрипт проверят есть ли файлы события в специальной папке на сервере, если нет, то с помощью API Яндекс.Диска скачивается и распаковывается архив на сервере, формируется плейлист из видео данного события и юзер может их смотреть. Если файлы есть, то просто формируется плейлист.
В среднем видео одного события весят по 1.5-2Гб, не меньше. Т.е. если одновременно заходят посмотреть порядка 20 человек, то место заканчивается.
Я написал еще один скрипт и добавил его в cron, который запускается раз в сутки и удаляет файлы старше 12 часов. Решение так себе.
Подскажите пожалуйста как можно улучшить этот момент. Чтобы, условно, если страница события была закрыта и на ней нет больше активных юзеров, то удалять скачанные файлы. Думал ковырять в сторону WebSocket, но пока не было опыта с данной технологией.
Заранее спасибо за подсказки.
Дополнительно:
TheAndrey7, не поверите, но я им об этом говорил в прямом смысле так "Вы придумываете велосипед", но руководство у них упертое.
Что характерно, им даже не нужен какой-то серьезный хостинг или облака - сервер с хранилищем можно поставить буквально у местного провайдера. Или даже у себя же в офисе, купив белый айпишник и обеспечив нормальный канал. Тянуться-то до него будут только местные же.
В среднем видео одного события весят по 1.5-2Гб, не меньше. Т.е. если одновременно заходят посмотреть порядка 20 человек, то место заканчивается.
Причем тут место? Если 1.5-2G, то видео занимает 1.5-2G — почему место заканичвается? 🙂
залейте в Yandex.Cloud Object Storage и через CDN отдавайте, точнее CDN сам будет отдавать, там сам на лету транскодинг (стрим делать под скорость интернета) будет делать... Оплата будет только за просомтренный ресурс.
Сервис полностью совместим с AWS S3, так что с библиотеками вообще никаких проблем — все есть и все стабильное
Т.е. если одновременно заходят посмотреть порядка 20 человек, то место заканчивается
Вы один и тот же архив для каждого зрителя качаете что-ли?
Но вообще тут конечно всего можно ожидать.
Или почта для домена. Хотя я хз там пространство общее или каждому что-то да выделяют.
В таких условиях надо делать вытесняющий кэш.
Если при запросе нового файла выясняется, что для него нет места, то удаляется самый старый файл.
Хотя конечно непонятно, как это всё поможет в ситуации, когда заходят посмотреть сразу 20 разных событий.
- Спасибо решил задачу с помощью WebSocket и уговорил таки докупить места
А вот что выглядит вкусным
https://github.com/jack-theripper/yandex
Сначала я думал что это жесткий REST-api, в котором есть "дай список", "закачай", "отдай" и "удали". Но там лежит вкусная папка Stream.... где есть метод "считать несколько байт прямо с диска".
Вот если они продолжат в архиве класть 5 видео, а не в папке, то этот функционал вам недоступен и вы в тупике. Но если это будут видеофайлы, то вы можете открывать соединение с яндекс диска через страницу на вашем сайте, где заголовками отдавать что "получаемый файл есть видео, и content-length неизвестен". В теории подрубившись плеером к этому стриму вы внезапно сможете считывать его по чуть-чуть, в результате будете ограничиваться уже толщиной канала и оперативной памятью, куда будут временно выгружаться данные по кускам, а не жестким диском.
Но я не проверял, работает ли это вообще, а с видео давно бы уже пора мне научиться работать.
По сути это вытесняющий кеш и будет как сказал Ипатьев. Но это будет кеш который в моменте хранит только например 8килобайт на юзера.
А если вы как и сказали - подключите сюда еще сокеты (не веб-сокеты, а просто сокеты, tcp например), то вы еще и предотвратите отдачу целого фильма в скрипте даже если пользователь перестал смотреть. Вы просто в шаге цикла while () сможете проверять - есть ли кому контент слать. И если некому то прекращаете чтение.
- Круто, спасибо, ознакомлюсь. Пока решили задачу с помощью WebSocket
Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.
Оставить комментарий Отменить
Ответы
- Есть ответ! к записи Как уменьшить масштаб меньше 100% в Windows 10 (22H2)
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Как называется человек, который дизайн придумает для сайта и сверстает его?
- Есть ответ! к записи Можно ли установить Яндекс.Диск на АльтЛинукс?
- Есть ответ! к записи Картинки мутные только на сафари, есть выход?
- Есть ответ! к записи Keenetic. Как настроить SSTP клиент с сертификатом?
- Есть ответ! к записи Чем заменить executor в aiogram 3?
Для удаления файлов с сервера по условию, что они не используются в текущий момент, можно воспользоваться следующим подходом:
1. Необходимо просканировать все файлы на сервере и определить, какие из них не используются. Для этого можно написать скрипт на PHP, который будет анализировать дату последнего доступа к файлу или другие метаданные.
2. После определения неиспользуемых файлов, можно создать скрипт, который будет удалять их. Например, можно использовать функцию unlink() в PHP для удаления файлов.
Пример кода на PHP для удаления файлов с сервера по условию:
Пожалуйста, учтите, что перед выполнением подобных операций на сервере необходимо быть уверенным в том, что файлы действительно не используются, чтобы избежать случайного удаления нужных данных. Также рекомендуется делать резервное копирование файлов перед удалением.
Для удаления файлов с сервера по условию, что они не используются в текущий момент, можно использовать различные методы и инструменты в зависимости от того, какой сервер вы используете и какая операционная система на нем установлена. В данном ответе я рассмотрю несколько общих подходов к решению этой задачи.
1. Анализ использования файлов:
Прежде чем удалять файлы, необходимо провести анализ использования файлов на сервере. Для этого можно воспользоваться утилитами, которые могут отслеживать активность файлов, такими как lsof (list open files) или fuser (file user). Эти утилиты помогут определить, какие процессы используют конкретные файлы в данный момент.
2. Планирование удаления файлов:
После того как вы определили неиспользуемые файлы, можно запланировать их удаление. Для этого можно написать скрипт на bash, python или другом языке программирования, который будет периодически проверять, какие файлы не используются, и удалять их при необходимости. Например, можно использовать cron (для Unix-подобных систем) или Task Scheduler (для Windows) для запуска скрипта удаления файлов по расписанию.
3. Использование инструментов для автоматизации удаления:
Существуют специальные инструменты для автоматизации удаления файлов на сервере, такие как Ansible, Puppet, Chef и другие. Они позволяют настраивать и управлять серверами с помощью кода, что упрощает процесс удаления неиспользуемых файлов.
4. Резервное копирование файлов перед удалением:
Прежде чем удалять файлы, рекомендуется сделать их резервное копирование. Таким образом, вы сможете вернуть удаленные файлы в случае их случайного удаления или ошибки.
5. Удаление файлов с помощью командной строки:
Если вы предпочитаете использовать командную строку для удаления файлов, то для этого можно воспользоваться командами rm (для Unix-подобных систем) или del (для Windows). Однако перед выполнением этих команд убедитесь, что файлы действительно не используются, чтобы избежать удаления важных данных.
6. Мониторинг использования файлов:
Для предотвращения удаления активно используемых файлов можно настроить мониторинг использования файлов на сервере. Существует множество инструментов для мониторинга файловой системы, такие как Nagios, Zabbix, Prometheus и другие, которые позволяют отслеживать активность файлов и предупреждать о возможных проблемах.
Итак, удаление файлов с сервера по условию, что они не используются в данный момент, может быть решено с помощью анализа использования файлов, планирования удаления, использования инструментов для автоматизации, резервного копирования, командной строки и мониторинга использования файлов. Надеюсь, что эти подходы помогут вам правильно и безопасно удалять неиспользуемые файлы с сервера.