Padrão Retry com Polly e ASP.NET Core

Padrão Retry com Polly e ASP.NET Core Fala dev .NET, tudo bem? No artigo de hoje vou explorar o conceito de resiliência e como o Padrão Retry e a biblioteca Polly podem ajudar nisso. Também vou relacionar esse tema com arquitetura de microsserviços, onde sua importância aumenta ainda mais. Introdução a Resiliência É importante deixar claro que falhas podem ocorrer independente da arquitetura utilizada, já que de alguma forma sistemas na maioria das vezes dependem de componentes externos, como bancos de dados ou APIs terceiras. Porém, quando se trabalha com arquiteturas baseadas em microserviços, é fundamental entender que existem maior espaço para falhas acontecerem. Seja um serviço temporariamente indisponível ou uma falha na rede, esses são problemas comuns que precisamos aprender a lidar. É aí que entra o conceito de resiliência. A resiliência é a capacidade de um sistema se recuperar rapidamente de falhas e continuar fornecendo suas funcionalidades de maneira correta. Isso é especialmente crítico em microserviços, pois falhas em um único serviço podem se propagar e afetar toda a aplicação. A ideia não é evitar falhas. Afinal, isso seria impossível! O objetivo é minimizar o impacto que essas falhas podem ter. Para isso, podemos utilizar técnicas e padrões específicos, como o Padrão Retry, que vou explorar agora. Sobre o padrão Retry O Padrão Retry é uma estratégia simples, mas poderosa, para aumentar a resiliência de um sistema. A ideia é tentar novamente uma operação que falhou, na esperança de que ela possa ter sucesso nas tentativas subsequentes. Por exemplo, se um microserviço está temporariamente indisponível devido a uma sobrecarga ou outra razão, tentar a operação novamente após um curto período de tempo pode resolver o problema. No entanto, é importante ter cuidado para não sobrecarregar ainda mais o serviço com tentativas excessivas de retry. Conhecendo o Polly Com esses conceitos em mente, vamos falar sobre o Polly. Esta biblioteca .NET ajuda a implementar políticas de resiliência, como o padrão Retry, de uma maneira fácil e descomplicada. No Polly, você pode configurar uma política de retry para especificar o número de tentativas e o tempo entre elas. Além do padrão Retry, o Polly suporta muitas outras políticas, como Circuit Breaker e Fallback, que permitem que você construa sistemas altamente resilientes. Polly e ASP.NET Core Agora, vamos ver como usar o Polly com o ASP.NET Core. A configuração é bem simples e pode ser feita diretamente no Program.cs do seu projeto. Além disso, Polly se integra perfeitamente com o HttpClientFactory do ASP.NET Core, permitindo que você aplique políticas de resiliência às suas chamadas HTTP. O primeiro passo é instalar o pacote: Com isso, vamos no Program.cs. Porém, antes de mostrar a configuração, vou apresentar brevemente nosso serviço de integração simples que criei. A API com a qual estou me comunicando é um projeto simples em ASP.NET Core, que só responde o código 204 (Sucesso, No Content). Interface do serviço: Implementação do serviço: Você pode estar se perguntando o que o HttpClient faz aí, mas não se preocupe. Na configuração que faremos a seguir o HttpClient vai estar disponível via injeção de dependência com as políticas de resiliência aplicadas. O cenário é de integração com um serviço terceiro para sincronizar dados ao ter um novo cadastro de cliente. Com o serviço apresentado, vamos à configuração no Program.cs. A primeira linha se refere à injeção de dependência do serviço, logo não tem a ver diretamente com a resiliência utilizando Polly. Já da terceira em diante, configuramos o uso de HttpClient com políticas de re-tentativa para nosso serviço, definindo uma quantidade de tentativas igual a 2, com tempo aumentando de forma exponencial. Com a nossa configuração feita, mostro o uso do serviço no Controller, fazendo um testes: um com o serviço com o qual vamos integrar em execução, e outro com ele desligado. E logo abaixo o resultado de nossos testes. Note que a requisição foi bem sucedida nesse caso, já que o serviço está em execução. Agora vou parar a execução do serviço e vamos ver o resultado. Notamos agora que houveram duas tentativas adicionais, com a exceção sendo lançada em seguida. Com isso, demonstramos o uso da biblioteca Polly para a implementação do padrão Retry, que resulta em maior resiliência em nosso serviços. E é isso aí, dev .NET! Resiliência e padrão Retry são conceitos-chave para construir microserviços robustos e confiáveis. E com o Polly e o ASP.NET Core, você tem as ferramentas certas para colocar tudo isso em prática. Link do repositório aqui Um padrão muito comum de ser utilizado junto ao Retry é o Circuit Breaker. Pode ser tema para um artigo futuro! Espero que tenha curtido. Até a próxima! Compartilhe Whatsapp Twitter Linkedin
Azure Blob Storage e ASP.NET Core – Parte 1

