Лучшие практики для разработки масштабируемого сервера транскодирования видео на Amazon Web Services?

(Принятие.NET; подобные вещи запросили бы другие платформы.)

ну, существуют партии из вещей рассмотреть. Я советовал бы:

  • Неизменность является большой для многопоточности. Функциональное программирование работает хорошо одновременно частично из-за акцента на неизменность.
  • Использование блокирует при доступе к изменяемым совместно используемым данным, и для чтений и для записей.
  • не пытаются пойти без блокировок, если Вы действительно не имеете к. Блокировки являются дорогими, но редко узкое место.
  • Monitor.Wait всегда должен почти быть частью цикла условия, ожидающего условия стать верным и ожидающий снова, если это не.
  • Стараются избегать фиксаторов для дольше, чем Вы должны.
  • , Если когда-нибудь необходимо получать две блокировки сразу, зарегистрируйте упорядочивание полностью и удостоверьтесь, что Вы всегда используете тот же порядок.
  • Документируют потокобезопасность Ваших типов. Большинство типов не делает потребность быть ориентированным на многопотоковое исполнение, они просто не должны быть враждебным потоком (т.е. "можно использовать их от нескольких потоков, но это Ваш обязанность вынуть блокировки, если Вы хотите совместно использовать их)
  • , не получают доступ к UI (кроме зарегистрированных ориентированных на многопотоковое исполнение путей) от потока неUI. В Windows Forms используйте Управление. Invoke/BeginInvoke

, который Это первое, что пришло на ум - я, вероятно, думает о больше, если это полезно для Вас, но я остановлюсь там в случае, если это не.

16
задан undefined 1 October 2009 в 13:18
поделиться

1 ответ

I don't think you'll want to start a new FFMPEG instance every time someone uploads a file for transcoding. Instead, you'll probably want to start the same number of FFMPEG processes as the number of CPUs you have, then queue up the input files you want to transcode and do them in the order they were received. You could do this all on one computer, I don't think the server that accepts the uploads and puts them in the queue will need take much CPU and can probably coexist just fine with the FFMPEG processes.

Depending on how big you want to scale to (if you want to do more than just a few FFMPEG processes on a single machine) you could easily make this distributed, and this is where SQS would come in handy. You could run 1 FFMPEG process per core, and instead of looking in a local queue for the data, it could look to the SQS. Then you could instantiate as many transcoding processes as you need, on different machines.

The downside to this, is that you will need to transfer the raw videos from the server that accepts them to the server that needs to transcode them. You could put them in S3 then grab them out of S3, but I don't remember off the top of my head if you have to pay for that. Alternatively, you could just keep them on the hard disk of the machine that received them, and have the transcoding process go there to get the raw files.

12
ответ дан 30 November 2019 в 22:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: