De longe, a solução mais fácil, melhor e definitivamente mais robusta será usar a opção S3 - com ou sem cloudfront.
Atualmente, tenho um site de classificados popular, que é executado em dois servidores. Atualmente, existem 2 servidores, um servidor da web e um servidor de banco de dados. Eles estão executando o Linux e o site está codificado e MySQL.
Estou no processo de atualização dos servidores, pois o site está superando a configuração do servidor existente. Eu comprei outro servidor para atuar como outro servidor que é conectado aos dois servidores existentes em uma rede privada. Então eu teria 2 nós servidores e um servidor de banco de dados.
O site tem um grande número de imagens continuamente enviadas e removidas do site pelos usuários. A ideia original era ter os 2 servidores da Web sincronizando arquivos, incluindo imagens. Mas acho que devido ao grande número de imagens para sincronizar, talvez haja problemas com as imagens não sendo sincronizadas imediatamente.
Estou apenas tentando descobrir a melhor e mais robusta solução para isso, pois tenho certeza de que é uma questão comum que muitos websites em crescimento devem enfrentar.
As ideias que tive até agora são:
1) sincronize ambos os servidores web. Pode ser lento e momentos em que as imagens ainda não estão disponíveis nos dois servidores. 2) monte o diretório de imagens para que ambos os servidores da Web façam upload para o mesmo diretório. Isso atrasaria o upload de imagens? 3) altere o upload do script php de foto para fazer o upload para o bucket do Amazon s3 e sirva imagens usando a frente de nuvem do anmazon. Embora eu ache que isso talvez seja caro devido ao grande número de imagens que o site atende a cada mês.
Todas as ideias ou links para outras leituras seriam ótimas.
De longe, a solução mais fácil, melhor e definitivamente mais robusta será usar a opção S3 - com ou sem cloudfront.
As imagens geralmente são conteúdo estático, então elas armazenam em cache muito bem. Se o design da sua solução puder alavancar, não importa realmente se o armazenamento permanente real é um pouco lento ou caro.
Cada um dos seus servidores da web opera seu próprio cache ou aproveita um cache externo, ou seja, um Content Delivery Network.
Para muitos aplicativos, um compartilhamento de arquivos (altamente disponível) ainda é uma solução muito adequada e comumente implantada para compartilhar conteúdo entre servidores.
Como alternativa, não armazene arquivos em um sistema de arquivos, mas use o banco de dados e armazene-os como BLOBs. Uma abordagem muito comum. Como você já precisa de um banco de dados de qualquer maneira e isso torna os servidores de aplicativos quase sem estado, resolve muitos problemas de bloqueio, replicação, HA, consistência e acesso, deslocando-os para a camada de banco de dados, onde muitos desses problemas são notícias antigas, bem compreendidas e resolvido.