Engenharia do Caos: 11 Ferramentas para Testar a Resiliência da Sua Produção

Vamos explorar como você pode assegurar a estabilidade da sua produção com o auxílio das ferramentas de Engenharia do Caos.

A Engenharia do Caos é uma prática onde você realiza testes em seu sistema ou aplicativo com o objetivo de revelar fragilidades e falhas de capacidade. Estas são situações que você talvez não tenha previsto durante a criação. Assim, você provoca falhas intencionalmente em seu sistema para expor suas deficiências, permitindo que correções sejam feitas e tornando seu sistema e aplicativo mais resilientes.

Diversas organizações de destaque, como Netflix, LinkedIn e Facebook, adotam a Engenharia do Caos para aprimorar a compreensão de suas arquiteturas de microsserviços e sistemas distribuídos. Isso facilita a identificação de problemas emergentes antes que os usuários reais os reportem, permitindo a implementação de medidas corretivas. Essa abordagem possibilita que essas empresas atendam a milhões de usuários, aumentem sua produtividade e economizem somas consideráveis de dinheiro 🤑.

Benefícios da Engenharia do Caos:

  • Minimiza perdas financeiras através da detecção de problemas críticos.
  • Reduz a incidência de falhas no sistema ou aplicativo.
  • Otimiza a experiência do usuário, reduzindo interrupções e assegurando alta disponibilidade do serviço.
  • Contribui para o aprendizado sobre o sistema e aumenta a confiança na sua estabilidade.

Quão seguro você se sente em relação à confiabilidade da sua produção? Ela está realmente preparada para resistir a desastres?

Vamos analisar isso com a ajuda das seguintes ferramentas populares de teste de caos.

Chaos Mesh

Chaos Mesh é uma plataforma de gestão de Engenharia do Caos que insere falhas em todas as camadas de um sistema Kubernetes. Isso engloba pods, rede, operações de E/S e o kernel. O Chaos Mesh possui a capacidade de interromper automaticamente pods Kubernetes e simular latências. Também pode interferir na comunicação entre pods e emular erros de leitura/gravação. Permite o agendamento de regras para experimentos e a definição do seu escopo. Esses experimentos são configurados por meio de arquivos YAML.

O Chaos Mesh oferece um painel para visualizar análises sobre os experimentos. Ele opera sobre o Kubernetes e tem suporte para a maioria das plataformas de nuvem. É um projeto de código aberto e foi recentemente aceito como um projeto sandbox pela CNCF. Ao aplicar os princípios da Engenharia do Caos, você pode integrar o Chaos Mesh ao seu fluxo de trabalho DevOps para criar aplicativos resilientes.

Características da Engenharia do Caos:

  • Facilmente implantável em clusters Kubernetes, sem necessidade de modificar a lógica de implantação.
  • Não requer dependências exclusivas para sua implantação.
  • Define objetos de caos usando CustomResourceDefinitions (CRD).
  • Oferece um painel para acompanhar todos os experimentos.

Chaos Toolkit é uma ferramenta simples e de código aberto para automatizar experimentos de Engenharia do Caos.

Você pode integrar o Chaos ToolKit ao seu sistema por meio de um conjunto de drivers ou plugins compatíveis com AWS, Google Cloud, Slack, Prometheus, entre outros.

Recursos do Chaos ToolKit:

  • Oferece uma API aberta e declarativa para criar experimentos de caos independentes de fornecedores ou tecnologias.
  • Pode ser facilmente integrado em pipelines CICD para automação.
  • Fornece suporte comercial e empresarial através da ChaosIQ.

ChaosKube

Como o nome sugere, esta ferramenta é voltada para o Kubernetes.

Chaoskube é uma ferramenta de caos de código aberto que elimina pods aleatórios periodicamente em um cluster Kubernetes. Isso ajuda a entender como seu sistema se comporta quando um pod falha. Por padrão, ele remove um pod em qualquer namespace a cada 10 minutos. Você pode filtrar os pods a serem removidos usando namespaces, rótulos e anotações. Sua instalação é simples e direta.

Chaos Monkey

Chaos Monkey é uma ferramenta utilizada para avaliar a resiliência de sistemas na nuvem, criando falhas intencionalmente para compreender sua reação. A Netflix a desenvolveu para testar a robustez e a capacidade de recuperação da sua infraestrutura AWS. Recebeu o nome de Chaos Monkey devido à sua capacidade de gerar destruição, tal como um macaco selvagem, para testar as falhas.

Além disso, o Chaos Monkey foi o catalisador para a nova prática de Engenharia do Caos. Foi criada com base na premissa de que é preferível falhar de forma controlada e repetida para evitar falhas significativas e inesperadas.

Características do Chaos Monkey:

  • Ajuda a preparar-se para falhas aleatórias de instâncias.
  • Incentiva a redundância para lidar com falhas inesperadas.
  • Utiliza o Spinnaker para garantir a compatibilidade entre nuvens.
  • Oferece agendamento configurável para simular falhas.
  • Integrado com govendor para adicionar novas dependências ao Chaos Monkey.

Simmy

Simmy é uma ferramenta de caos que injeta falhas, integrando-se ao projeto de resiliência Polly para .NET. Permite que você crie políticas de injeção de caos através do Polly, onde seus códigos são executados. Oferece diversas políticas, como a política de exceções para injetar exceções no sistema e a política de comportamento para inserir novos comportamentos. Essas políticas são projetadas para inserir comportamentos aleatoriamente.

