IMPORTANTE: Para correr en local solicitarme por favor la URI de la base de datos y de la caché.
-
Hacer clean de los jars viejos (RECOMENDADO)
gradle :modulolectura:clean
-
Hacer el build para crear el jar
gradle :modulolectura:build
-
cd modulolectura
-
sudo docker build .
sudo docker run -it --rm -p8086:8086 [iddelcontenedor]
-
Hacer clean de los jars viejos (RECOMENDADO)
gradle :moduloescritura:clean
-
Hacer el build para crear el jar
gradle :moduloescritura:build
-
cd moduloescritura
-
sudo docker build .
-
sudo docker run -it --rm -p8080:8080 [iddelcontenedor]
gradle :modulolectura:test
gradle :modulolectura:jacocoTestReport
gradle :moduloescritura:test
gradle :moduloescritura:jacocoTestReport
Una vez generados los reportes de ambos microservicios se puede ir dentro de cada uno a la carpeta:
build/jacocoHtml/index.html
IMPORTANTE: Es recomendable correr las pruebas de carga cuando la arquitectura de nube esté prendida para poder ver en acción todo el potencial de la arquitectura planteada.
- Instalar JMeter
- Importar el archivo 'Plan de Pruebas.jmx'
- Seleccionar el número de usuarios (hilos deseados) y dale run
- Ver reporte
- CQRS
- Clean Architecture
- Cache con REDIS
- Pool de hilos para la base de datos (provisto por el framework)
- Arquitectura de microservicios con desacoplamiento a nivel de servicio del módulo de lectura y escritura.
- Escalamiento vertical a nivel de infraestructura con Azure Kubernetes
- Load Balancing en Azure
- Deployment en la nube de Azure
- Test unitarios
- Test de carga
- Ahead-of-time compilation (Provisto por el framework)
- Consultar las estadisticas de mutantes y humanos:
curl -i -k --location --request GET 'http://localhost:8086/mutantchecker/queries/stats' \
--data-raw ''
- Verificar si un humano es mutante:
curl -i -k --location --request POST 'http://localhost:8080/mutantchecker/mutant' \
--header 'Content-Type: application/json' \
--data-raw '{
"dna":["AGGGGA", "CAGTGC", "TGAGGT", "GGAAGG", "CCCCTA", "TCACTT"]
}'
Las peticiones en ambiente nube se pueden realizar una vez se cree, la infraestructura dado que de momento se tiene apagada para no perder horas máquina de la capa gratuita.
- Se crean dos microservicios (uno para el modelo de consultas y otro para el modelo de escritura)
- Se crean varias pods de un mismo servicio para mayor disponibilidad
- el acceso a los pods es através de un load balancer
- Para garantizar una mayor disponibilidad se introduce una caché con redis: cuando se crea un nuevo registro se almacena en caché los contadores, y cuando se consulta se va primero a la caché y si esta tiene la información disponible se devuelve y sino se va a base de datos.
- Se maneja un pool de hilos para el acceso a operaciones de bases de datos.
- Introducir un API Gateway
- Utilizar DNS para que no haya que poner la IP en el request de los servicios.
- Automatizar el despliegue con herramientas como jenkins o azure devops o cualquier otra
- Validar que las letras de las secuencias si pertenezcan a las especificadas.
- Diagrama de arquitectura
- Mejor manejo de errores
- Logueo
- Monitoreo
- Circuit Breaker hacia la base de datos y caché
- Documentación de la API con swagger