ASP.NET Core + Chaos Engineering: simulação de falhas com Polly + Simmy
Em um post anterior demonstrei o uso da biblioteca Polly como solução para simplificar o tratamento de falhas em projetos ASP.NET Core. O exemplo detalhado nesta ocasião envolvia o consumo de uma API REST em uma aplicação baseada em Razor Pages, com a alteração proposital de tal API a fim de gerar erros viabilizando testes com o padrão Retry:
ASP.NET Core + Polly: simplificando o tratamento de falhas em projetos Web
Por mais que a abordagem em questão atingisse meu objetivo inicial, não faz sentido ou até mesmo seria completamente inviável em muitos casos modificar um projeto para que outra aplicação emule falhas. A disciplina conhecida como Chaos Engineering (Engenheria de Caos) procura trazer uma resposta a este tipo de necessidade, fornecendo diretrizes que levaram ao surgimento de inúmeras ferramentas voltadas à simulação de problemas. Há inclusive um manifesto detalhando princípios de Chaos Engineering e que conta com uma versão em português:
Princípios de Engenharia do Caos
E como implementar a simulação de falhas em .NET? Os próprios responsáveis pelo projeto Polly mantêm uma solução conhecida como Simmy, que em muito facilita este tipo de prática. Neste novo artigo retomo o exemplo do primeiro post sobre ASP.NET Core + Polly, acrescentando desta vez o package Polly.Contrib.Simmy à aplicação:
Para a simulação de falhas com Simmy teremos que alterar a classe Startup:
- Uma mensagem (instância de HttpResponseMessage) representando um erro do tipo Internal Server Error (código 500) deverá ser criada — linha 29;
- Uma Policy para simulação de caos (linha 38) será gerada através de uma chamada ao método InjectResultAsync do tipo MonkeyPolicy (namespace Polly.Contrib.Simmy). No método Result foi informada a mensagem simulando o erro do tipo 500, já em InjectionRate consta uma taxa para geração de erros (60% neste caso). Em Enabled conseguimos ativar ou não esta Policy de simulação;
- Na linha 46 será criada uma Policy para tratamento de erros baseada no pattern Retry;
- Estas 2 Policies (Retry + Chaos) serão combinadas em um Policy Wrap (linha 58), que será vinculado ao client de consumo da API via método AddPolicyHandler (linha 61).
O projeto que contém esses ajustes foi disponibilizado no GitHub:
Testes demonstrando esta aplicação com a simulação de falhas via Polly + Simmy podem ser observados no vídeo (gravação de uma live do canal Coding Night):
E concluo este post com um convite…
Caso você precise conhecer mais sobre o Microsoft Azure como um todo, não deixe de aproveitar o preço promocional de lançamento (apenas R$ 120,00) da segunda turma online do treinamento Azure na Prática com foco em Desenvolvimento Web que acontecerá dia 20/06/2020 (um sábado). Aproveite para aprender mais sobre dezenas de serviços e possibilidades oferecidas pelo Azure e, o melhor, no conforto de sua casa! Acesse o link a seguir para informações e efetuar sua inscrição: