Qual a melhor maneira de criar uma API para upload de milhares de fotos e armazená-las de forma eficiente e econômica com React, Node.js e Nest.js?
Contextualização: Você está trabalhando em um projeto que exige que os usuários possam fazer o upload de milhares de fotos através de uma API, e você precisa encontrar a melhor maneira de armazenar essas fotos de forma eficiente e econômica. Você decidiu usar React para o front-end e Node.js com Nest.js para o back-end, mas ainda não tem certeza sobre a melhor abordagem para o armazenamento.
Pergunta: Quais são as melhores práticas para criar uma API de upload de milhares de fotos e armazená-las de forma eficiente e econômica usando React, Node.js e Nest.js? Quais serviços de armazenamento em nuvem são recomendados para essa finalidade e como escolher a melhor opção considerando o custo-benefício?
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
Olha eu aqui de novo!
O cloudflare tem um serviço de imagens! https://www.cloudflare.com/pt-br/products/cloudflare-images/
custos: 5 dolares por 100 mil imagens armazenadas e 1 dolar por 100 mil imagens exibidas — sem custos de saída ou cobranças adicionais pelo
Bom dia,
Eu não sei sobre a eficiência, mais quem sabe a própria api do google drive pode te atender!?
Da uma olhadinha se o tempo de requisições te satisfaz.
A API em si não é importante, mas onde você vai guardar os dados!
Vai ter que ser em algum lugar que seja um object storage. Existem várias empresas nessa área, a mais conhecida é AWS com o S3. As outras empresas acaba usando a mesma API compative com S3.
R2 da cloudflare é um deles https://www.cloudflare.com/pt-br/products/r2/
Outros:
https://www.idrive.com/object-storage-e2/
https://contabo.com/en/object-storage/
https://www.scaleway.com/en/pricing/?tags=storage
Aqui um texto comparando alguns https://www.coralnodes.com/amazon-s3-alternatives/
Todos eles usma a API S3. O bom dessa API é que: vc faz um upload direto navegador pro balde do storage! Sem ter que passar pelo seu servidor(e gastar muita banda)
Aqui como usar API s3 com node(todos os serviços são compativeis) https://austingil.com/upload-to-s3/ Usa a API s3 e escolhe o serviço que melhor for pra você!
Aqui mostra como fazer direto do navegador pro balde https://devcenter.heroku.com/articles/s3-upload-node
Eu acho que o melhor custo beneficio é o R2 da cloudflare! Se você utilizar um deles ou OUTRO deixa uma resposta aqui no meu comentário e edita a postagem com a empresa que você escolheu