Por que os sites (mesmo este) às vezes estão "em manutenção"?

36

Eu pessoalmente nunca fiz isso. Eu não entendo por que tantos sites o fazem, se você faz seu desenvolvimento em um servidor de desenvolvimento, por que você precisa desligar o site de produção?

Eu sempre me perguntei sobre isso.

O que eles estão fazendo durante esse período, o que exige isso?

JD Isaacks
fonte
56
Eles estão substituindo os tubos de vácuo nos servidores.
Mipadi
11
Eu pensei que eles estavam empilhando os cartões perfurados.
Christopher Mahan
5
Tenha em mente que o site provavelmente não ficar acordado para a maioria das atualizações. Obviamente, você só vê aqueles onde realmente precisa ficar offline por um tempo.
Dean Harding
4
Ninguém abordou um motivo de segurança; pode haver uma exploração conhecida (também conhecida como alguém publicado como explorar determinado site) e os administradores o colocam offline para atenuar o abuso de outras partes enquanto o corrigem.
Francisco Presencia 27/11
1
Ocorre a minha pergunta 'Quais estratégias posso usar para obter zero tempo de inatividade (planejado) em um aplicativo Web suportado por banco de dados?' Especificamente atualizações que exigem alterações de esquema DB: softwareengineering.stackexchange.com/questions/336945/...
Stephen

Respostas:

59

O grande incentivo para qualquer coisa em grande escala é que, se alguém está alterando os esquemas do banco de dados de alguma maneira, normalmente possui alguns scripts de manutenção grandes e desagradáveis ​​para executar.

Agora, isso pode levar um segundo ou mais para executar com seu conjunto de dados de desenvolvimento. Mas quando você começa a medir dados em terabytes e petabytes, até a adição de uma única coluna a uma tabela pode levar horas.

Portanto, não importa quão rápida e automatizada seja a implantação, você ainda terá problemas de manutenção de dados. Se você planeja muito bem, pode criar um espelho somente leitura do site enquanto estiver passando pelo processo, mas para muitos sites somente leitura é inútil e, portanto, não vale o esforço.

Wyatt Barnett
fonte
3
+1 - um estouro de pilha somente leitura não seria muito bom. Não vai ser muito mais que você não seria capaz de encontrar no Google :)
corsiKa
10
@glowcoder: quando você pesquisa no Google, encontra SO respostas.
Donal Fellows
@Donal, esse foi exatamente o meu ponto.
precisa saber é o seguinte
1
O Google é enorme e certamente possui um banco de dados enorme; como é que eu nunca vejo "em manutenção" no google? (Página inicial do Google.com.br)
alexyorke
7
@ alexy13 - o google está em uma categoria especial de escala onde eles não podem ter um único banco de dados ou mesmo datacenter, partes do sistema estão sempre inativas e criaram o front end para lidar com isso. Eu também faria se você me desse esse tempo e orçamento de P&D.
Wyatt Barnett
7

Existem várias razões pelas quais você pode querer desativar um site para manutenção. Para nomear alguns:

  • Alterações no banco de dados
  • Alterações de DAL
  • Atualizando serviços

Basicamente, se o seu site não é estático, ao fazer uma atualização lógica, você deseja removê-lo, caso contrário, as pessoas que acessam o site podem receber erros ou comportamento inesperado.

Além disso, se você tocar no web.config (no ASP.NET) do seu site, você deve retirá-lo primeiro para manutenção, pois isso interromperá a sessão dos usuários. Assim, se eles estivessem no meio de alguma coisa, isso seria perdido.

Tyanna
fonte
2
a sessão seria perdida se estiver usando o estado da sessão "Em processo". Se você usar o estado de sessão fora do processo, a sessão não será perdida se o web.config for alterado.
26411 Anthony
2
O último ponto só é verdadeiro se você estiver fazendo sessões em processo, e espero que você não esteja em um site de produção! Há mais do que apenas tocar no web.config que interromperá o processo de trabalho.
Dean Harding
7

Bem, essa é uma pergunta de alguma forma abstrata - eu até vi sites que usavam "Down for Maintenance" em vez de HTTP 500.

Para sites, às vezes você precisa fazer alguma atualização. Por exemplo, se você estiver alterando o banco de dados, não deseja que nenhum outro usuário toque no banco de dados durante esse período. Se o banco de dados estiver offline, o site também deverá ser desativado normalmente, pois mostrar SqlException não é muito bom. Outro motivo é alguma falha de HW ou falha do sistema (como vazamento de recursos) que requer a aplicação ou mesmo a reinicialização do sistema.

