A maioria das pessoas cria esse tipo de sistema usando armazenamento centralizado, não exigindo nenhuma sincronização.
Tenho 5 ou mais servidores Web em um balanceador de carga e, se um usuário fizer o upload de uma foto, pode levar até um minuto para rsync-lo (crontab). Isso pode ser frustrante para alguns que pensam que falhou. Existe uma maneira de fazer um rsync em tempo real?
Obrigado
Como Chopper3 disse, há armazenamento centralizado usando um SAN ou NAS, e isso parece ser o mais comum. Se você realmente quiser mantê-los em servidores separados, você poderia olhar para algo como o DRBD, que é como o RAID através da ethernet, para manter um volume sincronizado entre os servidores.
inosync é praticamente pronto para isso, desde que os uploads cheguem em uma máquina Linux (mac e bsd tem mecanismos diferentes e requerem uma utilidade diferente)
Você também pode usar inotify para assistir a um diretório e disparar instantaneamente a propagação de alterações de arquivos por meio de scp ou rsync ou qualquer outro método.
Historicamente, você usaria um sistema de arquivos de rede compartilhado (canônico, por exemplo, NFS) para resolver isso.
Hoje em dia eu uso o gridfs do MongoDB para esse tipo de armazenamento de objetos compartilhados de acesso múltiplo.
Neste momento estamos fazendo alguns testes com o inotify. Eu também recomendo estas opções:
jnotify : biblioteca de eventos do sistema de arquivos para Java inotify-java : biblioteca fornece ligações e uma API para monitorar o sistema de arquivos em plataformas Linux E claro: inosync