Bom dia,
Pelo que eu vi seu projeto parece ser grande e precisa ser escalavel certo?
Se for do caso recomendo que use os serviços da AWS, crie um S3 e as maquinas na AWS tambem configuradas na mesma sub-região assim você diminue bastante a latencia.
Lembre-se de fazer as conexões das maquinas por IP interno isso é muito importante
1- Não esqueça tambem de configurar os grupos de segurança tanto do S3 quanto das maquinas para que não tenha problemas futuros, libere os acessos apenas por maquinas internas da AWS e para seu IP. Sei que é chato trocar o IP na AWS toda vez que sua internet cai mas isso te evita uma grande dor de cabeça.
2- Não sirva os arquivos direto do S3, consuma eles pelo servidor Node e sirva para o usuário pois essa é a melhor pratica e garante que você consiga fazer sistemas de autenticação dinamica para acessos de imagens videos e etc...
3- Caso você esteja usando express com a biblioteca aws-sdk e typescript lembre-se de servir o resultado da busca de arquivos por strams:
response.set("Content-Type", result.ContentType); const readStream = new stream.PassThrough(); readStream.end(result.Body); readStream.pipe(response);
Pois os buffers que retornam da biblioteca aws-sdk podem dar conflito caso você tente converter para usar uma função mais direta como:
response.sendFile(<conteudo do arquivo>);
4- Cuidado com a performace se vir que o servidor esta engargalando por tratar arquivos muito grandes use o multi-thread do Node (particularmente gosto do piscina)
OBS: a AWS é uma otima opção para pricipamente para aplicações que você precisa de uma latencia baixa, eficiencia de maquina e escalabilidade.
Se precisar de um load balancer basta configurar um no painel é bem simples e eu uso em alguns clientes que tem milhares de requests por segundo ou muitas pessoas penduradas nos sockets ao mesmo tempo
Espero ter ajudado