Microsserviços
Tecnologias Utilizadas
Os microsserviços têm como base os seguintes frameworks Java:
-
Spring Boot
, como alicerce da arquitetura -
Spring Security
(nova stack), para camada de segurança com OIDC / OAuth2 -
Spring Data JPA
, para suporte ao JPA -
Spring JPA Auditing
, para auditoria básica com JPA -
Spring Web MVC
, para webservices -
Spring Boot Admin client
, para monitoramento via Actuator -
Swagger
, para documentação dos endpoints webservice -
Micrometer
, com exposição de métricas, técnicas ou negociais, para Prometheus -
Log4j2
, para logging de aplicação -
Lombok
, que reduz código de classes POJO, DTOs e Entidades persistentes -
Tomcat
, container runtime -
Cloudsupport
, que oferece componentes estruturais
Os microsserviços utilizam como dependência a biblioteca Maven cloudsupport-parent
, que inclui
módulos e componentes para aumentar produtividade dos desenvolvedores bem como auxiliar
o cumprimento dos padrões e convenções de código definidos ao longo deste manual. Dessa forma o
código-fonte dos projetos fica enxuto e o desenvolvedor poderá focar naquilo que lhe é
útil: persistência e regras de negócio.
A biblioteca cloudsupport-parent
é um projeto Maven BOM. Ao herdar do cloudsupport-parent
,
os microsserviços:
-
Recebem automaticamente a biblioteca
cloudsupport
. -
Não precisam declarar a versão do plugin Maven do Spring Boot.
Considere o exemplo cloudsupport-archetype-backend
como ponto de partida para novos projetos
bem como para acompanhar a leitura deste manual e melhor assimilar os conceitos.
Funcionalidades da Arquitetura
São funcionalidades oferecidas pelo Cloudsupport
para backend:
-
Active Record
, pattern para acesso simplificado às operações de persistência. -
Pattern próprio da arquitetura para implementação das
Features
, que permite um código mais legível, mais encapsulado, sem referências cíclicas, organizado por funcionalidades e orientado ao requisito funcional. Manutenibilidade e mitigação de bugs são ganhos destaques deste padrão. -
Mapeamento automático de endpoints webservice
, via anotação da arquitetura, para alta produtividade e padronização, sem limitar os recursos do Spring MVC. -
Versionamento de API webservice
, por convenções da arquitetura. -
Rastreamento de falhas
, via tratamento automático e padronizado de exceções não tratadas pelo desenvolvedor, com geração de código único de rastreamento e não exposição de dados técnicos e/ou sensíveis para o cliente ou frontend. -
Motor de jobs
, lightweight, com implementação inspirada no Spring Batch e normas do Java, para o desenvolvimento rápido de rotinas background, com suporte a:-
Vários modelos de execução: Iterativo, Produtor-Consumidor finito e Produtor-Consumidor contínuo, este para filas de alta performance.
-
Persistência do status de execução em banco de dados.
-
Monitoramento.
-
Controle de interrupção.
-
Gerenciamento de falhas.
-
-
Geração aprimorada da documentação
OpenAPI/Swagger
, com reconhecimento automático das convenções da arquitetura, incluindo do versionamento de API. -
Logging
enriquecido com dados de ambiente (build-info.properties
), que inclui versão do microsserviço. -
Suporte a
HA (High Availability)
em ambiente Kubernetes, com zero downtime, provido por endpoints integrados ao Actuator que implementam probes para o ciclo de rollout do K8s.
Estrutura de Camadas
Os microsserviços possuem as seguintes camadas:
Descrição das camadas:
-
Camada de Persistência
(Persistence), engloba o mapeamento JPA das entidades persistentes. -
Camada de Integração
(Remotes), classes clientes que fazem a comunicação com serviços externos. -
Camada de Negócio
(Services), composta pelas features ou funcionalidades de negócio. Cada feature é composta de duas classes principais:-
“Service”, contém as regras de negócio. A classe de serviço pode utilizar eventuais classes complementares, como fragmentos, DTOs etc.
-
“Adapter”, responsável por disponibilizar o serviço em determinado protocolo de comunicação. Inclui, como por exemplo, o mapeamento do serviço na forma endpoint webservice, mapeamento para mensageria ou mesmo mapeamento como rotina em background.
-
Outras camadas e outros frameworks podem ser adicionados no projeto de acordo com suas necessidades específicas. Por exemplo:
-
Para banco distribuído transacional (ACID), do tipo Document Store, pode ser adicionado o
MongoDB
. -
Para banco distribuído altamente escalável, do tipo Column, pode ser adicionado o
Cassandra
. -
Para banco distribuído Key-Value em memória, com finalidade, por exemplo, de caching, pode ser adicionado o
Redis
. -
Para banco de armazenamento de arquivos de alta volumetria, pode ser adicionado um S3 (
AWS S3
ouMinio
). -
Para mensageria, pode ser adicionado o
Apache RabbitMQ
ouApache Kafka
, conforme o cenário.
Estrutura de Arquivos
A estrutura de pastas e arquivos segue o padrão do Apache Maven, sendo, ao mínimo:
pom.xml
src/
main/
java/
resources/
O arquivo pom.xml
é o descritor Maven do projeto. Nele é configurado o uso da
biblioteca cloudsupport-parent
.
A pasta java
segue a estrutura de pacotes:
Pacote | Descrição |
---|---|
dominio.nomeMicrosservico.persistence | Camada de persistência; Contém as entidades persistentes mapeadas com JPA. |
dominio.nomeMicrosservico.services | Camada de negócio; Contém as classes que implementam as regras de negócio. |
dominio.nomeMicrosservico.remotes | Camada de funcionalidades remotas; Contém as classes clientes para comunicação com outros microsserviços ou serviços externos. |
dominio.nomeMicrosservico.util | Classes estáticas utilitárias. |
Outros pacotes podem ser criados conforme necessidade. O pacote spring
pode ser utilizado para
Beans de configuração do Spring Boot.
A pasta resources
contém os seguintes arquivos de configuração:
Arquivo | Descrição |
---|---|
application.properties | Configurações básicas da aplicação. |
application-local.properties | Configurações da aplicação para o ambiente local. |
application-nomeDoAmbiente.properties | Configurações da aplicação para outros ambientes, como teste, homologação ou produção; Propriedades com dados sensíveis (como senhas) podem ser definidas em tempo de execução pelo cluster Kubernetes. |
Próximos Passos
As seções Persistência,
Negócio e
Integração
detalham respectivamente as camadas persistence
, services
e remotes
. Tópicos especiais são
tratados nas seções de Concorrência e de
Transações Distribuídas, cuja leitura é
igualmente importante.