Vou descrever algumas opções, para mostrar alternativas ao código ativo por meio da abordagem NFS .
A "melhor" estratégia depende da sua estratégia de implantação de código escolhida, possivelmente uma delas:
- Editando no sistema ao vivo - o desenvolvedor muda / atualiza o aplicativo em um local central, máquinas ao vivo, em seguida, seleciona a alteração (que soa como seu cenário)
- Código exportado do controle de origem - o desenvolvedor faz alterações em um sistema de controle de origem e executa um programa para exportar o código para todas as máquinas no pool de balanceamento de carga (ou aguarda as máquinas executarem a atualização)
- Código implantado via sistema de pacotes - o desenvolvedor faz alterações em um sistema de controle de origem e cria pacotes de software (por exemplo, via APT ou YUM) armazenados em um repositório. O desenvolvedor executa um programa para forçar as máquinas com carga balanceada a instalar o novo software a partir do repositório.
A "melhor" estratégia também depende dos requisitos de disponibilidade para o aplicativo:
- Tempo de atividade 100% teórico - o aplicativo ainda está disponível enquanto são feitas atualizações de software (funciona com sua abordagem sugerida, mas observe os problemas de atomicidade: durante uma atualização, sua aplicação PHP pode incluir_once () e novos arquivos)
- Manutenção programada aceita - o aplicativo é colocado off-line por breves instantes enquanto são feitas atualizações de software (sem problemas de atomicidade)
Das opções acima, eu pessoalmente escolho a abordagem de implantação de pacotes. No entanto, para solicitações da Web, o compartilhamento de um pequeno número de arquivos no NFS pode funcionar bem: a latência introduzida pelo NFS é pequena em comparação com a Internet. Mas antes de fazer isso, considere as desvantagens:
- Considere quais recursos do sistema estão sendo balanceados: Se você estiver usando várias máquinas para equilibrar o uso da CPU, a configuração poderá funcionar bem. No entanto, se você estiver usando várias máquinas para equilibrar o IO, alterá-lo para uma máquina via NFS (ou de outra forma) pode não ser sensato.
- Considere a falha do servidor de arquivos: Se a máquina que segura os arquivos morrer, ela pode colocar todo o seu aplicativo offline (pois os servidores da Web não conseguem ler os arquivos). Nesse caso, os servidores da Web tenderiam a bloquear a espera, para que o NFS se recuperasse.
Devido a esses possíveis empecilhos (IO ligado ao servidor de arquivos, falha do servidor da Web), eu também sugeriria sincronizar periodicamente os servidores da Web com o aplicativo. Empurrar mudanças para várias máquinas deve levar apenas alguns segundos. Se necessário, você pode configurar algumas lógicas como: if (time () > 23:59:00) {usar o software no dir B} else {usar o software no dir A}). Isso pode ser útil se todas as máquinas precisarem executar a mesma versão de software, por exemplo, se você acabou de alterar um esquema de banco de dados.
Um par de segundos de atraso durante a implantação realmente não é tão ruim. Um desenvolvedor trabalhando em um sistema ao vivo certamente notaria o atraso, mas os desenvolvedores não devem editar sistemas ao vivo de qualquer maneira.