Bem, uma solução fácil seria enfileirar as tarefas do Ffmpeg, portanto, apenas um número fixo está sendo executado a qualquer momento. E você deve considerar realmente executar os processos do Ffmpeg em uma máquina separada do servidor da Web.
Eu lancei recentemente um site muito popular, mas estou com problemas de escalabilidade. Meu site faz uso pesado de FFmpeg e nos horários de pico o uso da RAM atinge o ponto de 2 GB rapidamente e o arquivo de troca começa a ser usado . O uso da CPU começa a aumentar também.
Os usuários reclamam que o site está lento. Eles dizem isso porque todas as instâncias do FFmpeg são executadas muito devagar, porque o número é executado ao mesmo tempo. Os usuários fazem uso do FFmpeg no meu servidor em tempo real.
Existe algo que eu possa considerar ou fazer para diminuir o uso do servidor e a RAM apenas disparando? Talvez haja algo melhor que o FFmpeg (!).
A única solução é "jogar algum dinheiro" em um servidor mais poderoso?
Eu dei poucas informações, por favor, peça mais, então esse problema pode ser resolvido.
Bem, uma solução fácil seria enfileirar as tarefas do Ffmpeg, portanto, apenas um número fixo está sendo executado a qualquer momento. E você deve considerar realmente executar os processos do Ffmpeg em uma máquina separada do servidor da Web.
Este é um problema comum de estruturação, não tanto um problema de memória. Parece que você está colando tudo em uma caixa? Processamento de banco de dados, Web e MPG? Isso não vai escalar muito bem!
Independentemente da sua aplicação, qualquer processamento intensivo funcionará melhor em várias máquinas usando um sistema em lote. Ao distribuir a carga por várias caixas e manter o trabalho realmente intenso longe da camada da Web, seus usuários agradecerão!
Sua camada da web só deve estar veiculando a interface. Você deve ter mais de uma máquina dedicada ao processamento de vídeo em segundo plano. Isso deve ficar disponível para veiculação pela camada da Web quando estiver pronto.
A melhor referência sobre este tópico que eu encontrei é Construindo Websites Escaláveis por Cal Henderson, ex-CTO do Flickr. O link anterior é para a Amazon, para que você possa visualizar o livro no barato. Este linke para o Google Livros também permite que você leia.
Boa sorte!
Eu acho que você provavelmente poderia fazer algumas coisas para melhorar o uso da memória, mas quando tudo estiver dito e feito, você provavelmente terá saído melhor comprando um pouco mais de memória. Tenho certeza que vou ser rejeitado por esta resposta, mas estou apenas pensando sobre a economia de corrigir este problema.
Acho que a coisa mais rápida e fácil de fazer seria comprar um novo servidor. Sério, um Dell 2950 com 32 GB de RAM e 8 núcleos a 3,2 GHz eu acho que foi apenas US $ 8 ou US $ 10k CAD . Seria fácil gastar metade disso e ainda conseguir algo que possa executar muitas tarefas paralelas e ter muita memória RAM. Você definitivamente não seria limitado a 2 GB e a trocar para o disco.
O ffmpeg é muito ligado à CPU, não apenas à memória. O aplicativo dificilmente será mais rápido porque a caixa tem mais RAM - mais instâncias significam que cada uma delas fica mais lenta e tem menos CPU para usar.
A menos que você possa otimizar o próprio ffmpeg ou usar uma fila async, você precisa obter mais máquinas.
Procure principalmente CPU com RAM suficiente para não iniciar a troca antes de maximizar a utilização em todas as CPUs.
Correndo o risco de soar como um dróide de marketing de uma empresa de computação em nuvem, é para isso que a computação em nuvem se destina.
Eu gostaria de sugerir o uso de algo como o Amazon EC2 ou o Rackspace Cloud. Crie uma imagem básica que contenha o ffmpeg e uma interface que permita que o ffmpeg seja chamado remotamente a partir do seu aplicativo. Crie algumas instâncias dessa imagem e certifique-se de que, usando o provedor de nuvem escolhido, você possa criar e destruir instâncias dessa imagem para corresponder à carga. Seu aplicativo deve então delegar todas as tarefas do ffmpeg para seus servidores em nuvem e controlar o número de servidores em nuvem que são baseados no número de tarefas do ffmpeg que ele precisa processar de forma síncrona. Isso manterá o que considero um gargalo no seu aplicativo, transcodificação de vídeo / etc, separado do seu aplicativo e capaz de escalar à vontade.
Tags ffmpeg linux scalability