Como implantar mudanças em um site de produção enquanto não abaixa o site por uma fração de segundo?

2

Eu uso o Git para gerenciar o ciclo de desenvolvimento do meu aplicativo da web, e para alterações em que git pull é suficiente e nenhuma alteração é necessária, eu naturalmente mantenho o site em alta e git pull as alterações.

Mas estou pensando, digamos que eu tenha 100 arquivos alterados e diga que houve uma carga inesperada no disco, o que acontece se alguém fizer uma solicitação durante momento em que o git estava cometendo mudanças no disco? Isso não tornaria meu aplicativo possivelmente vulnerável a possíveis corrupção de dados ou respostas mal-formadas?

Quero dizer que isso é muito, muito improvável para um site de baixo tráfego, mas se você obtiver um tráfego muito alto e for uma sobrecarga no servidor, haverá algum risco.

Na verdade, pensei em uma solução, mas provavelmente não é o melhor se eu implementar minha própria implementação e não tenho certeza se é prática. Lembro-me de ler um artigo sobre como não vemos artefatos em nossas telas, basicamente, escrevendo novos dados em um bloco totalmente diferente na memória da GPU e, em seguida, apenas trocando os dados da tela atualizados que é chamado) ponteiro para o novo bloco, e possivelmente descartando ou reutilizando o bloco antigo no final. Desta forma, se uma GPU não tiver dados semi-escritos, será mostrado

Isso seria prático se alguém pudesse implementar algo semelhante?

    
por OverCoder 21.06.2017 / 02:14

2 respostas

3

Você desejará um balanceador de carga. Ele pode fornecer upgrades contínuos, alta disponibilidade e scale out.

Sites grandes, não triviais, mas de alguma forma sempre atualizados, mudam um pouco constantemente. Talvez eles estejam lançando uma atualização diária ou algum recurso falhou, mas as coisas ainda são executadas. Eles decidiram que uma experiência de usuário ligeiramente diferente não vale a pena ser desativada. Você precisará tomar sua própria decisão sobre se sua solução inclui tempo de inatividade planejado.

No servidor da Web individual, determinados métodos de implantação criam uma transição mais nítida. Pré-implantar o código e, em seguida, movê-lo para o lugar é um corte mais limpo do que atualizar a cópia de trabalho ao vivo. Embora isso não conta para bancos de dados, atualizações do servidor web e outras complicações. Você ainda deseja que um balanceador de carga forneça opções.

    
por 21.06.2017 / 03:02
0

Uma das maneiras canônicas de fazer isso, independentemente do fato de você estar usando git ou não (mas usá-lo, você pode implementar esse esquema com alguns de seus ganchos), é ter um diretório no site onde você Instale cada nova "versão" em seu próprio diretório específico, por exemplo, com uma data / registro de data e hora em seu nome. O verdadeiro conteúdo atualmente usado pelo servidor da Web está em outro caminho, que é um link simbólico para um diretório "versão".

Depois que sua transferência terminar, e depois de ter verificado que tudo correu bem (sem arquivos faltando, conteúdo plausível, direitos Unix corretos, links simbólicos pendentes, etc…), você só precisa mudar o symlink da "produção" caminho para o seu novo caminho "versão".

A alteração do link simbólico é quase atômica, por isso não causaria qualquer interrupção.

Isso também permite que você volte facilmente: basta alterar o symlink novamente.

    
por 21.06.2017 / 23:06