Profile Software Services

¿Qué son los microservicios?

Desde hace unos años la arquitectura basada en microservicios ha ganado relevancia y atractivo en el mundo del desarrollo de software empresarial. ¿La razón? Los microservicios ofrecen valores muy deseables en el día a día de las organizaciones como la escalabilidad eficiente, la agilidad y la flexibilidad.

¿Qué había antes de los microservicios?

Hagamos un breve repaso a la historia reciente del desarrollo de software.

Tradicionalmente el enfoque técnico de la arquitectura de software se centró en el monolito: una única pieza que contiene una gran cantidad de funcionalidades implementadas sobre una misma base de código.

Las arquitecturas monolíticas se basan en este tipo de aplicaciones. En ellas todo el código está mezclado y cualquier modificación afecta al producto en su totalidad. Trabajando en monolito, los diferentes equipos de desarrollo están obligados a actuar sobre un mismo código, lo que dilata los tiempos y la dificultad.

Aunque resulta eficaz en aplicaciones sencillas, la arquitectura monolítica devuelve numerosas desventajas si hablamos de grandes aplicaciones. Leer, modificar y probar una enorme base de código con múltiples funciones entremezcladas deriva en baja productividad. En este sentido, el enfoque monolítico no se ajusta a las necesidades y demandas actuales del mercado.

En los años 90 surgieron los modelos de desarrollo SOA, que se popularizaron a principios del siglo XXI. En las arquitecturas orientadas a servicios los componentes de la aplicación están relativamente separados y proporcionan servicios a otros componentes mediante un protocolo de comunicaciones en red.

SOA supone una evolución hacia arquitecturas más descentralizadas, pero como los componentes no son del todo independientes, el desarrollo sigue siendo complejo y se mantiene también la obligación de los equipos de trabajo a ponerse de acuerdo en cada cambio a realizar en el código.  Además, estas arquitecturas se apoyan en elementos tecnológicos como los web services SOAP (nacidos en la cumbre de la ya pasada moda XML) y los complejos ESB (Enterprise Service Bus), que hoy en día se encuentran en tendencia recesiva. Resultado: un time-to-market muy lento y un mantenimiento tedioso.  

Los microservicios dan una vuelta de tuerca más a SOA. La arquitectura basada en microservicios (MSA por sus siglas en inglés) está efectivamente ‘orientada a servicios’ y estos, como piezas totalmente independientes, pueden ser actualizados y desplegados sin requerir un solo cambio en el resto de componentes.

Monolito vs SOA vs microservicios

Fuente: PWC

Características de los microservicios: infraestructuras IT más flexibles y adaptables

El concepto de microservicios lo definió Martin Fowler en 2014 como un enfoque técnico para desarrollar aplicaciones como un conjunto de pequeños servicios. Se trata de unidades funcionales independientes que se ejecutan de manera autónoma en su propio proceso y que se comunican entre sí a través de APIs.

Este nuevo paradigma dota de agilidad porque facilita el continuous delivery: permite a los distintos equipos de desarrollo trabajar de manera simultánea, controlando el ciclo de vida del software y aportando valor al cliente al entregar de inmediato software de calidad.

Realmente no existe un estándar de cómo debe ser una arquitectura basada en microservicios: ni en el tamaño de los mismos, ni siquiera en el lenguaje de programación.  Cada pequeño servicio que compone la aplicación puede estar escrito en un lenguaje de programación diferente, ya que se comunica con los otros a través de llamadas de API.

Pero sí podemos identificar algunos rasgos comunes de los microservicios:

Pros y contras de los microservicios

El control modular que, por su naturaleza, ofrecen los microservicios, proporcionan beneficios para grandes arquitecturas empresariales que precisan de alta flexibilidad.

Las ventajas de los microservicios que aumentan y mantienen la competitividad de las empresas son:


Con todo, es importante recordar que la elección del modelo de arquitectura está supeditada a las necesidades específicas de la aplicación y del negocio. Los microservicios tienen muchos beneficios, pero implican también importantes retos.

Es fundamental tener en cuenta aspectos como la estrategia de continuous delivery y el despliegue automatizado para poder abordar con garantías un proyecto de alta complejidad. Además los desarrolladores tendrán que lidiar con factores como la latencia de la red, el balanceo de carga, la tolerancia a fallos, etc.

Hablando de los desafíos que implica una arquitectura basada en microservicios, Martin Fowler destaca:

Conclusión

Por estas razones, los microservicios no benefician siempre a todos los equipos y proyectos y es importante que su elección como modelo de desarrollo esté justificada por el contexto concreto y las necesidades del negocio y la aplicación.

Además se recomienda que la adopción de microservicios sea un proceso gradual. Debe basarse no en construir microservicios en un primer momento, sino en deconstruir monolitos, refactorizando ciertas partes de la aplicación existente en un conjunto de microservicios.

En cualquier caso, nos gustaría terminar este post con la reflexión que hace Fowler. Más allá del modelo de arquitectura elegido, en el éxito de un proyecto tienen un mayor impacto otros factores “como la calidad de los miembros del equipo, lo bien que colaboran unos con otros y el grado de comunicación con expertos en el dominio (…) En un nivel puramente técnico, es más importante centrarse en cosas como el código limpio, el buen testeo y la atención a la arquitectura evolutiva”.

¿Necesitas una solución de arquitectura de software para tu negocio? En Profile somos especialistas en diseñar arquitecturas web empresariales y creamos estructuras tecnológicas sólidas y flexibles . Contacta con nosotros.

Salir de la versión móvil