Práticas recomendadas para atualizar um serviço da web ao vivo

4

Estou sempre curioso sobre como as atualizações de aplicativos da Web ao vivo em larga escala são feitas. Como o aplicativo é ao vivo, é por isso que complica tudo - você não deve baixar seu serviço e, ao mesmo tempo, recuperar a atividade / alterações (no banco de dados, etc.) feitas em seu site para a nova versão durante a atualização mais tarde .

A primeira e mais natural técnica vem à mente é que redirecionando todas as solicitações para algum outro servidor replicado, para que você possa atualizar o servidor original sem desligar seu serviço.

Gostaria de saber se existem outras técnicas mais inteligentes para lidar com atualizações em um serviço da web ao vivo. Por favor, compartilhe sua experiência e opiniões caras!

    
por israkir 20.05.2011 / 10:15

3 respostas

3

Você carrega seu site em um único servidor? Se não, eu presumo que você tem algum tipo de balanceador de carga .. Se você carregar em um único servidor, dimensione e instale um balanceador de carga ..

As alegrias de ter esse serviço permitem que você não apenas esteja altamente disponível, mas caso precise trabalhar em seu aplicativo, você pode desabilitar um dos servidores para aceitar tráfego para o mundo externo e, em seguida, trabalhar na atualização / teste do seu aplicativo. aplicação / site durante períodos de tráfego menos ocupado.

Eu carrego meus sites e aplicativos (a mesma coisa na verdade) em 15 servidores e uso alguns como 'Sorry Servers', onde, se meus servidores principais estiverem ocupados, posso carregar para o 'Sorry's'. Nessa situação eu posso trabalhar com minhas peças de reposição e atualizá-las, então quando estou feliz com tudo funcionando, eu lentamente trago uma caixa para fora da piscina de cada vez e trabalho nessa.

O monitoramento do tráfego do seu site / rede com algo como o Cacti (www.cacti.net) permitirá que você veja seus horários de pico com base no tráfego e, em seguida, trabalhe na atualização fora dos períodos de maior movimento.

Espero que isso lhe dê alguma luz.

    
por 20.05.2011 / 10:23
2

Normalmente, fazemos "atualizações contínuas" para resolver esse problema. Isso significa que, em vez de ter apenas um servidor manipulando toda a sua carga, você tem N servidores. Você é capaz de "tirar um servidor de rotação" simplesmente parando o servidor web apache por exemplo. Precisamos ter outro mecanismo para manter um servidor sob a perspectiva do apache, mas para evitar que ele receba as conexões do cliente. Fazemos isso com um arquivo de texto simples, cuja presença indica ao nosso balanceador de carga para marcar o peso deste servidor como 0.

Para balanceamento de carga, usamos o Linux Virtual Server de código aberto, ou LVS: link

Ele suporta uma verificação de saúde "realserver". Executamos essa verificação de integridade periodicamente para manter uma lista de servidores da Web ativos por trás do balanceador de carga.

Marcando um host para atualização, atualizando um servidor individual de cada vez, enviando tráfego de teste para ele, confirmando que ele está funcionando e, em seguida, lendo-o para o pool, podemos distribuir atualizações de maneira eficiente para um serviço ativo. / p>     

por 20.05.2011 / 18:32
0

Mais difícil de fazer na camada de banco de dados quando estamos falando de mudanças de esquema on-line ... mas existem soluções lá fora, como o Tungsten Cluster no espaço do MySQL, por exemplo, que tentam resolver esse problema.

    
por 20.05.2011 / 21:00