Pesquisa de site

O que é Engenharia do Caos? Princípios, benefícios e ferramentas


Encontrar falhas em um sistema distribuído vai além da capacidade dos testes de aplicativos padrão. As empresas precisam de maneiras mais inteligentes de testar microsserviços continuamente. Uma estratégia que está ganhando popularidade é a engenharia do caos.

Usando essa prática de teste proativa, uma organização pode procurar e corrigir falhas antes que elas causem uma interrupção dispendiosa. Continue lendo para saber como a engenharia do caos melhora a confiabilidade de sistemas distribuídos em grande escala.

O que é engenharia do caos? Definiram

A engenharia do caos é uma estratégia para descobrir vulnerabilidades em um sistema distribuído. Esta prática requer a injeção de falhas e erros no software durante a produção. Depois de causar um bug intencionalmente, monitore os efeitos para ver como o sistema responde ao estresse.

Ao “quebrar coisas” propositalmente, você descobre novos problemas que podem impactar os componentes e os usuários finais. Aborde os pontos fracos identificados antes que causem perda de dados ou impacto no serviço.

A engenharia do caos permite que um administrador:

  • Identifique pontos fracos em um sistema.
  • Veja em tempo real como um sistema responde à pressão.
  • Prepare a equipe para falhas reais.
  • Identifique bugs que ainda não causam problemas em todo o sistema.

A Netflix foi a primeira organização a introduzir a engenharia do caos. Em 2010, a empresa lançou uma ferramenta chamada Chaos Monkey. Com esta ferramenta, os administradores conseguiram causar falhas em locais aleatórios em intervalos aleatórios. Essa abordagem de teste tornou o sistema distribuído baseado em nuvem da Netflix muito mais resistente a falhas.

Quem usa a engenharia do caos?

Muitas empresas de tecnologia praticam a engenharia do caos para melhorar a resiliência dos sistemas distribuídos. A Netflix continua a ser pioneira nesta prática, mas empresas como Facebook, Google, Microsoft e Amazon têm modelos de testes semelhantes.

As organizações mais tradicionais também aderiram aos testes de caos. Por exemplo, o National Australia Bank aplicou o caos para desligar servidores aleatoriamente e construir resiliência do sistema.

A necessidade de engenharia do caos

Peter Deutsch e seus colegas da Sun Microsystem listaram oito suposições falsas que os programadores costumam fazer sobre sistemas distribuídos:

  • A rede é confiável.
  • A latência é zero.
  • A largura de banda é infinita.
  • A rede é segura.
  • A topologia nunca muda.
  • Existe um administrador.
  • O custo de transporte é zero.
  • A rede é homogênea.

Essas falácias mostram a dinâmica de uma aplicação distribuída projetada em uma arquitetura de microsserviços. Esse tipo de sistema tem muitas partes móveis e os administradores têm pouco controle sobre a infraestrutura em nuvem.

Mudanças constantes na configuração causam comportamento inesperado do sistema. É impossível prever esses comportamentos, mas podemos reproduzi-los e testá-los com a engenharia do caos.

Diferença entre engenharia do caos e testes de falhas

Um teste de falha examina uma única condição e determina se uma propriedade é verdadeira ou falsa. Tal teste quebra um sistema de uma forma preconcebida. Os resultados geralmente são binários e não revelam novas informações sobre o aplicativo.

O objetivo de um teste de caos é gerar novo conhecimento sobre o sistema. O escopo mais amplo e os resultados imprevisíveis permitem que você aprenda sobre os comportamentos, propriedades e desempenho do sistema. Você abre novos caminhos para exploração e vê como pode melhorar o sistema.

Embora diferentes, os testes de caos e falhas têm algumas sobreposições nas preocupações e nas ferramentas utilizadas. Você obtém os melhores resultados ao usar ambas as disciplinas para testar um aplicativo.

Como funciona a engenharia do caos

Todos os testes na engenharia do caos acontecem através dos chamados experimentos do caos. Cada experimento começa injetando uma falha específica em um sistema, como latência, falha de CPU ou buraco negro na rede. Os administradores então observam e comparam o que acham que ocorrerá com o que realmente acontece.

Um experimento normalmente envolve dois grupos de engenheiros. O primeiro grupo controla a injeção de falhas e o segundo grupo trata dos efeitos.

Aqui está um fluxo passo a passo de um experimento do caos:

Etapa 1: Criando uma Hipótese

Os engenheiros analisam o sistema e escolhem qual falha causar. A etapa central da engenharia do caos é prever como o sistema se comportará ao encontrar um bug específico.

Os engenheiros também precisam determinar limites métricos críticos antes de iniciar um teste. As métricas normalmente vêm em dois conjuntos:

  • Métricas principais: essas são as principais métricas do experimento. Por exemplo, você pode medir o impacto na latência, nas solicitações por segundo ou nos recursos do sistema.
  • Métricas do cliente: são métricas de precaução que informam se o teste foi longe demais. Exemplos de métricas de clientes são pedidos por minuto ou início de stream por segundo. Se um teste começar a impactar as métricas do cliente, isso é um sinal para os administradores pararem de experimentar.

Em alguns testes, as duas métricas podem se sobrepor.

Etapa 2: injeção de falha

Os engenheiros adicionam uma falha específica ao sistema. Como não há como ter certeza de como o aplicativo se comportará, sempre existe um plano de backup.

A maioria das ferramentas de engenharia do caos tem uma opção reversa. Dessa forma, se algo der errado, você poderá abortar o teste com segurança e retornar ao estado estacionário do aplicativo.

Etapa 3: Medindo o Impacto