Nesta série vou apresentar os principais conceitos relacionados ao Azure Blob Storage, e também um passo a passo de como realizar o upload e download de arquivos utilizando uma API ASP.NET Core. Esta é a parte 1 e será onde vou fazer uma introdução ao Azure Blob Storage, e seus principais recursos. Espero que goste do conteúdo! Introdução ao Azure Blob Storage O Azure Blob Storage é uma solução do Microsoft Azure, plataforma de computação em nuvem da Microsoft, que permite o armazenamento de dados não-estruturados. Por exemplo, ele pode ser utilizado para: Também pode ser utilizado para armazenar dados destinados a processos como backup e restauração, análise de dados, estado de infraestrutura com Terraform, entre outros. Mecanismos de acesso Os dados que são armazenados no Azure Blob Storage podem ser acessados através de: Já que este serviço pode ser facilmente acessado via REST API, a sua integração pode ser feita por praticamente todas linguagens de programação modernas. Principais conceitos Existem diversos conceitos chave relacionados ao Azure Blob Storage que é importante conhecer. Storage Account Necessária para utilizar o Azure Blob Storage. Ela cria um namespace único para seus dados no Azure, e será onde os blobs ficarão armazenados. Uma Storage Account pode ter múltiplos containers. Blob Containers Containers são como se fossem pastas em um sistema de arquivos. Eles oferecem uma forma de organizar seus blobs dentro de uma Storage Account, e podem armazenar um número ilimitado de blobs. Blobs São objetos individuais que são armazenados no Azure Blob Storage. Existem três tipos de Azure BVlo Para ilustrar a URL de um blob, digamos que eu queira armazenar as capas dos cursos de minha plataforma no Azure Blob Storage. O nome de minha Storage Account é “luisdevstorage”, e nela eu crio um container chamado “capas-cursos”. Finalmente, vou armazenar neste container um arquivo chamado “fundamentos_azure.jpeg”. Olha só como ficaria o link para acessar essa capa. Além disso, dá para criar subpastas dentro do Container e organizar seus arquivos ali, resultando em uma estrutura flexível de organização. Conclusão Neste artigo tivemos a oportunidade de conhecer o Azure Blob Storage e seus mecanismos de acesso, bem como seus principais conceitos como Blob, container, e Storage Account. No próximo artigo será mostrado como realizar o acesso aos dados de containers e blobs através da biblioteca em .NET para acesso ao Azure Blob Storage. Até o próximo artigo! Compartilhe Whatsapp Twitter Linkedin
10 livros que todo desenvolvedor .NET deveria ler em 2023

