¿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:

  • Independencia: cada módulo es un ejecutable en sí mismo y puede ser desplegado sin afectar al resto.
  • Granularidad: cada microservicio se encarga de una única funcionalidad de negocio.
  • Aplicación modular: posibilidad de ampliar o reducir en función de las necesidades
  • Arquitectura distribuida: cada microservicio dispone de su propia base de datos. Los modelos de software distribuido se han visto respaldados por la proliferación de proveedores Cloud, que allanan el camino a la puesta en marcha de este tipo de arquitecturas.

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:

  • Escalabilidad: permiten escalar cada servicio de manera independiente para adaptarse a los picos de tráfico puntuales o estacionales.
  • Productividad: la menor cantidad de código en comparación con un monolito permite entender claramente la funcionalidad del microservicio y facilita su ciclo de vida (desarrollo, mantenimiento, pruebas, implantación).
  • Diseño: los microservicios obligan a mantener una adecuada separación física de funcionalidades en nuestra arquitectura. Esto promueve una filosofía UNIX al diseñar grandes aplicaciones (un componente hace una sóla cosa y la hace bien).
  • Innovación más ágil: la independencia de los microservicios favorece su innovación y mejora.
  • Combinación de los servicios según necesidad y reutilizarlos para crear aplicaciones basadas en la misma lógica de negocio.
  • Mantenimiento más rápido y sencillo
  • Posibilidad de aislar errores
  • Despliegue progresivo
  • Libertad para los equipos de desarrollo
  • Organización por funcionalidades de negocio: en microservicios alineamos personas alrededor de elementos o funcionalidades de negocio, en vez de por capacidades técnicas. Focalizar la implicación en un aspecto único del negocio implica un mayor conocimiento funcional y aumenta la responsabilidad y el compromiso con el componente que mantienen.  

Microservicios y su organización por funcionalidades de negocio

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:

  • Distribución: los sistemas distribuidos son más complejos de programar ya que las llamadas remotas son lentas y están siempre en riesgo de fallo.
  • Consistencia: mantener una fuerte consistencia es extremadamente difícil para un sistema distribuido, lo que significa que tiene que lidiar con consistencia eventual.
  • Complejidad operacional: requiere un equipo de operaciones maduro y entornos con una gran capacidad de automatización y monitorización para gestionar muchos servicios que son redesplegados regularmente.

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.

¿Te pareció interesante? Compártelo:
Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInPrint this pageEmail this to someone

Sobre el Autor:

Marketing & Communications Manager en Profile Software Services