Рубрики
Без рубрики

Дальнейшее масштабирование трубопровода небезопасного визуализации

Ранее я сделал немного расследования на масштабирование недолгого рендеринга Backend: … Помечено с Python, Serverless, IBMCloud, MQTT.

Ранее я сделал немного расследования на масштабирование недолгого рендеринга:

Стресс-тестирование неборочный трубопровод

Мэтт Гамильтон · июль 25 ’20 · 6 мин прочитать

Whireless – это боковой проект, на котором я работал на Вызов кода , это позволяет людям удаленно петь вместе как виртуальный хор.

Большой вопрос, было то, насколько хорошо могла бы неверная архитектура могла бы построить на функции облачных функций IBM (Apache Openwhisk) будет масштабироваться. Я имею в виду, в теории это должно быть бесконечно, верно? Но реальность – это функция имеет максимально допустимое время выполнения 10 минут. Мы поставили себе предел разрешения максимальных 10-минутных длинных песен. Так что это означает, что нам нужно иметь возможность делать каждую часть обработки в более быстерее, чем в реальном времени.

Большая часть тяжелой работы сделана с использованием FFMPEG Для выполнения фактического смешивания видео и аудио. Но сколько аудио и видео потоков мы можем войти в общей сложности?

Как оказывается, когда мы начали идти выше около 100 видео в параллели, то FFMPEG начал иметь проблемы. Я не уверен, был ли это FFMPEG или основные пределы, наложенные Linux или Openwhisk Environment, но в любом случае, когда он начал случайным образом просто повесить навсегда – пока не убил через 10 минут.

Поэтому я повторно архивализировал его, чтобы разбить видео на части для композиции. Главная дорогостоящая часть композирует все видео потоки вместе. Но так же мы попали в те же ограничения по ним с аудио.

Мы используем библиотеку JavaScript, написанную моим коллегой, Sean, называемой Boxjam организовать видео в сетку. Boxjam всегда организует строки в строке, поэтому вы всегда можете разделить видео горизонтально чисто.

Итак, я сломал процесс композиции в параллельные рабочие задачи. Каждая задача отвечает за композитую вместе одну строку видео или аудио. Поэтому, если есть 5 строк, то мы нерезим в общей сложности 10 акций OpenWhisk, по одному на ряд для каждого из аудио и видео. Затем у нас есть последний этап компоновки, в котором мы складываем все видео на вершине друг друга, смешайте аудио вместе и добавьте его обратно в конечное видео.

Видео промежуточного ряда транслируются до хранения объекта IBM Cloud (COS) для доступа конечного композитора. Что в свою очередь загрузки до окончательного полного рендеринга обратно к COS.

Для того, чтобы отслеживать ход каждой из этапов и визуализировать его, мне нужен способ сообщить о ходе каждого этапа. Я решил использовать MQTT В качестве протокола к этому, как это легкий, доступный в Python, так и в JavaScript, и мы можем использовать либо публично доступные брокеры, либо вместо нашего собственного. Я подробно подробноe фактический код для публикации и подписки к сообщениям MQTT в другом сообщении в ближайшее время, но просто привести пример того, как легко опубликовать сообщение MQTT:

msg = {'choir_id': choir_id,
       'song_id': song_id,
       'stage': stage,
       'status_id': str(uuid.uuid4())
}
publish.single(
      f'choirless/{choir_id}/{song_id}/renderer/{stage}',
      json.dumps(msg),
      hostname='mqtt.eclipse.org',
      port=1883
)

Затем я писал ноутбук Python в IBM Watson Studio, чтобы подписаться на следующее сообщение во время прогона и создать диаграмму с Алтарь . Я не столкнулся с Альтаир раньше, но это позволило мне сгенерировать слегка приятных графиков, которые простой matplotlib. .

Так как это делать? Ниже приведены некоторые участки и связанные с ними скриншоты окончательного выхода.

Желтая подводная лодка

Это была наша «альфа-» производительность для неберее, прежде чем мы представили наш вход на звонок для кода. Он состоит из 16 частей случайных людей, которые присоединились. Это 1 минута 52 секунды длиной.