O desenvolvimento em .NET é uma área em constante evolução e, para se manter atualizado, é importante estar sempre em busca de conhecimento. Uma das melhores maneiras de aprender é através da leitura, e há muitos livros excelentes disponíveis para os desenvolvedores em .NET. Neste artigo, apresentaremos uma lista dos 10 livros mais importantes que todo desenvolvedor em .NET deve ler. Esses livros abrangem uma ampla gama de tópicos, desde os princípios fundamentos de como escrever um código limpo, até técnicas avançadas de programação e arquitetura de software. Independentemente do seu nível de experiência em .NET, esses livros são essenciais para aprimorar suas habilidades e avançar em sua carreira como desenvolvedor. Vamos lá? “Código Limpo: Habilidades Práticas do Agile Software”, por Robert C. Martin Código Limpo, ou Clean Code, é uma leitura obrigatória para qualquer desenvolvedor de software que queira escrever um código melhor. Martin fornece conselhos práticos para melhorar a qualidade e a legibilidade do código, tornando-o um recurso essencial para quem deseja escrever um código fácil de manter. Ler ele vai te ajudar se tornar um programador melhor. O foco de Martin em um código limpo e bem organizado te ajudará a escrever um software melhor, mais fácil de manter e entender. Ele aborda diversos temas de maneira detalhada, como: Li ele um par de vezes, e já estou planejando ler uma terceira. Livro muito completo, e definitivamente essencial para desenvolvedores. Inclusive, já organizei sorteios dele anteriormente! Voce pode encontrá-lo aqui, tanto em formato Kindle quanto em formato físico. “The Pragmatic Programmer”, por David Thomas e Andrew Hant The Pragmatic Programmer é um livro clássico que todo desenvolvedor de software deve ler. Ele fornece conselhos práticos para escrever um código melhor, gerenciar projetos e trabalhar em equipe. Ele está repleto de conselhos atemporais que ainda são relevantes hoje. Hunt e Thomas fornecem dicas práticas para escrever um código melhor, trabalhar em equipe e gerenciar projetos, tornando-o um recurso essencial para qualquer desenvolvedor de software. Em 2019 foi lançada a versão de 20 anos de aniversário! Voce pode encontrá-lo aqui, tanto em formato Kindle quanto em formato físico. “Building Microservices”, por Sam Newman Livro mais completo que já li sobre o tema. O livro aborda uma variedade de conceitos sobre arquitetura de microsserviços de forma muito clara e compreensível. Uma das qualidades da escrita do autor é a sua abordagem não-sensacionalista para essa arquitetura. Ele explica os conceitos de maneira detalhada e apresenta claramente os desafios que podem surgir ao adotá-la. É altamente recomendado! Aqui estão alguns dos conteúdos abordados: Voce pode encontrá-lo aqui, tanto em formato Kindle quanto em formato físico. “Writing High-Performance .NET Code”, por Ben Watson Se você está procurando um livro sobre performance em .NET, acaba de encontrar uma ótima indicação! Este livro me inspirou a criar um mini-curso sobre performance em .NET (disponível para meus alunos) e me fez sair da minha zona de conforto diversas vezes durante a leitura. Acredito que sempre aprendemos mais quando saímos da zona de conforto, e este livro certamente tem feito esse trabalho comigo. Se você está procurando aumentar seu nível técnico, este livro é uma excelente escolha. Alguns dos temas discutidos: Você pode encontrá-lo aqui, tanto em formato Kindle quanto em formato físico “Designing Data-Intensive Applications”, por Martin Kleppmann Um livro extenso e completo a respeito de sistemas que lidam com dados, discutindo diversos princípios e trade-offs relacionados a estruturas de sistemas de dados e decisões sobre eles. Alguns dos temas discutidos: Mais um livro ideal se você quer se desafiar tecnicamente e progredir em sua carreira e nível técnicos. Você pode encontrá-lo aqui, tanto em formato Kindle quanto em formato físico “Trabalho Eficaz com Código Legado”, por Michael Feathers O termo “código legado” pode ser fonte de preocupação para muitos desenvolvedores. Em algum momento de suas carreiras, muitos precisaram lidar com códigos de difícil compreensão, mal escritos e/ou mal organizados, cuja atualização pode resultar em erros em partes do sistema que nem se imaginava. Neste livro, Michael Feathers explora o conceito de refatoração e aborda o tema do código legado. Ele apresenta de maneira prática diversas técnicas para refatorar códigos, tornando-os mais testáveis e legíveis. Achei o livro incrível, pois ele trata de um tema que muitos desenvolvedores evitam, mas que faz parte integral de nossas carreiras. Depois de ler este livro, me sinto muito mais confiante em realizar alterações em códigos, pois agora possuo técnicas bem definidas para lidar com o código legado. Voce pode encontrá-lo aqui, tanto em formato Kindle quanto em formato físico. “Microsoft .NET – Architecting Applications for the Enterprise (Developer Reference) (English Edition)”, por Andreas Saltarello e Dino Esposito Este livro é uma leitura fantástica para desenvolvedores de todos os níveis. Os autores exploram uma variedade de tópicos, dando especial atenção ao Domain-Driven Design (ou DDD) em quase todo o livro. Embora os exemplos sejam em C#, acredito que o livro é valioso para desenvolvedores de outras linguagens. Apesar de ter sido publicado em 2014, o livro ainda é muito relevante. Ele cobre uma série de temas importantes, incluindo o papel do arquiteto de software, boas práticas e princípios de design de software, testabilidade, DDD (incluindo linguagem ubíqua, contextos delimitados, modelo de domínio, agregados, serviços e outros), CQRS e Event Sourcing, persistência, entre outros. Voce pode encontrá-lo aqui, tanto em formato Kindle quanto em formato físico. “More Effective C#: 50 Specific Ways to Improve Your C#”, por Bill Wagner É uma leitura obrigatória para qualquer desenvolvedor C# que queira aprimorar suas habilidades. No entanto, o livro pode ser um pouco avançado para desenvolvedores juniores, uma vez que cobre uma ampla gama de tópicos, incluindo otimização de desempenho, tratamento de exceções, melhores práticas para trabalhar com coleções e muito mais. Com conselhos práticos para escrever um código melhor e evitar armadilhas comuns, More Effective C# é um recurso valioso para desenvolvedores de todos os níveis. Além disso, o livro oferece insights sobre as nuances da linguagem, tornando-se uma leitura indispensável para quem deseja escrever um código C# mais limpo, eficiente e fácil