[Techgroup] Introducción a Dapr: Cimentando la aplicación
Introducción:
Dentro del TechGroup de Backend, el Lab de DAPR. Impelementara la solucion basandose en la metodologia de los siguientes autores
El contexto del Sistema a modelar
Crear un sistema configurable que rellene la planilla de horarios anuales del Ciclo Básico de una academia secundaria.
Aulas = Cantidad de cursos = 6 (Son dos aulas de 1er año, dos de 2do año y 2 de 3er año)
Módulos por día: 8 módulos de 40 minutos, con recreos cada 80 minutos:
07:30 a 08:50 / 09:00 a 10:20 / 10:30 a 11:50 / 12:00 a 13:20
Cantidad de materias = 12 en 1er año y 2do año, 14 en 3er año
1 profesor por materia → es el mismo profesor el que da matemática en todos los años.
Las materias de 5 módulos se dividen en 3 y 2.
Los que son 3 módulos en general, se dan una sola vez a la semana los 3 módulos juntos.
La Arquitectura en Microservicios
Para construir la solución con DAPR en necesario segregar las funcionalidades del sistema en microservicios.
Un microservicio es una unidad de construcción independiente, centrada en una única funcionalidad, que se comunica con otros microservicios para formar una aplicación completa. Este enfoque arquitectónico ofrece ventajas como la escalabilidad, la autonomía de los equipos y la capacidad de evolucionar y adaptarse rápidamente a los cambios. Siendo puristas cada microservicio puede ser implementado en un lenguaje diferente al resto y manejar su propio repositorio de datos, pudiendo este ultimo ser Relacional, NoSQL, Archivos (CSV), etc.
Para introducirnos en el mundo de los microservicios debemos tener en claro algunos conceptos:
Aggregate (Agregado): es un patrón de diseño utilizado en la arquitectura de microservicios para gestionar la consistencia y la integridad de los datos. Según Martin Fowler, un agregado es una colección coherente de objetos relacionados que se tratan como una unidad indivisible en el modelo de dominio de una aplicación. El agregado tiene una raíz de agregado (aggregate root) que actúa como una puerta de entrada para acceder a los objetos relacionados dentro del agregado.
Bounded Context (Contexto Delimitado): es un concepto introducido por Eric Evans en el libro “Domain-Driven Design” y ampliado por Martin Fowler y Sam Newman en el contexto de los microservicios. Representa un límite conceptual alrededor de un modelo de dominio en una aplicación. Cada bounded context define un límite claro y separa diferentes partes de un sistema en contextos más pequeños y manejables.
La Arquitectura de la solución
La arquitectura se presenta con 3 microservicios cada uno con su Bounded Context:
- Academic Manager: Que es el encargado de mantener los catálogos de Aulas, Materias, Profesores y Cursos de una Academia, persistiendo los datos en una Base de Datos SQL SERVER y manteniendo una cache en REDIS para el acceso de los demás microservicios
- Study Scheduler: Con las entidades (aggregate )mantenidas en la cache sera la encargada del armado de cada uno de los módulos para cada uno de los cursos, persistiendo los en una Base de Datos PosgreSQL, publicando las novedades en el PUB/SUB (RabbitMQ) y manteniendolos en la cache (REDIS)
- Calendar: Se encarga de la distribución de ls módulos de cada curso durante la semana, existiendo 2 tipos de módulos el de Estudio y el Recreo
Finalizando en siguientes entregas de esta serie de artículos de los Techgroups de Incluit, publicaremos los avances, como así también los tutoriales correspondientes de DAPR para cada uno de los componentes utilizados.