Uma vez participei da atualização do sistema de internet banking em um dos maiores bancos do meu país. Todo o processo de atualização de sites, camada intermediária e bancos de dados levou três dias em que o sistema estava offline para os clientes. Também incluía backup completo de tudo, para que, em caso de falha, o sistema pudesse ser revertido para a versão antiga.

Ladislav Mrnka
fonte
2
O HTTP 503 (em vez de 500) não é o código de status correto para "inativo para manutenção"?
Nubok
4

Os servidores precisam de patches para serem executados e, em muitos sistemas operacionais, esses patches exigem reinicializações. Portanto, essa é uma categoria de tempo de inatividade. Muitas empresas agendam reinicializações a partir de patches para pouco tempo de uso, como domingo de manhã. Se não houver correções, eles reiniciarão os servidores de qualquer maneira no horário de manutenção agendado regularmente (esta é uma ressaca dos dias do NT4, quando certos contadores transbordavam a cada semana e meia, portanto, a reinicialização semanal evitava outros bugs).

Uma empresa em que trabalhei tinha um site de comércio eletrônico no final dos anos 90 que gerava mais de US $ 1.000.000 em vendas por mês. Alguém promoveu a tabela de impostos incorreta para o servidor do banco de dados de produção. A solução foi restaurar o servidor db do backup e aplicar as transações desde o último backup. Isso levou várias horas, durante as quais o site não estava disponível para receber pedidos. Como a parte dos pedidos e as brochuras de vendas estáticas estavam sendo executadas no mesmo local e eram inseparáveis, ambas tiveram que descer.

Uma empresa para a qual trabalhei tinha um texto errado inserido no lugar errado e o CEO saiu e o site foi retirado da linha "para manutenção" enquanto o layout e o texto eram "consertados" e a vítima apropriada culpada e demitida.

Tangurena
fonte
Mesmo isso pode ser mitigado com balanceamento de carga adequada
Voycey
4

Enquanto outras respostas estão corretas, você quase sempre pode evitar o tempo de inatividade usando as arquiteturas corretas. Mas isso tem um custo, e esse custo pode não valer a pena: uma hora de inatividade custa muito à Amazon ou à infraestrutura por trás da NASDAQ. Stackoverflow? Provavelmente nem tanto.

Como evitar paradas:

  • desativando páginas de exibição de hardware: se você possui proxies na frente do site, pode colocá-los off-line sem causar nenhum impacto ao usuário
  • reconfigurando servidores: o mesmo que acima
  • atualização / alteração de dados nos bancos de dados: você pode colocar seu site no modo somente leitura, etc.

Geralmente, em uma arquitetura em camadas, quanto mais próximo do "topo" você estiver, mais difícil será evitar o tempo de inatividade, o mesmo para stateful (servidor da Web x banco de dados).

David Cournapeau
fonte
4
A NASDAQ não tem cerca de 14 horas por dia de tempo de inatividade programado?
Peter Taylor
3

Um site pode agendar um tempo de inatividade regular, mesmo que não haja nada a fazer sempre que o tempo de inatividade programado ocorrer. Ao fazer isso, eles ficam usuários usados para a idéia de que o site será para baixo por um certo período de tempo a cada tantas vezes para que quando o trabalho faz necessidade de ser feito, os usuários se queixam tanto.

Barry Brown
fonte
existe uma cura para isso: derrubar o sistema de reclamações durante o tempo de inatividade :) Na verdade, vi empresas fazendo isso. Uma empresa MMO que desativa o site que hospeda o anúncio de tempo de inatividade, bem como os fóruns de suporte, juntamente com o jogo em manutenção, é um bom exemplo disso. Qualquer um que não recebesse o anúncio durante as poucas horas antes da manutenção nunca saberia o que estava acontecendo.
jwenting
3

Há também um lado psicológico e de marketing nisso. Em alguns casos (ouso dizer a maioria dos casos, mas não sou tão ousado * g *), a leitura "Inativo para manutenção" também pode significar "O servidor travou ou ficou fora de serviço por qualquer outro motivo".

Eu já vi isso com bastante frequência. Normalmente, como desenvolvedor, você deseja mensagens de erro "reais" dizendo algo como "Opa, estamos com muita carga agora e nem todas as solicitações podem ser tratadas", mas algumas pessoas do marketing dirão "cara, você não pode informe ao cliente que estamos com problemas. Diga a eles que estamos em manutenção programada - isso parecerá muito melhor ".

Portanto, "em manutenção" geralmente é apenas outro termo para "fora de serviço".

perdian
fonte
2

Nenhum servidor PRECISA ir para manutenção. Você pode evitar fazer isso por qualquer coisa, em qualquer escala, alteração de banco de dados, atualizações de servidor, etc.

