Header Ads

Como a "Engenharia do Caos" ajuda a evitar tempo de inatividade não planejado

asharkyu / Shutterstock. com

A engenharia do caos é uma abordagem para teste de tolerância a falhas de software que provoca erros intencionalmente em implantações ao vivo. Ele incorpora um elemento de aleatoriedade para imitar a imprevisibilidade da maioria das interrupções do mundo real.

A ideia de adicionar caos a um sistema geralmente é creditada ao Netflix. Em 2011, a empresa publicou Chaos Monkey, uma ferramenta que ela construiu para desativar partes de sua infraestrutura de produção. Ao induzir falhas aleatórias em ambientes monitorados, a Netflix descobriu que poderia descobrir problemas ocultos que passavam despercebidos durante os testes regulares.

A engenharia do caos fornece um efeito de resposta imunológica. É semelhante a como vacinamos pessoas saudáveis. Você propositalmente introduz uma ameaça, potencialmente causando problemas breves, mas observáveis, a fim de desenvolver uma resistência mais forte a longo prazo.

Criação de resiliência

É seguro presumir que qualquer sistema suficientemente grande contém bugs que você não conhece. Apesar de todos os seus testes automatizados e do uso diário no mundo real, você não consegue pegar tudo. Alguns problemas só aparecem em cenários muito específicos, como perda de conectividade com um serviço de terceiros.

A engenharia do caos aceita que problemas operacionais imprevistos sempre serão um fato da vida, mesmo em ambientes de produção supostamente estanques. Considerando que muitas organizações acabam tomando um “ esperar para ver ” abordagem, jogando whack-a-mole conforme relatórios reais chegam, a engenharia do caos trabalha com o princípio de que uma breve interrupção que você invoca é sempre melhor do que aquela que o cliente vê primeiro.

Publicidade

Quebrar coisas propositalmente oferece uma maneira de determinar a resiliência geral do seu sistema. O que acontece se o banco de dados cair? Que tal uma interrupção em seu serviço de envio de e-mail de terceiros? A maior força da engenharia do caos é sua capacidade de reproduzir eventos que os testes de unidade e o uso no mundo real por si só não costumam cobrir.

As ferramentas de teste do caos geralmente são executadas em implantações reais para eliminar discrepâncias entre os ambientes de desenvolvimento e produção. No entanto, você não precisa se arriscar tanto: contanto que tenha certeza de que pode replicar sua infraestrutura com precisão, você pode usar a técnica em um ambiente de teste em sandbox.

Adicionando caos a seus sistemas

Você tem várias opções se quiser adicionar um pouco de caos à sua infraestrutura. Ferramentas automatizadas construídas para essa finalidade fornecem um ponto de partida, mas podem ser difíceis de incorporar em sua própria infraestrutura. Normalmente, você precisa se integrar a plataformas de gerenciamento de VM ou contêiner para que a ferramenta possa interagir com suas próprias instâncias.

No caso do Chaos Monkey, você precisa usar o Spinnaker, a plataforma de entrega contínua da Netflix. Embora tenha ampla compatibilidade com provedores de nuvem pública populares, é também outra dependência que você está adicionando à sua pilha.

Se você estiver usando o Kubernetes, o kube-monkey pega os princípios originais do Netflix e os empacota para uso em seu cluster. Ele funciona de forma opcional, de modo que os recursos do Kubernetes com o rótulo kube-monkey / enabled estarão qualificados para encerramento aleatório.

Pumba fornece recursos semelhantes para contêineres Docker regulares. Ele pode provocar travamentos de contêineres, sobrecarregar as permissões de recursos, como CPU e memória, e causar falhas de rede.

Publicidade

Uma ferramenta que visa especificamente erros de rede é o Toxiproxy da Shopify. Isso fornece um proxy TCP que simula uma ampla gama de condições de rede. Você pode filtrar o tráfego do seu aplicativo por meio do Toxiproxy para ver como o sistema funciona com latência severa ou largura de banda reduzida.

Para controle avançado, VMWare &’ s Mangle é um “ orquestrador da engenharia do caos ” que visa vários mecanismos de implantação diferentes. Funciona com Kubernetes, Docker, VMware vCenter e conexões SSH genéricas. O Mangle permite definir falhas personalizadas para componentes de aplicativos e infraestrutura. As falhas do aplicativo devem afetar um único serviço. As falhas de infraestrutura visam componentes compartilhados que podem interromper vários serviços.

Embora a engenharia do caos seja mais comumente associada ao desenvolvimento de back-end e DevOps, também há um interesse crescente entre os engenheiros de front-end. React Chaos é uma biblioteca que lança erros aleatórios de componentes React, permitindo que você identifique seções de IU instáveis ​​que podem travar todo o seu aplicativo.

Projetando seus próprios experimentos do caos

