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
Olá, muito obrigado pelas dicas!
Você parece entender bem sobre a S3, nesse caso, quais são os grupos de segurança que devem ser configurados tanto para o S3 quanto para as máquinas na AWS?