Engenharia do Caos

Engenharia do Caos

Engenharia do Caos
Engenharia do Caos significa realizar experimentos em sistemas distribuídos para construir confiança na capacidade do sistema e resistir a condições turbulentas em produção.
Em engenharia de software, cada vez mais ouve-se falar em micro serviços. Como desenvolvedores, conseguimos rapidamente adotar práticas para aumentar a flexibilidade de desenvolvimento e velocidade de implantação de sistemas. Com isso, surgiu uma questão: o quanto podemos confiar nesses sistemas complexos que colocamos em produção?
Mesmo quando todos os serviços de um sistema distribuído estão funcionando corretamente, as interações entre tais serviços podem causar resultados imprevisíveis. Circunstâncias não previstas, mesmo que compostas por eventos raros do mundo real, podem afetar sistemas em produção, possivelmente os deixando em um estado caótico.
Precisamos identificar as fraquezas antes que elas se manifestem em comportamentos inesperados no sistema. Problemas sistemáticos podem se manifestar de diversas formas, entre elas:
  • Comportamento inadequado quando um dos serviços encontra-se indisponível;
  • Múltiplas tentativas de conexão repetidas, normalmente causadas por Timeout mal-configurados;
  • Sistema fora do ar quando um tráfego muito grande de informações é recebido;
  • Falhas em cascata quando um único ponto sofre problemas;
  • Entre outros.
Devemos atacar essas fraquezas proativamente antes que elas afetem os usuários em produção. Precisamos de uma maneira de gerenciar o caos inerente nesses sistemas, conseguir tirar vantagem da flexibilidade e velocidade de desenvolvimento, e ter confiança em nossos sistemas em produção por mais complexos que eles sejam.
Uma abordagem prática consegue atacar o caos em sistemas distribuídos em escala e construir confiança na capacidade desses sistemas em resistir a condições realistas. Podemos aprender como é o comportamento do sistema a partir de observações em um ambiente controlado. Isso é chamado Engenharia do Caos.
Aplicação na Prática
Para atacar a incerteza gerada por sistemas distribuídos em escala, a Engenharia do Caos pode ser pensada como uma forma de facilitar os experimentos para descobrir fraquezas sistêmicas. Esses experimentos seguem quatro passos:
1. Inicia-se definindo um ‘estado estável’ como uma das medidas para indicar comportamento normal;
2. Cria-se a hipótese de que esse ‘estado estável’ se manterá tanto no grupo de controle e no grupo experimental;
3. Introduz-se variáveis que refletem eventos do mundo real como serviços fora do ar, discos rígidos quebrados, problemas em conexão de rede, etc;
4. Tentar averiguar a hipótese analisando as diferenças no estado estável entre o grupo de controle e o grupo experimental.
Quanto mais difícil for quebrar o estado estável, mais confiança temos no comportamento do sistema. Se uma fraqueza é descoberta, é necessário desenvolver melhorias antes que esse comportamento se manifeste no sistema em larga escala.
Conclusão
A Engenharia do Caos é uma prática poderosa que já está mudando a forma como software é desenvolvido nas operações de maior escala no mundo. Enquanto outras práticas ajudam a ter mais velocidade e flexibilidade, a Engenharia do Caos especificamente ataca a incerteza sistêmicas em sistemas distribuídos. Os Princípios do Caos ajudam a ter confiança em inovar rapidamente em larga escala e poder fornecer aos clientes a experiência de alta qualidade que eles merecem.
Quanto mais escalável é a aplicação que estamos desenvolvendo, maior a responsabilidade em manter essa aplicação estável independentemente de condições externas que possam eventualmente afetá-la. No mundo real, nem todo sistema é um Spotify ou Netflix, então tais práticas podem ser executadas conforme a complexidade e disponibilidade esperada do sistema. Para se ter uma aplicação realmente considerada resiliente, a Engenharia do Caos pode ser uma excelente técnica.
Referências:
Principles of Chaos Engineering – https://principlesofchaos.org/