Bounded Context y Context Maps para dividir microservicios

Clase 17 de 29Curso de Arquitectura de Software Aplicada

Resumen

La arquitectura orientada a microservicios impulsa la especialización y el trabajo armónico entre partes independientes dentro de un sistema complejo. Adoptando prácticas de modelado de dominio y mapas de contexto, los equipos pueden dividir grandes problemas en subdominios, lo que facilita la escalabilidad y adaptación a nuevos requerimientos, sin perder el enfoque en la colaboración y eficiencia.

¿Cómo ayudan los microservicios a organizar sistemas complejos?

Los microservicios son comparables a técnicos especializados que colaboran en áreas distintas como la técnica, la psicología del deporte o la nutrición. Cada uno aborda desafíos diferentes, pero juntos posibilitan el rendimiento óptimo del sistema. Esta segmentación cobra especial importancia en instituciones grandes como el Banco Interamericano de Desarrollo, donde se deben tomar decisiones cruciales sobre las fronteras de cada microservicio.

¿Qué técnicas definen límites en microservicios?

  • Bounded context: delimita modelos del dominio, permitiendo que entidades similares se especialicen en contextos diferentes.
  • Context maps (mapas de contexto): ayudan a dividir modelos grandes en subdominios específicos, facilitando la gestión de problemas complejos como licencias, patentes o tributos en sectores de exportación e importación.
  • El diseño de estos límites debe considerar la forma de interactuar entre contextos y modelos de dominio, promoviendo claridad y evitando que un modelo se torne ilegible o difícil de gestionar.

¿Cuáles son los patrones y relaciones clave entre equipos y contextos?

  • Al principio, todos los contextos pueden estar mezclados como una "bola de lodo", pero definir particiones claras permite aplicar diferentes patrones de colaboración.
  • Los patrones no solo involucran software, también la organización y dependencia entre equipos.
  • Relación mutuamente dependiente: equipos que deben negociar cambios en los contratos constantemente.
  • Relación libre: equipos que evolucionan de forma independiente aunque estén relacionados.
  • Relación de dependencia principal: un equipo lidera y otro depende en la entrega y despliegue.
  • Estas relaciones afectan los contratos, las velocidades de entrega, los despliegues y la evolución de los microservicios.

¿Cómo aplicar principios como "don't repeat yourself" en microservicios?

  • El principio don't repeat yourself busca evitar la duplicidad de código, pero en microservicios a veces se repiten modelos o lógicas para favorecer la autonomía y menor acoplamiento.
  • La clave está en no convertir cada microservicio en un monolito independiente, sino aprovechar los context maps y patrones para mantener la integración y flexibilidad.
  • También es importante considerar latencias de red, transacciones distribuidas y eventos que cruzan sistemas, exigiendo patrones y diseños adecuados.

¿Qué recomendaciones hay para entornos de trabajo y testing en microservicios?

  • Cuando múltiples equipos trabajan en paralelo, se recomienda usar entornos controlados con herramientas estandarizadas, como dev y test containers.
  • Los entornos pueden ser compartidos en la nube, haciendo posible la integración y pruebas conjuntas sobre funciones completas, no solo unitarias.
  • La seguridad y el control de estos ambientes son aspectos vitales que impactan en el ciclo de vida del software y su mantenimiento.

¿Tienes experiencias diseñando microservicios aplicando estos patrones o técnicas? Comparte tu perspectiva y enriquece el debate sobre cómo mejorar la integración y evolución de sistemas complejos.