O problema é que um sistema de tempo de inatividade zero, em uma certa escala, é muito caro para criar e manter. Você precisa de redundância em todos os lugares, balanceamento de carga em todos os lugares, replicação de dados, sincronização. Esses são problemas difíceis.

Basicamente, você precisa chegar ao nível de poder liberar o Netflix Chaos Monkey em prod para garantir que ele funcione mesmo se parte do seu sistema estiver ocupada com a atualização ou apenas fora de sincronia. Isso é certamente factível. Também é muito caro, requer muito tempo e muitos especialistas para trabalhar no problema.

Colocar um site no modo de manutenção pode ser o meio termo que você escolher, porque não deseja investir muito apenas para evitar derrubar o site por um tempo, de vez em quando.

Economia.

Obviamente, se você escolher o caminho do tempo de inatividade, o site ganhará mais do que apenas disponibilidade, mas também confiabilidade, pois essas práticas recomendadas atendem a ambos os propósitos.

e-satis
fonte
0

Eu não entendo por que tantos sites o fazem, se você faz seu desenvolvimento em um servidor de desenvolvimento, por que você precisa desligar o site de produção?

Merda acontece. A menos que você esteja realizando alguma forma de verificação matemática de suas entregas ( e suas especificações sejam válidas ), não importa o quão cuidadoso você seja, a merda acontece.

Além disso, há momentos em que você pode precisar fazer uma alteração em uma parte essencial da sua infraestrutura (por exemplo, uma alteração nas estruturas do banco de dados) que exige um tempo de inatividade.

A menos que você esteja desenvolvendo um sistema crítico (digamos, um sistema cinco-nove ou seis-nove ), a coisa responsável e com boa relação custo-benefício a fazer é construir um sistema com a aceitação de tempos de inatividade como parte da realidade.

Além disso, você leva esse princípio adiante, tornando os tempos de inatividade gerenciáveis ​​e passíveis de agendamento (ou pelo menos detectáveis) com um entendimento e procedimento claros para uma recuperação eficaz.

luis.espinal
fonte
1
A verificação matemática também não é uma panacéia; Às vezes, você descobre que o que verificou não é o que queria verificar.
Donal Fellows
Verdade. Mas então eu argumentaria que o problema não está na verificação formal das especificações, mas na validação dessas especificações. Se suas especificações são inválidas, obviamente tudo se desintegra a partir daí, mas a validação das especificações ( "estamos realmente construindo a coisa certa necessária ao usuário pretendido para a finalidade pretendida" ), esse não é o foco da verificação (* "dado essas especificações, estamos construindo essa coisa certa ou pode ser construída? "), informal ou não. Eu acho que eu deveria ter colocado uma ressalva em que (wrt a validade das especificações.)
luis.espinal
Não estou argumentando que você está errado em mencionar isso. Apenas aponto que existem limites para o que ele pode fazer. Eu costumava trabalhar na verificação formal, e o grande problema da época era como evoluir corretamente as especificações para levar em consideração a mudança de entendimento dos requisitos. Como esse é principalmente um problema humano, secundariamente um problema de engenharia e apenas tercariamente um problema matemático, não imagino que tenha sido resolvido completamente ainda.
Donal Fellows
Oh. Eu acho que então somos como pensar. Os requisitos em mudança (e a validação exigida) são os calcanhares de Aquiles dos métodos formais. Como é uma tarefa criativa (devido à sua natureza humana), não acredito que seja solucionável, não da maneira que formalistas / puristas gostariam que fosse. Eu acho que essa foi uma das promessas fracassadas da FM; eles foram vendidos em excesso (quero dizer, por exemplo, métodos formais para o desenvolvimento da web ?) As especificações precisam ser altamente examinadas e não passíveis de mudanças rápidas (e isso é típico de sistemas críticos, e não altamente maleáveis). Os últimos são a norma e não a exceção.
Luis.espinal
99% das interfaces de usuário não estão relacionadas aos métodos formais, mas à psicologia aplicada. As provas restantes são óbvias (“não atrapalhem a interface do usuário”), mesmo que nem sempre sejam óbvias para provar. Porém, se você separou o aplicativo da Web de acordo com as práticas recomendadas, os métodos formais farão muito sentido na camada de métodos de negócios (também na camada de armazenamento de dados, mas é geralmente nesse ponto que o conselho padrão de “não escreva seu próprio DB ”se aplica de qualquer maneira. :-))
Donal Fellows
-2

Uma vez que nosso site foi invadido (servidor IIS6 e Windows 2003 antigo, há alguns anos). enquanto trabalhamos na restauração, colocamos a página "em manutenção" por algumas horas ....

serega
fonte