Microservicios y Domain Driven Design (DDD): un enfoque práctico a la arquitectura de software
Como ya se ha comentado en innumerables ocasiones, aunque suene un poco a tópico, en el mundo en el que vivimos los cambios se desencadenan a una velocidad cada vez mayor, donde las corporaciones suelen tener necesidades cambiantes que permiten adaptar y modelar su negocio a la evolución del mercado. Además, también estamos observando que día a día van apareciendo nuevas tecnologías que son capaces de aportar nuevos beneficios y capacidades y por tanto ayudarnos a ofrecer un mayor valor en el mercado, diferenciándose de nuestros competidores.
En este vertiginoso, a la vez que apasionante, paisaje en el que se ha convertido la creación de software, la construcción de sistemas escalables, flexibles y fáciles de mantener representa un desafío para muchas organizaciones. En este sentido, dos enfoques han surgido como pilares fundamentales para la construcción de sistemas complejos: el Domain Driven Design (DDD) y los Microservicios. La unión de ambos es una combinación poderosa que permite la creación de sistemas altamente escalables, flexibles y mantenibles, alineados con las necesidades cambiantes del negocio.
Dos pilares fundamentales para la construcción de sistemas complejos: el Domain Driven Design (DDD) y los Microservicios
Los microservicios ofrecen una serie de ventajas clave. A diferencia de una arquitectura monolítica, donde se dispone de un único componente para todo el sistema, este se divide en pequeños servicios que se ejecutan de forma independiente, pero a su vez trabajan juntos para cubrir toda la funcionalidad. Debido a que los microservicios son autónomos, cada uno de ellos se puede actualizar, implementar y escalar sin afectar a los demás, lo que otorga una alta capacidad de evolución del aplicativo a las necesidades técnicas o de negocio que vayan surgiendo. Los microservicios también permiten a los equipos de desarrollo trabajar de manera autónoma, lo que acelera el desarrollo y la entrega continua.
Por su lado, DDD se basa en la idea de que el corazón de cualquier sistema de software es el dominio del negocio, centrándose en comprenderlo y modelarlo de manera profunda, promoviendo para ello el uso de un lenguaje ubicuo compartido entre expertos del dominio y los equipos de desarrollo, lo que forja un profundo conocimiento y comprensión de los procesos de negocio. Esta metodología de diseño de dominio, donde se protege la lógica del dominio del negocio compleja y también menos cambiante, ayuda a abstraer la complejidad del dominio de los casos de uso, permitiendo la evolución y el cambio controlado en el software. Esta perspectiva basada en aislar el dominio encaja perfectamente en la filosofía del patrón de diseño de Puertos y Adaptadores también conocido como arquitectura hexagonal.
El enfoque en los límites del contexto, otra característica fundamental de DDD, lleva a la modularización del sistema en componentes más pequeños y cohesivos, lo cual no solo mejora la mantenibilidad, sino que también aporta una base conceptual sólida para futuras implementaciones de arquitecturas basadas en microservicios.
Para reflejar cómo el diseño guiado por el dominio y los microservicios pueden entrelazarse de manera efectiva, consideremos el caso de una aplicación muy simple en la que tengamos que gestionar clientes y pedidos. Además, los clientes tienen asociados direcciones y los pedidos de un cliente están compuestos por productos.
En este caso podemos ver cómo, por un lado, tenemos la gestión de los pedidos en sí misma y por otro también se encuentra la gestión de los clientes, ambos bloques formarían contextos acotados dentro del mismo dominio.
Esta división en diferentes contextos nos ofrece una muy buena base para proceder a descomponer lo que inicialmente pudiera verse como una unidad en servicios más pequeños que sean más fáciles de mantener y escalar, dando lugar a los microservicios de clientes y pedidos.
En conclusión, al aplicar los principios de DDD en el diseño de microservicios, las organizaciones pueden aprovechar los beneficios de ambas metodologías y construir sistemas altamente adaptables y flexibles. En Izertis ayudamos a las organizaciones a combinar estos enfoques con todas las piezas necesarias para encontrar la solución que mejor encaje en las necesidades de su negocio.