Skip to content

Latest commit

 

History

History
87 lines (53 loc) · 2.42 KB

README.md

File metadata and controls

87 lines (53 loc) · 2.42 KB

Desenvolvendo um Sistema para Eleição Usando Quarkus Framework

Implementação do projeto exemplo construído no aulão LAB Quarkus, disponível na DIO e ministrado por Thiago Poiani.

Projeto original

https://github.com/thpoiani/lab-quarkus

Objetivo

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.

Arquitetura

Traefik

Reverse proxy utilizado como API Gateway e Load Balancing

Jaeger

Tracing

Graylog

Logging centralizado:
	- MongoDB (configurações) e OpenSearch (Elasticsearch open source para indexação)

election-management

- 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

voting-app

- Gerenciamento das requisições de votos
	* Redis

result-app

- 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

Build

./cicd-build.sh microservice_name

Exemplo:

./cicd-build.sh election-management

Deploy

./cicd-blue-green-deployment.sh microservice_name tag_version

Exemplo:

./cicd-blue-green-deployment.sh election-management 1.0.0

Scale

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

Testes

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

Testes de carga: Locust

Frontend

Cliente web React com exibição do resultado parcial da votação em near real time