Slide 1

Slide 1 text

Conociendo los Monolitos Modulares LAUTARO CARRO

Slide 2

Slide 2 text

Al igual que la mayoría de ustedes…

Slide 3

Slide 3 text

Dichos, frases, rumores de pasillo  Los sistemas monolíticos siempre terminan en código spaghetti.  Los sistemas monolíticos son muy difíciles de testear, que tiene mucho acoplamiento.  Que el código de estos sistemas no escala.  La arquitectura monolítica es para aplicaciones pequeñas.

Slide 4

Slide 4 text

@lauchacarro Lautarocarro.blog

Slide 5

Slide 5 text

Monolitos Modulares

Slide 6

Slide 6 text

¿Qué es un Monolito?  La arquitectura monolítica describe edificios tallados, fundidos o excavados a partir de una sola pieza de material, históricamente de roca.

Slide 7

Slide 7 text

¿Qué es la programación modular?  La programación modular es una técnica de diseño de software.  Hace hincapié en separar la funcionalidad de un programa en módulos independientes e intercambiables.  Cada módulo contiene todo lo necesario para ejecutar un solo aspecto de la funcionalidad deseada.  Los módulos deben tener una interfaz definida.

Slide 8

Slide 8 text

Monolito Modular  Un Monolito Modular es una aplicación ejecutable cuyas funcionalidades están divididas verticalmente por módulos, donde cada modulo representa un dominio de negocio.

Slide 9

Slide 9 text

Definición Capas Horizontales Separación Módulos Verticales Comunicación Entre Módulos Base de datos Escalabilidad Características

Slide 10

Slide 10 text

Definición de las capas horizontales Monolito Ordinario Presentación Aplicación Infraestructura D o m i n i o • Base de datos • Servicios externos • Logs Monolito Modular Presentación Módulos Infraestructura • Comunicación Módulos Presentación Aplicación Infraestructura D o m i n i o • Base de datos • Servicios externos

Slide 11

Slide 11 text

Separación Módulos Verticales Presentación Infraestructura Productos Ventas Usuarios Productos

Slide 12

Slide 12 text

Separación Módulos Verticales Presentación Infraestructura

Slide 13

Slide 13 text

Separación Módulos Verticales Presentación Infraestructura

Slide 14

Slide 14 text

Separación Módulos Verticales Capas Horizontales Internas ORM Patrones de Diseño Practicas de Equipo Servicios Externos Pruebas Unitarias

Slide 15

Slide 15 text

Comunicación entre Módulos Interfaz Públlica Implementación Privada Interfaz Públlica Implementación Privada

Slide 16

Slide 16 text

Comunicación entre Módulos Presentación Infraestructura

Slide 17

Slide 17 text

Comunicación entre Módulos Sincrónica  Con un Mediador  De forma desacoplada un módulo pide/envía datos a otro módulo  Se espera una respuesta Asincrónica  A partir de un Event Bus  Un módulo publica un evento y los módulos suscriptos lo reciben.  Más desacoplado  El módulo emisor no espera respuesta

Slide 18

Slide 18 text

Comunicación entre Módulos Presentación Infraestructura Mediador / Event Bus

Slide 19

Slide 19 text

Base de datos

Slide 20

Slide 20 text

Base de datos Productos Usuarios Ventas

Slide 21

Slide 21 text

Base de datos Productos Usuarios ID Monto UsuarioId 1 150.55 12 2 60 24 Ventas ID VentaId ProductoId 1 1 4 2 1 7 3 2 2 VentaProductos ID Nombre Precio 2 Producto2 60 4 Producto4 70 7 Prodcuto7 80.55 Productos FK ID Nombre Activo 12 Usuario12 true 24 Usuario24 true Usuarios

Slide 22

Slide 22 text

Base de datos V U P

Slide 23

Slide 23 text

Resultado Final Presentación Mediador / Event Bus

Slide 24

Slide 24 text

Escalabilidad  Tu código escala  Tus datos escalan  Tu equipo escala  Desventaja del monolito: hay que escalar toda la aplicación.  Convertir un módulo en un nuevo servicio

Slide 25

Slide 25 text

