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?

Olá, você precisaria configurar os acessos apenas pelas maquinas exemplo: ## Criando EC2 AWS 1. Após criar sua maquina EC2 crie uma chave para acesso ssh no seu servidor 2. Você precisara criar um grupo de segurança e vincula-lo a maquina (eu geralmente coloco o nome de 'remote-access') 3. Libere o acesso a porta 22 apenas e selecione na coluna source 'My IP' 4. Lembre-se de criar um grupo de segurança default que permite acesso de qualquer pessoa pelas portas de acesso web tipo a 80 e 443 esse você pode definir como acesso publico Isso irá fazer com que apenas o acesso a essa maquina possa ser feito da sua maquina com aquela chave ssh. obs: Se precisa de mais performace crie uma AmazonLinux2, são um pouco mais chatas de configurar porem são melhores que as ubunto pois vem mais limpa. Se precisar ter acesso a um banco de dados teria que autorizar seu IP na porta da base de dados tambem. ## Configurando bases de dados Caso precise configurar um RDS vincule tambem o grupo de segurança 'remote-access'. Porem irá ter que criar um grupo de acesso a base de dados tambem com o IP publico e privado das EC2 que irão ter acesso direto a base. Ai basta vincular esse outro grupo ao RDS tambem. (Eu recomendo que configure o banco de dados direto em um ec2 caso saiba fazer, é melhor e mais barato. Tive que fazer isso recentemente porque o meu RDS deu uns bugs sabe Deus por que. **E lembre-se sempre dos servidores de backup usando rsync em caso de dar algum pepino**) ## Criando S3 1. Para criar o S3 é bem simples basta seguir o passo a passo e **NÃO LIBERE O ACESSO PUBLICO** 2. Para fazer o acesso do S3 você deve criar uma conta IAM com as permissões predefinidas da aws apenas para S3. 3. Use essa conta para acessar o S3 diretamente da aplicação Configure as chaves no .env pelo amor de Deus não suba para o git kkkkkkkkkkkk A partir dai é só usar a lib aws-sdk ## Dica extra Se a conta da aws for de um cliente crie uma sub-conta IAM com acesso total a conta da aws e não fale para ninguem. Se algo acontecer com a conta da AWS você consegue recupera-lá muito facil, porque as vezes o cliente pode tentar te sacanear. Então é bom previnir. ## Porque configurar os grupos de segurança Você provavelmente já entendeu mas em base é que os unicos acessos que irão circular pelas maquinas são aqueles que você permitir, ou seja isso vai dificultar bastante a vida de invasores, só é chato trocar o IP quando cai a conexão de internet. E o melhor é que você irá servir os arquivos seguindo S3 -> aplicação -> cliente e não S3 -> cliente. Fazendo que os documentos fiquem mais seguros e não vazando os dados como algumas empresas fizeram tipo a Nubank kkkkk
Cara, animal sua explicação! Entendi! Mutido obrigado, principalmente na dica extra hahahaha
Imagina você tambem me ajudou bastante a distrair a cabeça, se precisar de uma mentoria especifica para algum projeto até em questão de escalabilidade ou performace, você pode entrar em contato comigo https://bkode.com.br Mas tambem te respondo por aqui fica tranquilo, gosto de fazer isso porque da uma distraida do dia a dia e compartilhar conhecimento sempre é bom
Pode crê, irmão! Obrigado pela disponibilidade sim, vou indicar os serviços, valeuuuu!