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

Lautaro Carro

May 16, 2021
Tweet

More Decks by Lautaro Carro

Other Decks in Technology

Transcript

  1. Conociendo los
    Monolitos
    Modulares
    LAUTARO CARRO

    View full-size slide

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

    View full-size slide

  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.

    View full-size slide

  4. @lauchacarro
    Lautarocarro.blog

    View full-size slide

  5. Monolitos Modulares

    View full-size slide

  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.

    View full-size slide

  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.

    View full-size slide

  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.

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

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

    View full-size slide

  19. Base de datos

    View full-size slide

  20. Base de datos
    Productos
    Usuarios
    Ventas

    View full-size slide

  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

    View full-size slide

  22. Base de datos
    V
    U
    P

    View full-size slide

  23. Resultado Final
    Presentación
    Mediador / Event Bus

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  27. Construir
    desde cero,
    es sencillo

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  32. De Monolito Ordinario a Modular
    Patrón Strangler Fig

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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.

    View full-size slide

  37. Muchas Gracias
    CONOCIENDO LOS MONOLITOS
    MODULARES
    @lauchacarro
    Lautarocarro.blog

    View full-size slide

  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)

    View full-size slide