La resistencia al cambio ha ido de la mano del software desde que los primeros códigos se empezaron a pintar sobre el litio. La evolución siempre ha venido avisada. Pero la zona de confort en materia de arquitectura empresarial ha tenido unas barreras altas, las cuales a veces a las organizaciones les ha resultado tremendamente difíciles de saltar. No es secreto de Estado que nos hemos resistido al cambio durante mucho tiempo, que hemos forzado la capacidad de los softwares hasta rozar su punto más frágil: la obsolescencia.
Hoy algo está cambiando. Desde la llegada de los microservicios todas las organizaciones hemos ganado “eones” en materia de agilidad y resiliencia en nuestra arquitectura empresarial. La aparición de nuevas herramientas y técnicas nos ha llevado a conseguir desarrollar nuevas arquitecturas cuyos cambios pueden empezar a diseñarse ahora de manera totalmente incremental. Hablamos de una nueva arquitectura de naturaleza evolutiva que brilla por sus capacidades de anticipación y readaptación. Arquitecturas repletas de facilidades en los cambios relativos a la manera de desarrollar y desplegar software con agilidad. Arquitecturas, al fin y al cabo, menos costosas.
Sobre la División lógica DDD y el Composable Business
La división lógica que propone el DDD (Diseño guiado por dominio) parte de un enfoque para el desarrollo de software con necesidades complejas. De una división lógica con una profunda conexión entre la implementación y los conceptos del modelo y núcleo del negocio, que permiten a las organizaciones tomar decisiones de diseño que enfoquen y aceleren el manejo de dominios complejos en los proyectos de software. Ahora, gracias a los microservicios, la tecnología se complementa cada vez más y se plantean escenarios de nuevas arquitecturas evolutivas que dan un paso más allá.
Gracias a las nuevas prácticas DevOps, los microservicios consiguen la llamada división de arquitecturas composable que permite un nuevo sistema de pruebas y despliegues automáticos, donde los servicios están desacoplados a nivel estructural. Esto permite permutar los microservicios entre sí y reacoplarlos en las arquitecturas como si de piezas de Lego se tratase.
Un paradigma que utiliza un conjunto de principios enfocado en la entrega e integración continua de software, lo que implica una nueva cultura para desarrollar y desplegar software en contextos altamente colaborativos y agiles orientados a reducir la brecha que existe entre el desarrollo y las operaciones.
Estamos ante una nueva nueva entrega continua basada en la recomposición de arquitecturas evolutivas e incrementales. Unas arquitecturas donde los microservicios se conciben para desarrollar aplicaciones mediante un conjunto de servicios, independientes, escalables, colaborativos, evolutivos, y capaces de autoadaptarse a ecosistemas complejos.
Las tres evoluciones de las arquitecturas basadas en microservicios
- Se acabó la “Bola de Lodo”
- Ya no nos orientamos a servicios, nos basamos en ellos.
- Camino a la autonomía y la especialización
Se acabó la “Bola de Lodo”
Los microservicios han llegado para evolucionar las arquitecturas y decir por fin adiós a esa gran “Bola de Lodo” legacy. Las nuevas capacidades que presentan estas arquitecturas, permiten acabar con esa selva de código enrevesado, caóticamente estructurado, que crece descontroladamente, que se mantiene como unido a base de cuerda y cinta aislante.
Las arquitecturas evolutivas basadas en microservicios llegan con una fuerte capacidad de soportar la modularidad y el acoplamiento que combate esta gran “Bola De Lodo” que representa el llamado “antipatrón”. Una estructura global del sistema que puede no haber llegado a estar claramente definida nunca. O que si alguna vez lo estuvo, es probable que se haya deteriorado hasta el punto de ser imposible reconocerla.
Ya no nos orientamos a servicios, nos basamos en ellos.
Las arquitecturas “basadas” en servicios son una mejora significativa con respecto a las arquitecturas “orientadas” a servicios. Estas nuevas arquitecturas conllevan muchas nuevas consideraciones, incluidos los contratos de servicio, la disponibilidad, la seguridad y las transacciones (por nombrar algunas). Pasar a un enfoque de arquitectura basada en servicios, como microservicios o SOA, implica ciertos riesgos.
No obstante, la mayoría de organizaciones que utilizan arquitecturas basadas en microservicios pueden abordar y superar con éxito estos desafíos mediante una combinación de herramientas de código abierto, herramientas comerciales y soluciones personalizadas. Este tipo de arquitecturas ofrece características y capacidades adicionales que hace que los equipos de desarrollo sean más productivos, que se creen aplicaciones más robustas, que se reduzcan los costes generales y se mejore notablemente el time to market.
Camino a la autonomía y la especialización.
Las arquitecturas evolutivas de microservicios nos demuestran que cada servicio que las compone se puede desarrollar, implementar, operar y escalar sin afectar el funcionamiento de otros servicios. Estamos ante un nuevo modelo de servicios que no necesita compartir ninguno de sus códigos o implementaciones con otros servicios.
La asincronía en las comunicaciones es la clave en la búsqueda de Soluciones Empresariales Composables (Lego), teniendo gran importancia como incorporar una capa de arquitectura dirigida por eventos (ADE)
Unas arquitecturas que además caminan directos hacia una especialización en la que cada servicio está diseñado para un conjunto de capacidades y se enfoca en resolver un problema específico. Esto se traduce en pura práctica. En ello, si los desarrolladores aportan más código a un servicio a lo largo del tiempo y el servicio se vuelve complejo, se puede dividir en servicios más pequeños.
Los beneficios a corto plazo de las arquitecturas basadas en microservicios
- Agilidad
- Escalado flexible
- Implementación sencilla
- Libertad tecnológica
- Código reutilizable
- Resistencia
Bienvenidos a la libertad tecnológica
Algo muy positivo de las arquitecturas de microservicios es que estas no siguen un enfoque de «diseño único». Los equipos tienen la libertad de elegir la mejor herramienta para resolver sus problemas específicos. Como consecuencia, los equipos que crean microservicios pueden elegir la mejor herramienta para cada trabajo.
Reutilizando código
Las arquitecturas evolutivas de microservicios presentan un división de software en módulos pequeños y bien definidos que les permite a los equipos usar funciones para diferentes propósitos. Un servicio escrito para una determinada función se puede usar como un componente básico para otra característica. Esto permite que una aplicación arranque por sí sola, ya que los desarrolladores pueden crear nuevas capacidades sin tener que escribir código desde cero.
Resistencia
La independencia del servicio aumenta la resistencia de una aplicación a los errores. En una arquitectura monolítica, un error en un solo componente, puede provocar un error en toda la aplicación. Con los microservicios, si hay un error en todo el servicio, las aplicaciones lo manejan degradando la funcionalidad sin bloquear toda la aplicación.
Creciendo en agilidad
Los microservicios afectan también a la cultura organizacional, ya que fomentan la creación de equipos pequeños e independientes que se “apropian” de los servicios con los que trabajan. Los equipos actúan en un contexto pequeño y bien comprendido, y están facultados para trabajar de forma más independiente y rápida. Esto acorta los tiempos del ciclo de desarrollo, lo que aumenta notablemente el rendimiento de la organización.
Escalado flexible
En las arquitecturas evolutivas, los microservicios habilitan que cada servicio se escale de forma independiente para satisfacer la demanda de la característica de la aplicación que respalda. Esto permite a los equipos adecuarse a las necesidades de la infraestructura, medir con precisión el costo de una característica y mantener la disponibilidad si un servicio experimenta un aumento en la demanda.
Implementación sencilla y experimentación
Los microservicios permiten la integración y la entrega continuas, lo que facilita probar nuevas ideas y revertirlas si algo no funciona. La experimentación es quizás la mayor “joya” que poseen las arquitecturas evolutivas basadas en microservicios. El bajo costo de los errores permite experimentar, facilita la actualización del código y acelera el tiempo de comercialización de las nuevas características.