ASP.NET Core + Chaos Engineering: simulação de falhas com Polly + Simmy

Renato Groffe
3 min readMay 18, 2020

--

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:

ASP.NET Core 3.1 + Razor Pages + HTTPClient + Consumo de API REST + Código Resiliente com Polly + Simulação de caos com Simmy

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:

https://bit.ly/anp-online2-blog-groffe-lancamento

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker