Com o objetivo de cadastrar e consultar registros referentes a pagamentos Pix, desenvolvi o atual projeto com o foco no processamento otimizado e confiável das informações. Em conjunto com os endpoints, foram implementadas ferramentas de observabilidade para prevenção de falhas inesperadas nos clusters.
A aplicação conta com os seguintes serviços:
- Conjunto de endpoints para manipulação de pagamentos Pix - Interface em Swagger para utilização dos endpoints.
- Grafana - Local onde as métricas, dashboards e logs podem ser visualizados de forma centralizada.
- Prometheus - Aqui é possível visualizar as métricas e alertas de healthcheck (esses dados também podem ser visualizados no Grafana).
- Código fonte escrito em Kotlin e Spring Boot 3.
- Optei por desenvolver a solução em um banco de dados MongoDB por se tratar de apenas um domínio sem relacionamentos.
- Tratativa de Log utilizando Grafana Loki.
- Desenvolvimento da solução em microserviços, diminuindo a chance de indisponibilidade.
- Arquitetura em Camadas (Application, Domain, Infra), utilizando o padrão CQRS, com o objetivo de separar as operações de escrita e leitura, corroborando para a elaboração de um código potencialmente escalável a longo prazo.
- Event Driven para o disparo de eventos nas alterações realizadas pelo sistema. Além de garantir tratativas especialistas para cada tipo distinto de evento.
- Orquestração dos microserviços implementada com load balancer em NgInx gerenciando qual dos quatro clusters deverá ser chamado.
- Grafana Tempo para manipulação de dados de telemetria.
- Open Telemetry Collector para o recebimento dos dados de telemetria diretamente da aplicação e realização do envio ao Grafana Tempo
- Prometheus para registro de métricas e acompanhamento dos alertas.
- Grafana para visualização das informações de observabilidade capturadas de todas as ferramentas (Grafana Tempo, Prometheus, Grafana Loki)
- Para os testes unitários, foram utilizadas as bibliotecas JUnit e Mockito (embora os testes unitários tenham concentrado-se na camada de domínio, a replicação para as outras camadas também tem grande relevância e merece atenção).
- Documentação dos endpoints da api desenvolvida em Swagger
- Contêineres gerenciandos via Docker e Docker Compose.
- Ter o Docker e Docker Compose instalados.
- Baixe o projeto
git clone git@github.com:gabrielcora20/pix-demo-project.git
- Entre na pasta do projeto
cd pix-demo-project - Suba a aplicação no Docker
docker-compose up -d --build
usuario: pix
senha: bj0uIVfZAj7O5y94gC1yVPStPfw5xFxQpburWjvUIgnYeFxs7L String de conexão: mongodb://pix:N5Hn3cHgeP27JGlt7g4ASy6O8zXLNm228sjKxEn8@localhost:27017/pix?authSource=admin usuario: pix
senha: ZiU42veV7Ud48A0dyb9ASgYsHbR6Un- Caso passe um tempo e a porta 80 não retornar nada, por favor reinicie o container "Presentation" e tente novamente (implementei um healthcheck para subir apenas quando todas as instâncias estivessem rodando, mas tive alguns problemas na elaboração e tive de reverter).