terça-feira, 11 de janeiro de 2022

Utilizando a Engenharia do Caos para gerar Soluções Resilientes

 

Todas as empresas estão percebendo os benefícios da transformação digital, com adoção de soluções em nuvem, que por definição oferecem alta escalabilidade e infinito potencial de crescimento rápido, entretanto essa vantagem pode se tornar uma desvantagem se os recursos começarem a falhar em escala também e causarem danos maiores para todos. 

Sendo o caos basicamente um estado de completa desordem e confusão, como esse conceito aliado a engenharia pode oferecer ideias e validações para a prevenção de falhas das nossas soluções?

Atualmente, durante o processo de arquitetura de soluções, principalmente em nuvem, é extremamente usual a inclusão no desenho final, de recursos e técnicas que visam garantir a resiliência das aplicações contra possíveis falhas. Por definição a resiliência é a capacidade de se recuperar de falhas e tudo continuar funcionando, sua principal meta é retornar um aplicativo para um estado totalmente funcional após uma falha. 

Imagine que exista uma forma de submeter um aplicativo ou uma solução, as possíveis falhas que possam ocorrer no mundo real e valide ao mesmo tempo as condições de resiliência, essa prática é conhecida como Engenharia do Caos, seu propósito é testar a resiliência dos sistemas ao conduzir experimentos que injetam falhas, simulando condições reais.

O conceito deste método é similar ao de uma vacina: injetar partes do vírus inofensivas que irão fornecer imunidade ao seu sistema, sem causar nenhum mal.

Entre os principais benefícios desse método está identificar pontos únicos de falhas na arquitetura, com experimentos de abordagem proativa, que resultam na identificação de falhas, mas também insumos para sua solução.

Analisar os efeitos de falhas no mundo real é outro grande benefício, não sabemos exatamente como uma solução se comporta em situações específicas, executando simulações controladas, ajudará a entender o comportamento.

Todo sistema por padrão deve ter uma excelente observância, a utilização da Engenharia do Caos, exige a implementação de mecanismo de monitoramento e alertas que irão melhorar essa observabilidade. 

Mesmo que estejam tratando de micro serviços, por exemplo, existe um grande complexidade de dependência dos sistemas para que o resultado seja alcançado, na maioria das vezes conseguimos isolar um sistema para garantir sua resiliência, entretanto compreender a propagação de falhas entre os componentes, exige um grande conhecimento de todos os comportamentos, e os experimentos da engenharia do Cais proporcionará uma melhor compreensão dos cenários.

A Engenharia do Caos é uma maneira de garantir a previsibilidade das soluções, gerando de uma forma proativa a implementação da cultura de aceitação do erro como parte do processo de aprendizado.


Recentemente a Microsoft anunciou a versão pública do Azure Chaos Studio, uma plataforma de experimentação de engenharia de caos totalmente gerenciada para acelerar a descoberta de situações singulares de falhas. 

Nos desenhos de arquitetura, em teoria pelo menos, conseguimos criar ambientes extremamente resilientes, porém a verdade é que só conseguiremos verificar essa eficiência numa possível falha. Com a ferramenta Azure Chaos Studio podemos criar várias simulações de cenários como,  alto tráfego de clientes, máquinas com 100% de processamento, falta de memória, serviços que são interrompidos ou afetados por problema, entre outras tantas. Esses experimentos irão fornecer resultados e análises que poderão auxiliar em estratégias e ações para mitigar ou validar a confiabilidade das soluções facilmente.

Através da utilização da plataforma Azure Chaos Studio é possível personalizar experimentos de forma simples e fácil, assim como gerenciamos pastas e arquivos, a interface intuitiva auxilia na organização e fornece uma biblioteca (em contínua expansão) de cenários de falhas. 

Em cada passo do experimento você pode utilizar dois tipos de abordagem de injeção de falhas, que pode ser a instalação de agente dentro de máquina virtual, ou chamadas diretas de serviços, como por exemplo chamadas de API. Outra simplicidade, cada experimento é armazenado no formato JSON, o que facilita muito a administração, compreensão e atualização sistêmica. 


Todo experimento poderá ser acoplado numa esteira de CI/CD para validação de testes de integração ou estresse, a adição de falhas durante esse processo pode auxiliar na localização de problemas que usualmente não seriam encontrados pelos testes.

Outra vantagem no momento, é que até abril/2022 a oferta de execução dos experimentos dentro do Azure Chaos será gratuita e após essa data será cobrado com base na duração pela qual as suas ações do experimento são executadas.

Podemos entender, que é fundamental para a qualidade das nossas soluções, que as possíveis falhas ou comportamentos inesperados possam ser identificados e resolvidos antes mesmo que se manifestem. O investimento para garantir a resiliência de uma arquitetura será a entrega de valor com eficiência e eficácia para os clientes. 

Quanto mais escalável e complexa a solução, maior será a responsabilidade em mantê-la estável independentemente das condições externas que possam afetá-la. A Engenharia do Caos auxiliará na garantia da previsibilidade, de uma forma proativa, melhorando a confiabilidade das soluções. 

Fontes

Azure Chaos Studio - https://azure.microsoft.com/services/chaos-studio


Marcelo Goberto de Azevedo 

Cloud Engineering Lead na GFT Brasil

//marcelogoberto.com.br