Добрый день! Проектирую систему по декодированию видео, суть простая - принимаем файлы от пользователей (web контейнер), складываем в очередь (распределенная база/хранилище), менеджер-контейнер мониторит очередь и запускает длительные процессы энкодинга используя FFMPEG.
Вопросы:
1. стоит ли запускать FFMPEG работу в отдельном контейнере или запускать в контексте менеджера очереди (но при этом если его надо обновить, то придется убить все его текущие FFMPEG процессы, что плохо, их может быть много)?
2. если использовать FFMPEG-контейнер, как можно обновлять его без останова текущих задач? [нельзя так просто грохнуть работащие задачи по энкодингу и перезапустить снова, т/к завязано на внешний стримминг сервер]. В идеале - работающие сейчас FFMPEG- контейнеры не трогать, обновлять-перезапускать их после окончания их текущей работы.
2) В идеале - поднять балансировщик нагрузки. Если надо выключить контейнер - трафик перенаправляется из этого контейнера, задачи завершаются, контейнер убивается.
1) Я бы разделил.
Сергей Попов, да балансировщик это следующий этап (мониторит сколько в очереди, запускает дополнительные экземпляры контейнера-энкодера), важно понять как "гладко" обновлять FFMPEG контейнеры, не прерывая их текущую работу.
Спасибо.
При поступлении джобы поднимайте контейнер, который выполнив свою джобу будет умирать (флаг --rm). Таким образом вы можете заканчивать джобу на старой версии и обрабатывать следующую уже в обновленной версии контейнера.