Características do Simmy:

  • Oferece políticas Monkey ou Chaos para inserir caos.
  • Facilita o teste de falhas de dependência.
  • Ajuda a reverter rapidamente para o modelo de trabalho e controla o raio de impacto.
  • Está pronta para uso em produção.
  • Permite a definição de falhas com base em fatores externos (como falhas decorrentes da configuração global).

Pystol

Pystol é uma ferramenta empregada para inserir falhas em ambientes nativos da nuvem. Ele monitora eventos no ETCD por meio de operadores Kubernetes. Quando uma ação de injeção de falha é acionada, os operadores criam pods e executam coleções do Ansible. Assim, os desenvolvedores não precisam escrever suas próprias ações.

O Pystol fornece ações prontas para testar o sistema, mas os desenvolvedores podem criar novas ações utilizando GoLang e Python.

Oferece um painel de integração contínua para fornecer uma visão geral das operações. O Pystol pode ser executado localmente ou implantado em um contêiner usando sua imagem docker. Ele fornece duas interfaces: uma interface de usuário web e uma interface de linha de comando (CLI), sendo a interface web a opção mais amigável.

Muxy

Muxy é um proxy para testar padrões de resiliência e tolerância a falhas em sistemas distribuídos no mundo real. Ele pode manipular o nível de transporte (camada 4), o nível de sessão TCP (camada 5) e o nível do protocolo HTTP (camada 7).

Características do Muxy:

  • Arquitetura modular e facilmente extensível.
  • Possui contêiner docker oficial.
  • Fácil de instalar, sem dependências necessárias.
  • Ideal para testes contínuos de resiliência.
  • Simula problemas de conectividade de rede para sistemas distribuídos e dispositivos móveis.

Pumba

Pumba é uma ferramenta de linha de comando que realiza testes de caos em contêineres docker. Com o Pumba, você intencionalmente impede o funcionamento dos contêineres docker do aplicativo para observar como o sistema reage. Você também pode realizar testes de estresse nos recursos do contêiner, como CPU, memória, sistema de arquivos, entrada/saída, etc.

Pumba também pode ser executado em um cluster Kubernetes. Para isso, você precisa usar DaemonSets para implantar o Pumba em nós do Kubernetes. Vários contêineres Pumba podem ser utilizados para executar diversos comandos no mesmo DaemonSet.

ChaosBlade

ChaosBlade é uma ferramenta de código aberto para inserir experimentos nos sistemas do Alibaba. Ela testa todas as falhas enfrentadas pelo Alibaba nos últimos dez anos e aplica as melhores práticas para evitá-las. Segue os princípios da Engenharia do Caos para verificar a tolerância a falhas em sistemas distribuídos.

Características do ChaosBlade:

  • Oferece cenários experimentais para diversos recursos como CPU, rede, memória e disco.
  • Fornece cenários experimentais para nós, redes e pods na plataforma Kubernetes.
  • Disponibiliza comandos CLI fáceis de usar para executar experimentos.

Litmus

Litmus segue os princípios de Engenharia do Caos nativos da nuvem. O objetivo do Litmus é fornecer uma estrutura abrangente para identificar vulnerabilidades em seus sistemas Kubernetes e em aplicativos que estão sendo executados no Kubernetes.

Ele emprega um operador de caos e CRDs (CustomResourceDefinitions) para permitir a capacidade plug-and-play. A abordagem consiste em colocar sua lógica de caos em uma imagem docker, integrá-la em uma estrutura Litmus e orquestrá-la usando os CRDs.

Características do Litmus:

  • Auxilia engenheiros de confiabilidade de site (SRE) e desenvolvedores a encontrar vulnerabilidades em sistemas Kubernetes.
  • Fornece experimentos genéricos prontos para uso.
  • Oferece uma API de caos para gerenciar o fluxo de trabalho de caos.
  • O Litmus SDK suporta Go, Python e Ansible para a criação de seus próprios experimentos.

Gremlin

Gremlin ajuda engenheiros a construir softwares mais resilientes. Fornece uma plataforma para conduzir experimentos de Engenharia do Caos de forma segura e direta.

Com o Gremlin, você pode injetar falhas em hosts ou contêineres, independentemente de onde eles estejam: seja na nuvem pública ou em seu próprio data center.

Características do Gremlin:

  • Instala um agente leve em seus hosts ou contêineres para injetar falhas.
  • Fornece mais de 10 modos de ataque de infraestrutura distintos.
  • Os gremlins de estado permitem que você manipule o horário do sistema, desligue ou reinicie hosts e elimine processadores.
  • Os gremlins de rede podem injetar latência, introduzir perda de pacotes ou descartar o tráfego.
  • Ataques da biblioteca Alfi do Gremlin podem ser configurados, iniciados e interrompidos por meio do aplicativo da web, API ou CLI.
  • Permite que você direcione o raio de explosão com precisão.
  • Permite interromper todos os ataques e reverter o sistema para um estado estável.

Steadybit

Steadybit busca reduzir o tempo de inatividade de forma proativa e oferece visibilidade sobre problemas do sistema. Esta ferramenta pode ser executada localmente em sua infraestrutura ou na nuvem como serviço (SaaS).

Para usar o Steadybit, você define a situação, simula os experimentos, executa os experimentos simulados em produção e automatiza todos os experimentos. Ele executa agentes inteligentes em seu sistema para identificar possíveis problemas e vulnerabilidades, integrando-se facilmente com diversos sistemas.

Conclusão

Não hesite em aplicar os princípios da Engenharia do Caos e testar sua produção com as ferramentas mencionadas acima. Elas o ajudarão a identificar diversas vulnerabilidades não detectadas em seu sistema e a torná-lo mais resiliente.