Skip to content

matheushajer/fiap-parquimetro

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🅿️🚘🎫 FIAP Parquimetro

Este projeto foi eleborado cumprindo os objetivos da FASE 02 Pós Arquitetura e Desenvolvimento Java da FIAP

Que consiste em um conjunto de APIs para o gerenciamento de um sistema de parquímetro escalável. Adotamos o uso da extensão Citus do Postgresql por ser uma versão escalável deste banco de dados.

https://www.citusdata.com/

Para tornar as APIs escaláveis utilizamos o deploy utilizando HPA em OpenShift que é um Kubernetes modificado pela RedHat.

https://www.redhat.com/pt-br/technologies/cloud-computing/openshift
https://docs.openshift.com/container-platform/4.8/nodes/pods/nodes-pods-autoscaling.html

Visando facilitar os testes criamos também um docker compose para a utilização do projeto de forma local.

🚀 Começando

Abaixo traremos formas de implantar utilizando cluster Openshift e Docker Compose

OBS: Os arquivos referentes deploy se encontram em: https://github.com/matheushajer/fiap-parquimetro/tree/master/deployment

1️⃣ Alternativa 1

📋 Pré-requisitos

Cluster Openshift funcional, podendo ser o gratuito SandBox.

Openshift SandBox: https://developers.redhat.com/developer-sandbox

OC cli ou kubectl instalado 

OC cli: https://docs.openshift.com/container-platform/4.8/cli_reference/openshift_cli/getting-started-cli.html

🔧 Instalação em cluster Openshift

Acessar a pasta yamls-citus-db-openshift (https://github.com/matheushajer/fiap-parquimetro/tree/master/deployment/yamls-citus-db-openshift)

cd deployment/yamls-citus-db-openshift

Aplicar o secret:

oc apply -f citus-secrets.yaml

Aplicar o kustomization:

oc apply -k .

Acessar a pasta yamls para fazer o deploy do parquimetro-app

cd deployment/parquimetro-app/yamls

Aplicar o kustomization:

oc apply -k .

Após as etapas acima você verá o ambiente pronto para uso e com o HPA ativado conforme abaixo:

image

Conforme informado anteriormente, através do HPA podemos ter a aplicação parquimetro-app escalável que neste caso ocorre quando ela atinge o pico de CPU ou RAM acima de 80% e 70% respectivamente, teremos a criação de mais uma replica e por assim subsequente até o máximo até então estipulado como 3 réplicas.

Imagem do WhatsApp de 2024-01-22 à(s) 20 52 12_f6cdaef8

Imagem do WhatsApp de 2024-01-22 à(s) 20 54 29_9e81d4fc

Após a aplicação se estabilizar abaixo do alvo, ela voltará a apenas 1 réplica conforme os indicadores dos eventos abaixo:

Imagem do WhatsApp de 2024-01-22 à(s) 21 04 30_7d8f0c28

2️⃣ Alternativa 2

📋 Pré-requisitos

Docker instalado

Documentação: https://docs.docker.com/

Docker compose instalado

Documentação docker compose: https://docs.docker.com/compose/

🔧 Instalação em docker compose:

Acessar a pasta docker-compose (https://github.com/matheushajer/fiap-parquimetro/tree/master/deployment/docker-compose)

cd deployment/docker-compose

Rodar o docker compose:

docker compose up

image

Containers em execução:

image

OBS: Para utilizar o projeto em H2 deve-se alterar as configurações que estão comentadas no pom.xml e no src/main/resources/application.properties

⚙️ Realização de testes

🔩 Toda a documentação de como utilizar as APIs se encontram na collection anexada ao PDF da entrega

Vide exemplo abaixo: image

🛠️ Construído com

😥 Desafios encontrados:

⚠️ Como tornar a aplicação escalável?

✅ Pensamos em utilizar o OpenShift por ser uma aplicação de orquestração de containers baseada em Kubernetes.

Ele é altamente utilizado no mercado e devido a sua facilidade de escalabilidade utilizando o HPA.

Para o banco de dados o desafio foi encontrar uma que fosse escalável e o Citus e bastante utilizado no mercado devido a sua fácil escalabilidade e grande desempenho para grandes volumes de dados.

⚠️ Dificuldades no deploy do Citus no OpenShift

✅ Foi necessário adaptar o deploy de acordo com a plataforma disponibilizada pela RedHat,

Neste caso criamos "InitContainers" que rodam antes dos containers principais entrarem em execuçao. Com isso, os utilizamos para garantir que após a reinicialização, o pod tenham todas as permissões necessárias.

Exemplo em: deployment/yamls-citus-db-openshift/citus-statefullsets.yaml initContainer fix-permissions-pgdata.

⚠️ Como viabilizar as notificações via SMS?

✅ Para as notificações via SMS é utilizado o Unirest-JAVA como cliente HTTP para o envio de SMS devido a sua simplicidade no uso e abstração de requisições via API.

⚠️ Como viabilizar as notificações via e-mail?

✅ O SendGrid foi escolhido devido à sua confiabilidade, fácil escalabilidade e capacidade de lidar com grandes volumes. Monitoramento detalhado, APIs fáceis de integrar e segurança robusta.

✒️ Autores

  • Cleyton Sales
  • Déborah Souza
  • Karoline Leite
  • Matheus Hajer
  • Yuri Sena

About

Projeto para a fase 2 da PÓS TECH FIAP

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •