Engenharia do Caos

Helton Denis
4 min readJul 17, 2021

--

A Engenharia do caos é uma disciplina voltada a experimentos em um sistema a fim de construir confiança na capacidade de resistir a condições extremas em ambientes de produção. Hoje em dia grande parte dos sistemas distribuídos em grande escala estão mudando o jogo da engenharia de software. Muito utilizado em equipes de SRE e DevOps que convivem com tais situações no dia a dia a pergunta surge qual o nível de confiança que podemos ter nos nossos sistemas em produção?

Mesmo que todos os serviços funcionem corretamente, as interações entre serviços podem causar resultados imprevisíveis. Resultados onde eventos raros estão sujeitos a acontecer e podem afetar ambientes em produção e acabam tornando esses sistemas distribuídos extremamente caóticos. Precisamos além de identificar, criar formas de mitigar repetições ao erro, fraquezas sistêmicas podem assumir a rotina de uma equipe de engenharia, ocasionando falhas em cascata e erros repetitivos, precisamos de uma maneira de gerenciar o caos a esses sistemas visando o aumento de flexibilidade, velocidade e confiança nas implantações de produção apesar da complexidade.

Precisamos de uma maneira de gerenciar o caos inerente a esses sistemas, tirar proveito do aumento da flexibilidade e da velocidade e ter confiança em nossas implantações de produção, apesar da complexidade que representam.

O CAOS, NA PRÁTICA

Para abordarmos especificamente as incertezas dentro de um sistema distribuído utilizamos alguns experimentos para encontrarmos as nossas fraquezas sistêmicas:

  1. Comece definindo um estado estacionário como alguma saída mensurável de um sistema que indica o comportamento normal.
  2. Crie hipóteses onde o estado estacionário continuará no grupo de controle e no grupo experimental.
  3. Apresente variáveis que sejam similares a eventos do ambiente em produção, como servidores com alta latência ou sob ataque, conexões de rede interrompidas e assim por diante.
  4. Busque refutar suas hipóteses identificando diferenças no estado estacionário entre o grupo de controle e o grupo experimental.

Quanto mais difícil for quebrar o estado estacionário, maior será a confiança que teremos no comportamento do nosso sistema, porém se uma fraqueza for descoberta enfim teremos uma meta de melhoria!

Princípios avançados

Os princípios a seguir descrevem uma aplicação ideal da Engenharia do Caos, aplicada aos processos de experimentação descritos acima. O grau em que esses princípios são perseguidos está fortemente correlacionado à confiança que podemos ter em um sistema distribuído em escala.

Construir uma hipótese em torno do comportamento de estado estacionário.

Concentre-se nos outputs que podem ser mensuráveis dentro da sua topologia ao invés dos atributos internos do sistema, taxas de transferência em geral do sistema, taxas de erros, percentis de latência, etc. Ao focar nos padrões de comportamento sistêmico durante os testes o caos verifica se o sistema funciona, em vez de tentar validar como ele funciona.

Variar eventos reais

Variáveis de caos refletem eventos reais, sempre priorize eventos por impacto potencial ou a sua frequência estimada. Considere os eventos de falha de hardware como servidores em declínio e falhas em software como respostas malformadas e eventos de “não falha” como um pico no tráfego ou um evento de escalonamento. Qualquer evento capaz de interromper o estado estacionário é uma variável potencial em um experimento de caos.

Executando experimentos em produção

Sistemas se comportam de maneira diferente dependendo do ambiente e seus padrões de tráfego, o comportamento de utilização pode mudar de um sistema em produção para um ambiente de teste por isso é sempre importante a amostragem do tráfego real, sendo a única forma de capturar dados confiáveis, faça experimentos diretamente do tráfego de produção.

Automatize seus experimentos

Sem automação os testes se tornam extremamente manual, gerando muito trabalho e a longo prazo se tornando algo insustentável. Automatize seus experimentos e execute-os continuamente. A base da Engenharia do Caos é automatizar e conduzir a orquestração e a análise.

Minimize o raio de explosão.

A experimentação na produção tem o potencial de causar stress desnecessário a toda equipe e pior ainda, impactar seus clientes. Embora deva haver uma tolerância a falhas de curto prazo, é responsabilidade das equipes de SRE garantir que as consequências dos experimentos sejam minimizadas e contidas. A engenharia do caos é uma prática poderosa que vem mudando como tratamos engenharia de sistemas e infraestrutura das maiores operações do mundo. Onde outras práticas tratam apenas de velocidade e flexibilidade, a Engenharia do Caos aborda a incerteza sistêmica em sistemas distribuídos, os princípios do Caos fornecem confiança para errar rapidamente e acima de tudo não repetir erros conhecidos.

--

--