Tô com uma dúvida de arquitetura, será que vcs podem me ajudar?
Tenho um banco de dados onde há vários vídeos cadastrados.
Aí, tenho que pegar cada um desses vídeos e converter usando um programa de conversão (tal como o FFMpeg, VLC, entre outros).
O problema é que esse processo de conversão é bem pesado e chega a consumir quase toda a minha CPU, a qual já está rodando um servidor de aplicação! hehehe
Gostaria de saber, nesse caso, o que vocês recomendam fazer p/ que o conversor não fique consumindo a CPU do meu servidor de aplicação.
O que já pensei (talvez eu tenha viajado um pouco rs): :idea:
Usar um Message Driven Bean em outra máquina que receberia comandos de conversão. Só que não sei como esse MDB iria enxergar os vídeos da outra máquina e convertê-los.
Usar algum programa de balanceamento de CPU que limite o processamento do conversor de vídeos (achei isso meio ruim, porque teria que ser algo p/ rodar no Linux e no Windows).
O correto (e mais eficiente) é você mandar converter os vídeos em outra(s) máquinas; para que a(s) outra(s) máquinas possam ver os arquivos a serem convertidos, use algum recurso de compartilhamento de diretórios.
Para executar o comando remotamente, use o ssh (no caso do Linux e também do Windows). O SSH é uma forma segura e eficiente de executar comandos remotamente.
Se você não quiser fazer compartilhamento de diretórios, pode copiar os arquivos de/para as máquinas que fazem o processamento usando o scp, que é um comando que usa o ssh para efetuar cópia de arquivos, e que usa criptografia e opcionalmente compressão (embora isso não seja útil no seu caso, que é de conversão de vídeos).
Para compartilhar os diretórios, o jeito mais boboca é usar o recurso de compartilhamento de diretórios do Windows (no caso do Windows) ou o Samba (no caso do Linux), levando em conta que são coisas compatíveis, ou seja, dá até para fazer um “farm” de máquinas Windows e Linux, bastando você fazer as configurações adequadas no seu programa.
Como a compressão leva um certo tempo, pode usar MDB para que ele execute os comandos necessários (scp video.mp4 usuario@servidor:~/video.mp4; ssh ffmpeg bla bla bla etc.; scp usuario@servidor:~/convertido.mp4 convertido.mp4) e espere que ele termine.