Recursos por tecnología https://github.co m/Mararok/Symfo nyModularMonolit h https://github.co m/zawiszaty/empl oyee_managmen t https://github.co m/gustialfian/nod ejs-modular- monolith https://github.co m/mgce/modular -monolith-nodejs https://github.co m/kgrzybek/mod ular-monolith- with-ddd https://github.co m/latinonetonline /LatinoNetOnline. Backend https://github.co m/arawn/building -modular- monoliths-using- spring https://github.co m/sethkraut/code mash2020- modular-monolith https://github.co m/pgorecki/djan go_modular_mon olith

Slide 26

Slide 26 text

Un poco de Simón Brown  “Seguiré diciendo esto ... si la gente no puede construir monolitos correctamente, los microservicios no ayudarán.” 4 Marzo 2015 https://twitter.com/simonbrown/status/573072777147777024

Slide 27

Slide 27 text

Construir desde cero, es sencillo

Slide 28

Slide 28 text

Adaptar lo que tenemos, es lo difícil

Slide 29

Slide 29 text

De Monolito Ordinario a Modular ¿Cuándo migrar a Monolito Modular?  La aplicación crece y se comienza a ver las malas practicas  Se estima seguir desarrollando muchas funcionalidades nuevas  Se desea poder mantener la aplicación a futuro con bajo costo  Se aspira en un futuro migrar a microservicios

Slide 30

Slide 30 text

De Monolito Ordinario a Modular Acciones Previas  Tener a disposición a quien conozca del dominio  Realizar la mayor cantidad de pruebas unitarias posibles  Realizar BackUp de la aplicación y de la base de datos

Slide 31

Slide 31 text

De Monolito Ordinario a Modular Análisis  Defina los modelos de dominio de la aplicación monolítica  Defina contextos delimitados para los modelos. (Futuros módulos)  Reconocer todas las funcionalidades que expone el monolito  Identificar a que módulo pertenece cada funcionalidad

Slide 32

Slide 32 text

De Monolito Ordinario a Modular Patrón Strangler Fig

Slide 33

Slide 33 text

De Monolito Ordinario a Modular Coexistir Arquitecturas  Implementar mediador (Adaptador)  NO crear nuevas funcionalidades en el código legacy  Crear los módulos de los dominios más sencillos al mayor acoplado.  Comunicar código legacy con los nuevos módulos a través del mediador Presentación Aplicac. / Módulos Infraestructura D o m i n i o • Base de datos • Servicios externos • Logs • Comunicación de Módulos

Slide 34

Slide 34 text

De Monolito Ordinario a Modular Base de Datos  Crear las tablas de los nuevos módulos en nuevos esquemas, sin eliminar las viejas  Mantener la integridad de los datos  Utilizar herramientas ETL (Extract - Transform - Load) para realizar la migración  Tener cuidado: No pisar los nuevos datos con los viejos

Slide 35

Slide 35 text

Un poco más de Simón Brown  “Monolitos modulares: la idea básica es que apliques el pensamiento de diseño de microservicios a un monolito […]” 12 Febrero 2018 https://twitter.com/simonbrown/status/962945350737825793

Slide 36

Slide 36 text

Conclusiones  La arquitectura de Monolito Modular es un nombre explícito para un sistema Monolito diseñado de forma modular.  Se pueden desarrollar medianas y grandes aplicaciones empresariales.  Con la modularidad tu código es escalable, desacoplado, testeable y mantenible.  El monolito modular es el monolito perfecto.

Slide 37

Slide 37 text

Muchas Gracias CONOCIENDO LOS MONOLITOS MODULARES @lauchacarro Lautarocarro.blog

Slide 38

Slide 38 text

Referencias  https://www.kamilgrzybek.com/design/modular-monolith-primer/  https://docs.microsoft.com/es- es/dotnet/architecture/microservices/architect-microservice-container- applications/microservices-addressability-service-registry  https://docs.google.com/spreadsheets/d/1vjnjAII_8TZBv2XhFHra7kEQzQpO HSZpFIWDjynYYf0/edit#gid=0  https://docs.microsoft.com/es- es/azure/architecture/microservices/migrate-monolith  Migración de datos: definición, desafíos y mejores prácticas para afrontarla (powerdata.es)