Глядя на диаграмму, которую вы можете увидеть начальный Renderer-Compositor-Main действие в начале. Это несет ответственность за разработку, сколько дочерних действий устрелятся и выделить их каждый ряд для работы. Вы можете увидеть, что есть четыре детских аудиообрабатывающих детей и четырех детей в видеообращении. Аудио намного быстрее смешивать вместе для каждой строки, чем видео. Это ожидается как композитное видео требует обработки гораздо больше данных. Как только дети закончится, вы видите Рендер-финал Начните и работает около 42 секунд. Весь процесс завершен примерно через 91 секунд.

Мечты

Это мой коллега, глинн, играющий «мечты» Fleetwood Mac. Он платит все шесть частей сам. Это было самое длинное видео в нашем тесте, всего за четыре минуты.

Вы можете увидеть двух детей каждый для видео и аудио, так как в видео в видео есть два ряда. Вся вещь занимает около 3,5 минут. И самая длинная одна единственная функция ( Renderer-Compositor-Child-Video-103 ) занимает всего более двух минут. Так что опять же мы бегаем примерно в два раза больше скорости в реальном времени. Ну во избежание желаемых требований.

Нагружать тестовые могипы

Это был большой. Я бы ранее проверял оказание около 200 ‘клонов “коллеги Шона, играя в башнях. Это завершено только за стесняющую десяти минут на предыдущем тесте. И был только рендеринг до 720P. Каждое из этих видео отображается на 1080p, поэтому 2,5x количество пикселей.

В этом тесте я создаю 308 клонов Шона для выполнения. Кусок всего 1 минуты 51 секунды длиной. Но это был тест, чтобы доказать, что я решил проблему FFMPEG на слишком многих нитях.

Вы можете увидеть, что Render-Compositor - главный Поревели 15 дочерних процессов для каждого из аудио и видео. Опять один на ряд видео. Каждая строка имеет много видео, хотя. В этом случае до 21 видео в строке. Что интересно, – это вариант времени обработки видео. Каждый из детей отдельно от последнего ряда ( Renderer-Compositor-Child-Video-1000 ) имеет одинаковое количество видео для обработки. Тем не менее, время обработки варьируется от 73 до 131 секунды. Я предполагаю, что это может быть удача притягивания, на котором физический хозяин обладают. У некоторых многие больше нагрузки на них, чем другие. Если мы хотели бы более быстрое время обработки за счет затрат, мы могли бы устрелить несколько детей для каждой строки, а последний рендер начнется всякий раз, когда быстрее возвращаются.

Самое длинное одностороннее действие в этом визуализации составляет 2 минуты 11 секунд, поэтому мы находятся чуть ниже в реальном времени, с фактическим видео 1 минута 51 секунды. Хотя многие дети закончились, поэтому я думаю, что мы должны быть в порядке в целом, даже до 10 минут видео.

Заключение

Испытания на масштабируемость и рефакторинг трубопровода очень хорошо работали. Я очень доволен общей производительностью. После того, как аспект, на котором я потратил немного времени, – это компромисс между видео/аудиокодеком кодирован/декодирует скорость и размер файла. Например, самый быстрый кодек – Huffyuf , но произвел 8 ГБ файлы. Поэтому, хотя кодек был быстрее, мы потратили больше времени загрузки от хранения облачных объектов.

Я экспериментировал с использованием MPEG2 с только ключевыми кадрами, а также H264. В конце концов я остановился на использовании MPEG2 для промежуточного хранилища, как это, казалось, обеспечивает наилучшее компромисс в скорости/качества/размере.

Две другие вещи, на которых мы могли бы посмотреть в будущем, если нужно:

Дальше разбивает строки.

Мы могли разделить каждую строку пополам и обрабатывать каждую половину, прежде чем сочетаться до полного ряда.

Живи потоковой вывод от детей до финального композитора.

На данный момент мы ждем, пока все дети будут завершены до начала окончательной композиции, но в теории мы могли бы начать, прежде чем они закончили. FFMPEG поддерживает потоковое соединение в/из TCP-соединений, поэтому мы могли бы получить окончательный процесс, чтобы быть действием, срабатывающим с увольными от детей и рук их каждый адрес соединения TCP для потока к. Это означало бы, что окончательный рендер будет завершен к тому времени, когда каждый ребенок сделан. Однако это будет означать, что каждому ребенку нужно будет работать, пока самая медленная не закончится. Что увеличит общие затраты, так как облачные функции выставляют выставление на время работы.

Окончательное выходное видео 308 Seams Bagpiping:

Оригинал: “https://dev.to/hammertoe/further-scaling-the-choirless-render-pipeline-514a”