O que acontece no NFS se 2 ou mais servidores tentarem escrever o mesmo arquivo simultaneamente?

StackOverflow https://stackoverflow.com/questions/3832646

  •  26-09-2019
  •  | 
  •  

Pergunta

Estou trabalhando em um WebApp PHP que faz redimensionamento automático de imagens e estou pensando em armazenar as cópias em cache no NAS montado no NFS, por isso é fácil para mim lavar o cache quando as imagens são atualizadas.

A única coisa que me preocupa é o que acontece em geral com o NFS se 2 ou mais dos servidores do cluster estiverem tentando criar o mesmo arquivo de cache de imagem ao mesmo tempo?

Há uma boa chance de que, quando o cache for descartado para atualizações de conteúdo, elas possam colidir assim, mas não tenho uma ótima maneira de testar esse cenário em desenvolvimento, porque estou trabalhando apenas em uma única caixa.

Alguém com experiência nisso?

Foi útil?

Solução

Depende de como você abre o arquivo. Se você abrir o arquivo no modo "Apênder", o UNIX/Linux realmente escreverá o conteúdo em um cache até criar um caractere novo, ele colará a nova linha no final do arquivo (com exceção do " Padrão de byte no final do arquivo "e escreve um novo" final de arquivo ". Nesse caso, se duas pessoas tentarem escrever para o mesmo arquivo simultaneamente, as duas linhas de gravação passarão, anexando -se uma linha de cada vez na ordem em que foram recebidas. Assim, você poderia esperar algo como:

This was the old contents
of the file
The first script added
The second script added
this line (script 1)
this line (script 2)

Na rara chance de que dois comandos de "gravação" cheguem exatamente ao mesmo tempo (até a precisão de nanossegundos), o sistema operacional realmente cria um estado de interrupção. Cabe ao sistema operacional como lida com isso, mas a maioria gera apenas dois números aleatórios para decidir quem vai primeiro.

Se você abrir o arquivo no modo "Write" (digamos que você deseja adicionar conteúdo ao meio), você realmente precisará bloquear o arquivo para fazer isso. O segundo script PHP apresentará um erro dizendo que não poderia abrir o arquivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top