Executando verificação de segurança...
1

O que eu faria:

Para cada arquivo bruto

  • Solicitar uma url de upload pré assinado do bucket da aws (ex. /uploads/{userId}/{fileId})
  • Fazer o upload DIRETO para a aws do arquivo bruto
  • enviar uma notificação para o backend que o upload foi concluído (pode ser agrupado em batch aqui, ex: a cada 25 concluidos enviar uma notificação com as ids dos 25)
  • o backend recebe essas ids e coloca e uma fila com RabbitMQ

Worker

  • Worker escuta a fila
  • Quando receber uma id baixa o arquivo da aws, processa e envia convertido no caminho final
  • Se não quiser guardar o bruto apaga o bruto

Pontos de falha

  • Upload deu erro (pode retentar o mesmo arquivo)
  • Conversão deu erro

Para a primeira eu já avisaria no front
Para a segunda precisa implementar algum tipo de notificação (server sent events ou coloca a lista de arquivos no db mesmo pra consultar depois)

Desafios

  • Mostrar o progresso da conversão dos arquivos, já que roda em um processo separado

Porque essa arquitetura?

Se você fizer o upload para o seu servidor, processar e enviar somente o arquivo final a aws vai precisar de um servidor muito forte. O cliente vai precisar esperar converter cada arquivo.

No final o cliente vai esperar: upload + conversao + upload bucket

Se colocar numa fila você pode deixar processando por horas em background e o cliente só espera realmente o upload. A conversão pode acontecer depois

Carregando publicação patrocinada...
1

Boa proposta, é mais ou menos a minha conclusão porque tentar sem fila está ruim, apesar de funcionar.

Meu único problema com isso é o usuário precisar da foto logo em seguida do upload. Se eu seguir esse caminho eu posso cair em algum cenário de colocar a conta do cliente em hold até que as fotos dele terminem de converter.

Sem falar nos vídeos. O FFMPEG consome muito recurso ao processar.

1

Se eu seguir esse caminho eu posso cair em algum cenário de colocar a conta do cliente em hold até que as fotos dele terminem de converter.

Mostra só o que está convertido, deixa um aviso de processando em algum lugar da tela

O FFMPEG consome muito recurso ao processar.

Sim

A questão é: porque você está fazendo isso? não encontro um cenário viável onde você precisa processar tantos arquivos.

1

Existem usuários que têm, por exemplo, 3k+ de fotos e 1k+ de videos. Nesses casos, mesmo esporádicos, eu preciso permitir que o usuário selecione as 3k de fotos ou 1k de vídeos e suba na plataforma. Como o back vai fazer pra processar nos formatos ideias e salvar no bucket do usuário é o desafio nesse cenário.