Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Conociendo los Monolitos Modulares - CATEC 2021 - 1

Conociendo los Monolitos Modulares - CATEC 2021 - 1

3275e53a5e20a36e5557ae86a69ca8ba?s=128

Lautaro Carro

May 16, 2021
Tweet

More Decks by Lautaro Carro

Other Decks in Technology

Transcript

  1. Conociendo los Monolitos Modulares LAUTARO CARRO

  2. Al igual que la mayoría de ustedes…

  3. 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.
  4. @lauchacarro Lautarocarro.blog

  5. Monolitos Modulares

  6. ¿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.
  7. ¿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.
  8. 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.
  9. Definición Capas Horizontales Separación Módulos Verticales Comunicación Entre Módulos Base

    de datos Escalabilidad Características
  10. 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
  11. Separación Módulos Verticales Presentación Infraestructura Productos Ventas Usuarios Productos

  12. Separación Módulos Verticales Presentación Infraestructura

  13. Separación Módulos Verticales Presentación Infraestructura

  14. Separación Módulos Verticales Capas Horizontales Internas ORM Patrones de Diseño

    Practicas de Equipo Servicios Externos Pruebas Unitarias
  15. Comunicación entre Módulos Interfaz Públlica Implementación Privada Interfaz Públlica Implementación

    Privada
  16. Comunicación entre Módulos Presentación Infraestructura

  17. 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
  18. Comunicación entre Módulos Presentación Infraestructura Mediador / Event Bus

  19. Base de datos

  20. Base de datos Productos Usuarios Ventas

  21. 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
  22. Base de datos V U P

  23. Resultado Final Presentación Mediador / Event Bus

  24. 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
  25. 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
  26. 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
  27. Construir desde cero, es sencillo

  28. Adaptar lo que tenemos, es lo difícil

  29. 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
  30. 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
  31. 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
  32. De Monolito Ordinario a Modular Patrón Strangler Fig

  33. 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
  34. 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
  35. 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
  36. 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.
  37. Muchas Gracias CONOCIENDO LOS MONOLITOS MODULARES @lauchacarro Lautarocarro.blog

  38. 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)