Os engenheiros monitoram o sistema enquanto o bug causa problemas significativos. As principais métricas são a principal preocupação, mas sempre monitoram todo o sistema.

Se o teste iniciar uma interrupção simulada, a equipe procura a melhor forma de corrigi-la.

Etapa 4: verifique (ou refute) sua hipótese

>

Um teste de caos bem-sucedido tem um de dois resultados. Você verifica a resiliência do sistema ou encontra um problema que precisa corrigir. Ambos são bons resultados.

Princípios da Engenharia do Caos

Embora o nome possa sugerir o contrário, não há nada aleatório na engenharia do caos.

Este método de teste segue princípios rígidos, que incluem os seguintes princípios:

Conheça o estado normal do seu sistema

Defina o estado estacionário do seu sistema. O comportamento normal de um sistema é um ponto de referência para qualquer experimento de caos. Ao compreender o sistema quando ele está íntegro, você compreenderá melhor o impacto de bugs e falhas.

Injete bugs e falhas realistas

Todos os experimentos devem refletir cenários realistas e prováveis. Ao injetar uma falha na vida real, você tem uma boa noção de quais processos e tecnologias precisam de atualização.

Teste em produção

Você só poderá ver como as interrupções afetam o sistema se aplicar o teste a um ambiente de produção.

Se sua equipe tem pouca ou nenhuma experiência com testes de caos, deixe-os começar a experimentar em um ambiente de desenvolvimento. Teste o ambiente de produção quando estiver pronto.

Controle o raio da explosão

Sempre minimize o raio de explosão de um teste de caos. Como esses testes acontecem em um ambiente de produção, há uma chance de que o teste afete os usuários finais.

Outra precaução padrão é ter uma equipe pronta para uma resposta real a incidentes, apenas para garantir.

Caos Contínuo

Você pode automatizar experimentos de caos no mesmo nível do pipeline de CI/CD. O caos constante permite que sua equipe melhore continuamente os sistemas atuais e futuros.

Benefícios da Engenharia do Caos

Os benefícios da engenharia do caos abrangem diversas frentes de negócios:

Benefícios comerciais

A engenharia do caos ajuda a impedir grandes perdas de receita, evitando interrupções prolongadas. A prática também permite que as empresas cresçam rapidamente sem perder a confiabilidade dos seus serviços.

Benefícios Técnicos

Os insights dos experimentos de caos reduzem os incidentes, mas não é aí que os benefícios técnicos terminam. A equipe obtém uma maior compreensão dos modos e dependências do sistema, permitindo-lhes construir um design de sistema mais robusto.

Um teste de caos também é um excelente treinamento de plantão para a equipe de engenharia.

Benefícios para o cliente

Menos interrupções significam menos interrupções para os usuários finais. Maior disponibilidade de serviço e durabilidade são os dois principais benefícios da engenharia do caos para o cliente.

Ferramentas de Engenharia do Caos

Estas são as ferramentas de engenharia do caos mais comuns:

  • Chaos Monkey: Esta é a ferramenta original criada na Netflix. Embora tenha sido lançado em 2010, o Chaos Monkey ainda recebe atualizações regulares e é a ferramenta de teste do caos ideal.
  • Gremlin: Gremlin ajuda os clientes a configurar e controlar testes de caos. A versão gratuita da ferramenta oferece testes básicos, como desligar máquinas e simular alta carga de CPU.
  • Chaos Toolkit: Esta iniciativa de código aberto facilita os testes com uma API aberta e um formato JSON padrão.
  • Pumba: Pumba é uma ferramenta de teste de caos e emulação de rede para Docker.
  • Litmus: uma ferramenta de engenharia do caos para cargas de trabalho com estado no Kubernetes.

Para ficar por dentro das novas ferramentas, adicione aos favoritos o diagrama criado pela comunidade Chaos Engineering no Slack. Além das ferramentas, o gráfico também acompanha engenheiros conhecidos que trabalham com testes de caos.

Exemplos de Engenharia do Caos

Não há limites para experimentos de caos. O tipo de testes que você executa depende da arquitetura do seu sistema distribuído e dos objetivos de negócios.

Aqui está uma lista dos testes de caos mais comuns:

  • Simulando a falha de um microcomponente.
  • Desligar uma máquina virtual para ver como uma dependência reage.
  • Simulando uma alta carga de CPU.
  • Desconectando o sistema do data center.
  • Injetando latência entre serviços.
  • Fazendo com que funções lancem exceções aleatoriamente (também conhecido como caos baseado em função).
  • Adicionar instruções a um programa e permitir a injeção de falhas (também conhecida como inserção de código).
  • Interrompendo sincronizações entre relógios do sistema.
  • Emulando erros de E/S.
  • Causando picos repentinos no tráfego.
  • Injetando falhas bizantinas.

Engenharia do Caos e DevOps

A engenharia do caos é uma prática comum na cultura DevOps. Esses testes permitem que o DevOps analise minuciosamente os aplicativos enquanto acompanha o ritmo do desenvolvimento ágil.

As equipes de DevOps geralmente usam testes de caos para definir uma linha de base funcional e tolerâncias para a infraestrutura. Os testes também ajudam a criar melhores políticas e processos, clarificando tanto os resultados estacionários como os caóticos.

Algumas empresas preferem integrar a engenharia do caos em seu ciclo de vida de desenvolvimento de software. O caos integrado permite que as empresas garantam a confiabilidade de cada novo recurso.

Obrigatório para qualquer sistema distribuído de grande escala

O exame contínuo do software é vital tanto para a segurança quanto para a funcionalidade do aplicativo. Ao examinar proativamente um sistema, você pode reduzir a carga operacional, aumentar a disponibilidade e a resiliência do sistema.

Artigos relacionados