Se você não conseguir usar uma ferramenta do caos de código aberto, projete seus próprios experimentos. Faça uma lista das suposições dentro do ambiente de seu aplicativo. Identifique as conexões entre os serviços e pense no que aconteceria se um deles caísse.

Em seguida, você precisa testar sua hipótese. Quebre o sistema e observe as consequências. Em seguida, determine se o efeito foi aceitável. O aplicativo travou e exibiu um rastreamento de pilha para o usuário? Ou mostrou uma página de status de interrupção e enviou por e-mail o rastreamento de pilha para sua equipe de plantão?

É importante manter cada teste pequeno e focado. Isso limita o impacto no caso de uma interrupção da produção e ajuda você a ter certeza de que o problema surge da suposição testada, não de outra parte do sistema.

Publicidade

Sempre certifique-se de ter um procedimento de recuperação claro antes de conduzir manualmente um experimento do caos. Transformar uma interrupção provocada em uma interrupção ativa e não planejada é a última coisa que você deseja. Se você estiver encerrando um serviço, fique atento ao tempo que precisará para reiniciá-lo. Pode haver impactos indiretos em seu aplicativo durante interrupções mais longas: se você sair de um serviço de distribuição de e-mail, pode haver um acúmulo para resolver quando ele ficar online novamente. Esses aspectos precisam ser incorporados ao seu plano de ação antes de você começar a trabalhar.

Após a conclusão da sua experiência, pode ser necessário atualizar o sistema antes de executar o teste novamente. Testar sua correção melhora a situação e permite que você tenha certeza de que seu sistema agora é resiliente a esse cenário específico.

Aqui está um resumo do processo do experimento do caos:

  • Desenvolva uma hipótese: “ O sistema é resiliente ao aumento da latência da rede. ”
  • Crie um experimento focado: “ Aumentaremos artificialmente a latência para 500 ms em 70% das solicitações. ” Certifique-se de ter uma estratégia clara de reversão e recuperação.
  • Execute o experimento: observe o impacto em seu aplicativo. Reverta as alterações prejudiciais aos ambientes de produção o mais rápido possível.
  • Analise os resultados: se você decidir que seu sistema não era resiliente o suficiente, implemente melhorias e repita o processo.

O lado não técnico da engenharia do caos

A engenharia do caos é normalmente vista como uma tarefa técnica para equipes de desenvolvimento e operações — afinal, “ engenharia ” está no nome. Além das porcas e parafusos de redes e serviços, é importante também olhar para o lado humano. É fácil pensar que o seu sistema depende apenas de um banco de dados, alguns servidores de aplicativos e uma rede estável. Normalmente não é esse o caso.

Pense em como seu sistema responderia se os membros da equipe não estivessem disponíveis. O conhecimento está prontamente acessível se um administrador precisar recuar inesperadamente? Especialmente em organizações menores, é comum para uma “ equipe ” ser uma pessoa solteira. O que acontecerá se o seu cara de rede ficar doente durante uma interrupção ao vivo?

Da mesma forma que você testa os aspectos técnicos ao abandonar os serviços, também pode antecipar cenários humanos. Tente excluir pessoas-chave propositalmente ao ensaiar uma interrupção. O restante da equipe conseguiu restaurar o serviço a um estado aceitável? Se não fossem, você pode se beneficiar documentando mais sobre o sistema e suas dependências.

Resumo

O termo “ engenharia do caos ” refere-se à prática de quebrar coisas propositalmente na produção para descobrir problemas anteriormente ocultos. Embora a abordagem possa parecer assustadora no início, ferramentas dedicadas como o Chaos Monkey podem ajudá-lo a começar com risco mínimo.

Publicidade

Adicionar caos é uma técnica útil, pois revela problemas transitórios e sistêmicos. Você pode descobrir que o pico de uso de memória causa impactos indiretos em sua infraestrutura, mas o aumento da latência da rede tem um efeito esporádico em partes específicas de sua pilha.

O uso eficaz da engenharia do caos pode ajudá-lo a encontrar bugs mais rapidamente, antes que seus clientes os notem. Ele ajuda você a construir resiliência em seu sistema, incentivando a antecipação de problemas. A maioria das equipes ainda resolve os problemas de forma reativa, levando a um aumento do tempo de ciclo que impede a eficiência.

A engenharia do caos é melhor tratada como uma mentalidade, em vez de um procedimento específico ou produto de software. Se você reconhece que os sistemas tendem ao caos, você &’ naturalmente começará a fornecer suporte para mais “ e se ” cenários em seu código.

Sempre vale a pena pensar no “ impossível ” eventos, como uma interrupção do data center ou congestionamento de rede severo. Na realidade, eles não são impossíveis, apenas extremamente raros. Quando eles atacam, provavelmente são os eventos mais destrutivos que seu sistema encontra, a menos que sua infraestrutura esteja preparada para lidar com eles com rotinas de fallback.

Nenhum comentário