O que é a Engenharia do Caos?
Seus clientes, clientes, visitantes – e até mesmo funcionários internos – dependem de seus sistemas para estarem funcionando, disponíveis e funcionando o tempo todo. Em um mundo perfeito, nunca haveria um termo para quando sistemas, aplicativos e serviços caíssem, mas este não é um mundo perfeito, e infelizmente, às vezes as coisas não saem como planejado. Paralisações e tempo de inatividade podem custar milhões de dólares às empresas. Às vezes, o melhor plano é um plano para o inesperado, que é exatamente o caos que a engenharia busca resolver. A engenharia do caos, também referida como teste do caos, pode ser considerada uma disciplina, ou abordagem, para testar e construir um sistema que possa suportar falhas ou condições inesperadas.
Com o advento das práticas de DevOps, organizações de startups a empresas adotaram lentamente suas próprias práticas de teste de caos em seus fluxos de trabalho de desenvolvimento. Se a engenharia do caos é realizada por equipes específicas ou como parte das responsabilidades dos engenheiros de confiabilidade do local (SREs),a prática da engenharia do caos foi projetada para descobrir fraquezas ocultas dentro de sistemas, aplicativos e serviços, garantindo que ela possa enfrentar as situações mais extremas para a completa resiliência.
Chaos Engineering vs. Teste de Desempenho
Como testes de estresse ou testes de carga,a engenharia do caos ajuda as equipes a identificar pontos de ruptura ou falhas, criando ambientes anormais ou instáveis. No entanto, uma das principais diferenças entre a engenharia do caos e os testes de desempenho é que a engenharia do caos não se concentra apenas em alguns componentes-chave, mas sim, pode consistir em um número aparentemente ilimitado de fatores, fora do escopo das considerações normais e óbvias de testes. Em ambientes de rede grandes e distribuídos, os sistemas podem falhar por uma variedade de razões que não são tão fáceis de descobrir em comparação com outros ambientes. A descoberta dessas vulnerabilidades ajuda as equipes a entender onde as fraquezas estão localizadas para evitar que essas possíveis falhas ocorram.
O Caos (Engenharia) nasce
A prática da engenharia do caos se originou com a Netflix por volta de 2008, depois que eles lançaram formalmente seu serviço de streaming. Após um problema de corrupção de banco de dados por volta de 2011, a Netflix planejava fazer a transição de seu datacenter para a nuvem via AWS (Amazon Web Services). Na verdade, eles levaram oito anos para finalmente completar a migração. Em 2015, a AWS sofreu uma interrupção, o que fez com que a Netflix ficasse fora do ar por várias horas. Estes foram os primeiros dias da computação em nuvem, por isso não era tão robusto, estável e à prova de falhas como é agora. Quando descobriram que a mudança para a nuvem não criou alguns dos benefícios esperados, como escalabilidade, tempo de atividade, evitando pontos únicos de falha, dimensionamento automático, etc., eles decidiram que precisavam de uma maneira de testar esses inesperados problemas para garantir que seus serviços estejam em funcionamentoe, em última análise, evitando o impacto para os usuários e causando frustração. A partir dessa experiência, nasceu a engenharia do caos.
Princípios e Passos da Engenharia do Caos
A engenharia do caos não procura criar caos apenas para criar o caos. Em vez disso, com base em um conjunto de princípios e etapas precisas, ele é projetado para criar cuidadosamente planos e experimentos com o único propósito de aprender a mitigar o risco em grandes sistemas e redes distribuídos. Listados abaixo estão os passos para criar uma diretriz geral para experimentos de caos.
Passo 1: Crie uma hipótese
Isso consiste em fazer suposições gerais sobre como um sistema responderá à medida que fatores e condições instáveis são introduzidos em comparação com o ambiente normal. É também aqui que você determina quais métricas, como taxas de erro, latência, throughput, etc., devem ser medidas durante o experimento do caos.
Passo 2: Identificar variáveis e antecipar efeitos
Considere o que poderia acontecer quando esses eventos hipotéticos ocorrerem em situações da vida real. Por exemplo, se o seu servidor falhar inesperadamente ou houver um aumento significativo no tráfego, qual será o efeito em seu sistema geral?
Passo 3: Inicie o Experimento
Idealmente, você quer executar sua experiência de caos em um ambiente de produção ao vivo. No entanto, deve haver proteções para evitar que um cenário pior ocorra. Você quer garantir que você ainda tenha algum controle sobre o ambiente se o experimento der errado. Isso também é conhecido como controlar o raio de explosão. Esses experimentos podem ser automatizados para melhor análise, e são mais sustentáveis do que executá-los manualmente. Outro método que às vezes é usado é utilizar um ambiente de teste completo, no entanto, novamente, isso pode não refletir o que acontece no mundo real.
Passo 4: Medir o impacto
Como os resultados se comparam à hipótese inicial? Com base nas métricas que foram definidas na hipótese, o experimento foi muito limitado ou precisa ser dimensionado para melhor identificar erros e falhas? O raio de explosão era muito limitado? Talvez precise ser dimensionado para desencadear essas falhas que ocorreriam em um cenário da vida real. Este experimento também pode descobrir problemas adicionais que precisam ser investigados.
Ferramentas de engenharia do caos
Vamos voltar à introdução da engenharia do caos com a Netflix. Uma vez que eles tomaram a decisão de ir para a ofensiva e iniciar o processo de dedicação de recursos para uma equipe de engenharia, eles precisavam criar um conjunto formalizado de práticas e ferramentas para auxiliar as equipes de engenharia na realização de testes de caos. Um dos primeiros aplicativos que a Netflix introduziu foi chamado Chaos Monkey. Todos os dias, este aplicativo escolheria aleatoriamente um conjunto de clusters e desligaria essa instância em algum momento durante o dia para observar como os sistemas restantes respondiam. Obviamente, isso cria uma experiência dolorosa para as equipes de engenharia que têm dores de cabeça suficientes para lidar diariamente, mas no final do dia, coloca as equipes em uma posição melhor para entender os efeitos dessas paralisações, não apenas em relação à sua rede, mas também em termos de impacto para os usuários.
Embora possa parecer contra-intuitivo dedicar recursos e indivíduos para sair por aí “quebrando” as coisas, a realização proativa desses testes de caos ajuda a construir uma rede mais resiliente e criar uma experiência de usuário melhor e mais confiável. O mundo real não funciona em um ambiente de teste controlado. Desde o início do Chaos Monkey, ele passou por várias atualizações e se tornou um aplicativo de código aberto popular. E uma vez, era apenas uma parte de uma suíte de engenharia de caos chamada Exército Símio. A suíte do Exército Simian foi dissolvida em 2018, mas incluiu os seguintes utilitários de engenharia de caos específicos para tarefas:
Caos Kong
Chaos Kong foi projetado para simular uma região completa da AWS sendo descartada, ou excluída, para ver como o sistema se recuperou e respondeu movendo o tráfego para uma região diferente sem degradação de desempenho. Mais uma vez, isso raramente acontece, mas dentro do escopo da engenharia do caos, nada está fora dos limites.
Macaco de conformidade
Conformity Monkey é um serviço executado em AWS com o objetivo de identificar instâncias que não estavam em conformidade com regras predefinidas. Qualquer caso que não esteja de acordo com as regras, que foram flexíveis o suficiente para serem personalizados e definidos para serem executados em diferentes frequências, foram identificados e uma notificação por e-mail é enviada ao proprietário ou grupo. A Conformity Monkey foi transferida para os serviços da Spinnaker.
Gorila do Caos
Chaos Gorilla é como o Macaco Do Caos, mas em uma escala maior. Em vez de simular falhas em instâncias únicas da AWS, chaos gorilla simulou uma falha de toda uma zona AWS. Este utilitário foi projetado para mostrar como um desastre em larga escala afetou usuários ou clientes em uma região diferente, o que foi perfeito para a forma como a infraestrutura e o modelo de negócios da Netflix foram configurados. Se a plataforma de nuvem puder suportar este teste garantindo corretamente que os balanceadores de carga respondam adequadamente e os serviços permaneçam interrompidos, então ele pode suportar qualquer coisa lançada contra ele.
Macaco de latência
O Macaco de Latência, como o nome indica, é usado para testar serviços contra atrasos de rede, ou falhas completas, para ajudar a identificar como os serviços e suas dependências responderam a esses atrasos simulados. No entanto, como os serviços web em geral, pode haver consequências desconhecidas dentro de outros aplicativos que podem não ser facilmente identificados à primeira vista, e é por isso que um utilitário como o Latency Monkey é tão importante para medir a tolerância a falhas entre os serviços.
Doutor Macaco
O utilitário Doctor Monkey foi usado para executar verificações de integridade em instâncias individuais e monitorar a integridade (carga da CPU, memória, recursos, etc.) do sistema como um todo. Além disso, o Doctor Monkey pode relatar o status da instância e remover quaisquer instâncias do serviço que considere inadequadas para o sistema geral.
18/10 Macaco
O nome para 10-18 Monkey vem das abreviaturas de localização e internacionalização e localização, L10n e i18n. Os números representam o número de letras entre a primeira e a última letras. Como os clientes da Netflix residem em todo o mundo, ter um método para monitorar a confiabilidade de seus serviços de streaming, em diferentes regiões, foi de extrema importância. A vantagem do utilitário 10-18 Monkey é que ele pode verificar problemas de configuração e desempenho em várias regiões geográficas que servem e utilizam diferentes idiomas e conjuntos de caracteres.
Macaco zelador
E todos esses recursos AWS nãousutados? Entra o Zelador Macaco. O objetivo da utilidade do Faitor Macaco é encontrar e remover recursos não uso. Como chaos monkey, ele também é personalizável e extensível o suficiente para ser usado com outros provedores de nuvem. Os usuários fornecem um conjunto de regras e o Zelador Macaco vai trabalhar, identificando esses recursos, grupos e volumes não usos que são candidatos à limpeza e remoção e envia uma notificação. Com o tempo, a funcionalidade foi substituída por um novo serviço chamado Swabbie.
Conclusão: Engenharia do Caos – Princípios, Exemplos & Ferramentas
Com o tempo, a engenharia do caos tornou-se sua própria indústria plena. Há agora uma miríade de ferramentas comerciais e de código aberto, como Litmus Chaos, Gremlin, Chaos Mesh, e muitas outras, que as organizações podem utilizar. Construir sistemas resilientes não é apenas para empresas de tecnologia. Os sistemas distribuídos tornaram-se mais complexos, o que significa que as falhas são mais difíceis de prever. Além disso, devido a vários problemas regulatórios e de conformidade, bancos, entidades governamentais, empresas farmacêuticas, instituições educacionais, etc., precisam testar regularmente seus sistemas e serviços para garantir que eles atendam aos requisitos de negócios e de missão crítica. Testes de desempenho e testes de caos são abordagens proativas para aprender a construir sistemas resilientes através da observação de falhas.