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 pela biblioteca 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. -
Loggingenriquecido 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 S3ouMinio). -
Para mensageria, pode ser adicionado o
Apache RabbitMQouApache 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.