Microservices em .NET: descomplicando a implementação com o projeto Dapr
Ao trabalharmos em projetos mais complexos certamente iremos nos deparar com a necessidade de construção de Microservices e arquiteturas distribuídas. Cenários deste tipo costumam resultar em uma série de implementações comuns envolvendo aspectos como resiliência, observabilidade, caching, segurança…
Como podemos então agilizar nosso trabalho em situações como essas, possibilitando ainda uma maior padronização em nossas implementações de Microsserviços?
O projeto Dapr (Distributed Application Runtime) é uma alternativa open source vinculada à CNCF (Cloud Native Computing Foundation) e que representa uma excelente resposta a esta questão, incorporando boas práticas da indústria de software e permitindo um maior foco na lógica do negócio durante a implementação de soluções. Tudo isso acontece através da utilização de building blocks, que nada mais são do que APIs empregadas na integração com os mais diferentes tipos de serviços/tecnologias de apoio que uma aplicação possa depender.
Em ambientes containerizados como o Kubernetes os building blocks empregados por uma aplicação são agrupados em um container que atua como “sidecar”. A aplicação (em um container próprio) e seu sidecar compõem então um mesmo Pod, com a comunicação entre esses elementos fazendo uso de protocolos como gRPC e HTTP. Em modo de desenvolvimento local o próprio runtime do Dapr cuida de todo este processo.
E como podemos integrar esses building blocks em nossas implementações de Microsserviços? Existem atualmente bibliotecas e packages gratuitos para stacks de desenvolvimento como .NET, Java, Python, Node, Go e PHP, simplificando em muito o processo de comunicação de uma aplicação com os diferentes componentes/building blocks que integrarão o seu sidecar.
Ponto de atenção: não confunda o projeto Dapr com Dapper, uma solução de nome parecido e popularmente utilizada no acesso a bancos de dados relacionais em .NET.
Os slides a seguir foram utilizados em apresentações que realizei recentemente, abordando diferentes aspectos da implementação de Microservices com Dapr + .NET:
O exemplo que utilizei empregou o building block de state management (em conjunto com tecnologias como Redis, SQL Server, PostgreSQL e MongoDB), sendo disponibilizado no seguinte repositório do GitHub:
https://github.com/renatogroffe/ASPNETCore7-REST_API-Dapr-StateManagement_ContagemAcessos
Caso achem útil a solução, peço por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!
Em uma live recente no Canal .NET também demonstrei em detalhes este exemplo, com o vídeo estando disponível no YouTube para ser assistido gratuitamente:
Recomendo ainda o livro Dapr for .NET Developers, cujo conteúdo está disponível gratuitamente no Microsoft Learn. Para acessar o material clique neste link.
E também 2 lives em que participei no canal do Microsoft Reactor: