image

O mercado está passando por um momento importante impulsionado pela transformação digital, o que está levando as empresas a atualizarem seus processos de negócio e estratégias visando maior eficiência e agilidade. A adoção de novas tecnologias permite o desenvolvimento de plataformas digitais que promovem novos canais de vendas, presença online e relacionamento com os clientes.

A abordagem de microsserviços é um facilitador significativo, pois permite isolar contextos de negócio com evolução independente, ágil e segura. Essa arquitetura incorpora diversos fundamentos que promovem novas experiências, como a capacidade de escalar de acordo com a demanda de negócio.

Ao falar sobre microsservi√ßos, lembramos de muitos padr√Ķes de sistemas distribu√≠dos, tais como retry, circuit breaker, resili√™ncia, comunica√ß√£o ass√≠ncrona e observabilidade. Esses padr√Ķes s√£o essenciais em discuss√Ķes sobre aplica√ß√Ķes modernas nativas de nuvem.

Um fator crucial na estratégia de microsserviços é determinar o tamanho adequado para cada um deles. Minha recomendação é embarcar em uma jornada de Domain Driven Design (DDD) junto às áreas de negócio, a fim de construir uma modelagem e outputs claros, como um Context Map.

Em um projeto tradicional, a tomada de decis√Ķes sobre as dire√ß√Ķes a seguir na implementa√ß√£o t√©cnica de microsservi√ßos geralmente demandaria semanas ou at√© mesmo meses. Al√©m disso, haveria diverg√™ncias significativas entre as equipes respons√°veis pela implementa√ß√£o.

Neste artigo, abordarei o desenvolvimento de microsserviços utilizando a Devprime, que oferece um projeto completo de arquitetura de software, aceleradores e componentes inteligentes. Essa abordagem permite desenvolver o primeiro microsserviço em apenas 30 minutos, economizando cerca de 70% do investimento no desenvolvimento do backend.

No entanto, neste artigo, demonstrarei que é possível avançar nesses estágios e adotar uma experiência de desenvolvimento de software moderna, seguindo as principais estratégias do mercado.

Primeiros passos instalando o Devprime Platform

O primeiro passo √© criar uma conta na plataforma Devprime (https://devprime.io), ativ√°-la e obter uma licen√ßa v√°lida. Em seguida, ser√° necess√°rio instalar uma vers√£o do .NET SDK 7+ compat√≠vel com o seu sistema operacional, seja Linux, macOS ou Windows. Certifique-se de seguir as instru√ß√Ķes de instala√ß√£o fornecidas pela Microsoft para o .NET SDK.

Além disso, você precisará instalar uma ferramenta de contenização, como o Docker ou Rancher Desktop, que permitirá a criação e execução de contêineres para seus microsserviços. Essas ferramentas facilitam a implantação e o gerenciamento dos microsserviços em ambientes isolados.

Por fim, ser√° necess√°rio escolher um editor de c√≥digo para desenvolver seus microsservi√ßos. O Visual Studio Code √© uma op√ß√£o popular e gratuita, mas voc√™ tamb√©m pode usar outras op√ß√Ķes, como o Visual Studio Professional, dependendo de suas prefer√™ncias e necessidades espec√≠ficas.

Execute os comandos abaixo:

a) dotnet tool install devprime.cli -g b) dp auth

