
Atualmente estou construindo uma arquitetura simples de webapp na AWS, como segue: Elastic Load Balancer - vários front-ends - banco de dados RDS.
Também configurei um servidor NFS para armazenar todas as imagens enviadas pelos usuários por meio do aplicativo da web, principalmente como fotos de perfil (não posso usar o S3 para isso, estou apenas seguindo as especificações que recebo ...).
As VMs front-ends são geradas por um grupo de escalonamento automático. Quando uma VM é gerada, ela baixa as fontes do aplicativo Web de um bucket S3. O problema é que tenho alguns arquivos enormes nessas fontes (principalmente arquivos estáticos, como mp4 ou imagens). Estou pensando em armazenar esses grandes arquivos estáticos também no servidor NFS, porque leva muito tempo para fazer o download do S3.
Então, minha pergunta é: quando é relevante armazenar um arquivo no NFS e quando é melhor deixá-lo em cada front-end? por exemplo, se eu armazenar mp4 no NFS, por que não armazenar todo o aplicativo da web neste NFS?
nota: não quero construir uma AMI contendo esses arquivos, pois não é flexível o suficiente ao modificá-los
Responder1
Tudo isso se resume ao desempenho. Se o seu armazenamento NFS for rápido o suficiente, não há nada que impeça você de colocar todos os seus aplicativos da web e arquivos de conteúdo da web nele, para que sejam acessíveis a todas as suas VMs de front-end.
Dito isso, o motivo mais comum para as pessoas não fazerem isso é porque a latência extra da rede envolvida na recuperação de arquivos do armazenamento em rede se converte em um atraso adicional quando os clientes carregam seu aplicativo/site da web em seus navegadores.
Obviamente, isso depende do armazenamento subjacente da VM, mas geralmente o armazenamento local quase sempre tem latência mais baixa e, portanto, é preferido para armazenar conteúdo estático. Muitas implantações com balanceamento de carga nas quais estive envolvido fazem uso do DRDB para manter o conteúdo estático sincronizado e disponível para todos os servidores da web.