Implementação do projeto exemplo construído no aulão LAB Quarkus, disponível na DIO e ministrado por Thiago Poiani.
https://github.com/thpoiani/lab-quarkus
Desenvolver um sistema distribuído e escalável para eleições, contendo aplicações responsáveis para votação, gerenciamento de eleição e consulta de resultados utilizando Java, Docker, MongoDB e Quarkus.
Reverse proxy utilizado como API Gateway e Load Balancing
Tracing
Logging centralizado:
- MongoDB (configurações) e OpenSearch (Elasticsearch open source para indexação)
- Gerenciamento dos candidatos
* MariaDB
- Gerenciamento das eleições
* MariaDB
* Redis: para posterior utilização pelo microsserviço de votação visando alta escalabilidade e publicação de evento quando uma eleição é iniciada (event driven)
* Sincroniza resultado parcial da votação do Redis para o MariaDB a partir de um Scheduler a cada 10s
- Gerenciamento das requisições de votos
* Redis
- Disponibilização dos resultados da eleição a partir da comunicação com o microsserviço election-management
- O endpoint dos resultados utiliza o conceito de Server Sent Events, que seria algo parecido com um WebSocket de via única onde apenas o server envia informações para o cliente
./cicd-build.sh microservice_name
Exemplo:
./cicd-build.sh election-management
./cicd-blue-green-deployment.sh microservice_name tag_version
Exemplo:
./cicd-blue-green-deployment.sh election-management 1.0.0
TAG=tag_version docker compose up -d microservice_name --scale microservice_name=number_of_containers --no-recreate
Exemplo:
TAG=1.0.0 docker compose up -d voting-app --scale voting-app=4 --no-recreate
Rodar testes unitários e de integração do election-management:
./mvnw verify -DskipITs=false -Dquarkus.log.handler.gelf.enabled=false -Dquarkus.opentelemetry.enabled=false -Dquarkus.datasource.jdbc.driver=org.mariadb.jdbc.Driver
Cliente web React com exibição do resultado parcial da votação em near real time