Project

General

Profile

Actions

Back-Feature #348

open

Создание микросервиса для загрузки видео, и обеспечение безопасности

Added by Алексей Подшиблов 2 days ago.

Status:
New
Priority:
Normal
Start date:
03/06/2026
Due date:
% Done:

0%

Estimated time:

Description

Мы создаём 3 отдельных микросервиса
Почему именно 3 и почему отдельно - каждый сервис выполняет свою функцию и изолирован от других. Если один упадёт или будет взломан, остальные продолжат работу.

  1. VideoService
    Отвечает за приём видео, работу с базой данных и отправку задач в очередь. Проверяет размер файла: если больше 20 МБ — сразу ошибка. Отдаёт статусы пользователю, обновляет записи после обработки.
    Живёт в отдельном контейнере, чтобы его логика не смешивалась с обработкой видео и антивирусом.
  2. FFmpeg
    Отвечает за потоковую проверку видео. Когда видео приходит в VideoService, оно сразу направляется сюда, без сохранения на диск. FFmpeg анализирует заголовки и структуру файла, проверяет формат H.264 MP4, разрешение 480p, наличие дорожек. Здесь же, в потоке, чистит метаданные - удаляет всё, куда можно спрятать вредоносный код.
    Если формат не тот или файл битый - сразу ошибка. Видео отбрасывается, даже не коснувшись диска.
  3. ClamAV
    Отвечает за проверку на вирусы. После успешной проверки FFmpeg видео направляется сюда. ClamAV сканирует файл в потоке, также без сохранения на диск. Если находит заразу - видео отбрасывается, статус blocked. Если чисто — даёт добро на сохранение.

Видео приходит в VideoService
1 VideoService отправляет его в FFmpeg 
2 Если всё ок — VideoService кидает задачу в очередь для ClamAV
3 ClamAV проверяет вирусы и возвращает результат
4 VideoService сохраняет видео в MinIO и меняет статус на ready
5 Пользователь получает ссылку

@messagepattern('some.queue') вот что мы используем для связи видео сервиса для потоковой обработки

как это работает
сервис А получает документ, отправляет сервису Б потом если тру возвращает сервису А , тот отправляет сервису С и если тру возвращает сервису А

Videoservis всем рулит, он находится в сети с ffmpeg v clamav, последние два друг о друге не знают, они находятся в очереди

транскодируем видео в таком формате

видео будет храниться в формате H.264 MP4 - Разрешение давай 480p, потому что на экране телефона этого достаточно для комфортного просмотра, а размер файла остаётся маленьким. Битрейт видео установили в 1 мегабит в секунду - этого хватает для 480p, и за 2 минуты видео занимает около 15 мегабайт. Аудио сжимаем до 64 килобит в секунду в кодеке AAC -голос звучит чисто, музыка приемлемо, а весит это всего 1 мб за 2 минуты. Частота кадров 30 в секунду - достаточно плавно и в два раза легче, чем 60. В итоге 2 минуты видео укладывается примерно в 16.5 мб, что с запасом входит в наш лимит 20 мегабайт

No data to display

Actions

Also available in: Atom PDF