Prepare o seu ambiente local com os containers do MongoDB, RabbitMQ, SEQ seguindo as instru√ß√Ķes na documenta√ß√£o da Devprime (https://docs.devprime.io). Ap√≥s subir os servi√ßos entre no RabbitMQ crie a Exchange e filas padr√Ķes orderevents e paymentevents.

Criando o primeiro microsserviço em 30 minutos

O comando ‚Äúdp new‚ÄĚ acionar√° o engine inteligente da Devprime para projetar uma aplica√ß√£o microsservi√ßo pronta para produ√ß√£o em segundos economizando o trabalho de semanas ou meses.

dp new ms-order --state mongodb --stream rabbitmq

Image

Nesse momento você já tem um microsserviço pronto para produção conforme descrito anteriormente com um projeto completo de arquitetura de software, padronização, manutenibilidade e funcionalidades especiais fornecidas pela devprime Stack como observability (Log, Distributed Trace, Metrics) , retry and circuit break, resiliência aplicáveis a diversos serviços como banco de dados, stream e consumo de API's externas.

Para executar no Windows, Linux ou macOS utilize um dos scripts abaixo e lembrando de aplicar um ‚Äúchmod +x run.sh‚ÄĚ para o shell.

.\run.ps1 ou ./run.sh (Linux, macOS)

Visualizando o novo microsserviços recém-criado pelo Devprime CLI

A plataforma Devprime já provisionou um novo microsserviços com um projeto completo de arquitetura de software utilizando uma abordagem de Hexagonal Architecture, Event-driven Architecture (EDA) baseado nas principais práticas do mercado e priorizando manutentabilidade, testabilidade e produtividade utilizando os componentes inteligentes da Devprime incorporados me conjunto com os adaptes de tecnologia.

Abra o projeto no Visual Studio Code usando o comando abaixo: code .

Image

  1. Web ‚Äď Exposi√ß√£o de APIs

  2. Stream ‚Äď Integra√ß√£o com Streams (RabbitMQ, Kafka, AWS SQS, Azure Services BUS, Google PUB/SUB..)

  3. State ‚Äď Integra√ß√£o com persist√™ncias e storage (SqlServer, MongoDB, MySQL, PostgreSQL, ElasticSearch, Redis, Oracle)

  4. Security ‚Äď Integra√ß√£o com Identity provider (IDP) (Keycloak, Auth0, Azure AD, AWS Cognito, Google Identity Platform‚Ķ)

  5. Services ‚Äď Adapter para integra√ß√£o com APIs externas

  6. Observability ‚Äď Exposi√ß√£o de Logs, Trace, Metrics

  7. Healthcheck ‚Äď Disponibilidade do servi√ßo

  8. Extensions ‚Äď Extensibilidade para componentes externos

Adicionando regra de negócio

Um dos principais desafios na evolu√ß√£o de aplica√ß√Ķes √© a padroniza√ß√£o das regras de neg√≥cio. A plataforma Devprime aborda essa quest√£o por meio do Domain Driven Design (DDD), que padroniza a implementa√ß√£o do c√≥digo fonte dentro do projeto Domain. Essa abordagem inclui conceitos como Context Map, Bounded Context, Aggregate Roots, Value Objects, Entity, Application Services, Domain Services, Domain Events e Handlers.

Para acelerar a implementação, vamos utilizar um código de exemplo baseado em um marketplace, que contém um código para o Aggregate "Order" e outro para a Entity "Item". Execute o comando abaixo e observe o resultado:

dp marketplace order

Image

Ao abrir o projeto no Visual Studio Code, você poderá observar a classe de negócio do Marketplace que foi gerada pelo comando executado anteriormente. Essa classe de negócio representa a entidade "Order" dentro do contexto do Marketplace.

A implementa√ß√£o da regra de neg√≥cio em si √© realizada pela pessoa desenvolvedora ap√≥s a jornada de Domain Driven Design (DDD) em colabora√ß√£o com o cliente ou equipe respons√°vel pelo dom√≠nio do neg√≥cio. Durante a jornada de DDD, o objetivo √© compreender e modelar os conceitos, comportamentos e intera√ß√Ķes do dom√≠nio de neg√≥cio. Essa modelagem √© traduzida em c√≥digo durante a implementa√ß√£o.

Image

Acelerando as implementa√ß√Ķes adicionais com aceleradores da Devprime.

Um poderoso recurso dispon√≠vel no Devprime CLI √© o comando ‚Äúdp init‚ÄĚ que analisa as regras de neg√≥cio e implementa diversos est√°gios comuns gerando c√≥digo Dependency injection, Application objects, Repository, APIs, Unit test necess√°rios ao ciclo b√°sico do software.

Execute o comando: dp init

Image

Ao concluir a implementa√ß√£o do microsservi√ßo, voc√™ poder√° execut√°-lo e observar o log gerado automaticamente pelo adapter de observabilidade da plataforma Devprime. Esse log √© extremamente √ļtil para entender o comportamento e o desempenho do seu microsservi√ßo durante a execu√ß√£o.

Em um ambiente produtivo, o log gerado pelo microsserviço será capturado automaticamente pelo Kubernetes, que é uma plataforma de orquestração de contêineres amplamente utilizada. O Kubernetes é capaz de redirecionar os logs dos microsserviços para uma solução de armazenamento centralizada, como o Elasticsearch.

Image

Efetuando um post na API do microsserviço

Ao acessar a URL padrão da API do microsserviço (https://localhost:5001 ou http://localhost:5000), você terá acesso ao Swagger, uma ferramenta de documentação interativa que exibe os endpoints disponíveis na API. Esses endpoints são disponibilizados automaticamente ao utilizar o comando "dp init" e são implementados dentro do adapter web da plataforma Devprime.

Image

Entre na op√ß√£o ‚ÄúPOST‚ÄĚ pelo Swagger e preencha os dados e confirme. Esse request ser√° recebido pelo adapter de Web e transportado pelo Application Services e posteriormente na regra de neg√≥cio que implementamos anteriormente no dom√≠nio conforme log abaixo.

Image

Ao observar o log gerado durante o processamento da solicitação no microsserviço, você poderá entender todo o fluxo de processamento da aplicação, incluindo estágios como a persistência no banco de dados MongoDB e a emissão de eventos no RabbitMQ.

Explorando os aceleradores para sistemas distribuídos

Agora chegou o momento de darmos mais um passo no entendimento dos aceleradores de microsserviços presentes no Stack da plataforma Devprime. Neste momento, vamos iniciar o serviço do RabbitMQ no Docker para observar o comportamento automático de retry e circuit breaker.

Image

Ao tentar efetuar um novo POST na API, é possível observar outro comportamento inteligente: caso seja detectado um circuit breaker que resulte em um status de "Not delivered" para o evento, a estratégia de resiliência iniciará um fallback local para preservar esse evento.

Image

Ao reativar o serviço do RabbitMQ no Docker e o adapter de stream detectar a conectividade, o circuit breaker é desativado e o evento preservado na estratégia de resiliência é recuperado e devolvido automaticamente ao RabbitMQ.

Image

Nessa demonstra√ß√£o, voc√™ p√īde observar um comportamento incr√≠vel e essencial em todas as aplica√ß√Ķes modernas, que √© oferecido em todos os projetos baseados na plataforma Devprime. Essa capacidade de lidar automaticamente com falhas, como o circuit breaker e a estrat√©gia de resili√™ncia, torna as aplica√ß√Ķes mais robustas e confi√°veis, garantindo uma experi√™ncia melhor para os usu√°rios. A plataforma Devprime fornece essas funcionalidades como parte integrante de seus projetos, facilitando o desenvolvimento de microsservi√ßos resilientes e distribu√≠dos.

Explorando os testes unit√°rios

Além de todo o fluxo de implementação realizado pelo comando dp init, outro item muito interessante são os casos de testes unitários, que servem como guia para as pessoas desenvolvedoras de software utilizarem como modelo no desenvolvimento dos testes unitários.

Image

Considera√ß√Ķes finais

Neste artigo, demonstramos um exemplo básico de utilização dos aceleradores da plataforma Devprime, que auxiliam na implementação do primeiro microsserviço cloud-native em 30 minutos. Esses aceleradores também contribuem para economizar aproximadamente 70% dos custos de desenvolvimento do backend, além de oferecerem um projeto de arquitetura de software moderno, customizável e evolutivo.

A plataforma Devprime proporciona uma abordagem eficiente e √°gil no desenvolvimento de microsservi√ßos, com suporte a padr√Ķes como Domain-Driven Design (DDD), resili√™ncia, comunica√ß√£o ass√≠ncrona e observabilidade. Ela oferece uma ampla gama de recursos, desde a inicializa√ß√£o r√°pida do projeto at√© a implementa√ß√£o de estrat√©gias avan√ßadas de toler√Ęncia a falhas.

Ao adotar a plataforma Devprime, as empresas podem acelerar o processo de desenvolvimento, reduzir custos e obter uma arquitetura robusta e escalável. Além disso, a possibilidade de customização e evolução permite adaptar a plataforma às necessidades específicas de cada projeto.

Em suma, a plataforma Devprime √© uma excelente escolha para impulsionar o desenvolvimento de microsservi√ßos, proporcionando efici√™ncia, qualidade e flexibilidade. Ao aproveitar os benef√≠cios oferecidos pela plataforma, as empresas podem se destacar no mercado, entregando solu√ß√Ķes digitais inovadoras e de alto desempenho.

Mais informa√ß√Ķes, acesse devprime.io.