Conecta con nosotros

A Fondo

Microservicios: casi todo lo que tienes que saber

Publicado el

La implementación de cada vez más proyectos cloud y la cada vez más extendida metodología de trabajo DevOps, tiene su consecuencia lógica en el auge de la conocida como arquitectura de microservicios o simplemente, microservicios. ¿Pero qué son los microservicios y cómo es que su popularidad se ha disparado en los últimos años?

Los microservicios representan una «nueva forma» de desarrollar software, en la que cada aplicación se construye como un conjunto de pequeños servicios, los cuales se ejecutan en su propio proceso y se comunican entre sí utilizando mecanismos ligeros. En este escenario, cada servicio se encarga de implementar una funcionalidad completa de la aplicación. Su principal ventaja es que aunque formen parte de un todo, cada servicio puede desplegarse de forma independiente, haber sido programado en distintos lenguajes e incluso, utilizar diferentes tecnologías para el almacenamiento de datos.

Esto quiere decir que la funcionalidad interna de cada microservicio puede modificarse (incluso de forma radical) sin que esto tenga por qué afectar al resto del sistema. Esta característica se alinea plenamente con la filosofía DevOps, ya que al permitir «dividir» una gran aplicación o sistema en parte independientes, se facilita enormemente esa forma de trabajar que implica la entrega continua de software.

Merece la pena destacar en este punto que la parte «micro» del término puede llevar a confusión, dando a entender que hablamos de servicios (o aplicaciones) que necesariamente deben ser pequeñas. Esto aunque a veces efectivamente es así, no es realmente normativo. De hecho el término «micro» se refiere más bien al hecho de que el servicio debería ser todo lo grande/pequeño que sea necesario para desarrollar una única función o resolver un único problema concreto. En resumidas cuentas:

  • Debido a la reducción de los ciclos de desarrollo, una arquitectura de microservicios permite que la implementación y las actualizaciones se realicen más rápidamente.
  • Tienen gran capacidad de expansión: a medida que crece la demanda de ciertos servicios, es posible realizar implementaciones en distintos servidores e infraestructuras para satisfacer sus necesidades.
  • Capacidad de recuperación: Si estos servicios independientes están bien diseñados, no pueden afectar a los demás. Esto significa que si una parte falla, no afecta a toda la aplicación, a diferencia del modelo de aplicaciones monolíticas.
  • Facilidad de implementación: Debido a que las aplicaciones basadas en microservicios son más modulares y más pequeñas que las aplicaciones monolíticas tradicionales, ya no es necesario preocuparse por su implementación
  • Aplicaciones más abiertas: Debido al uso de API políglotas, los desarrolladores tienen la libertad de elegir los mejores lenguajes y tecnologías para la función que se necesita.

Características propias de los microservicios

Frente al marco general en el que se encuadran los microservicios, también hay que tener cuenta otras características que les son propias. En este sentido, la mayoría de las que citamos a continuación las vamos a encontrar en casi cualquier desarrollo.

Los componentes son servicios: en el sentido en el que cada componente se puede «descomponer» en servicios en lugar de en bibliotecas de software. Los distintos servicios de comunican entre sí mediante mecanismos como servicios web o RPC en lugar de usar llamadas a funciones en memoria como hacen las bibliotecas.

En el centro está el negocio: Cada uno de los microservicios que forman parte de una aplicación o sistema se organiza en torno a una capacidad del negocio en que se despliega.

Productos, no proyectos: Relacionada con la característica anterior, en este tipo de despliegues se sigue la idea de que cada equipo de desarrollo debe estar a cargo de un componente (servicio) durante todo el ciclo de vida del mismo, desde la etapa de diseño y construcción, la fase de producción y hasta la de mantenimiento.

Gobierno descentralizado: En una estructura que se basa en múltiples servicios colaborativos, podemos decidir utilizar diferentes lenguajes de programación y tecnologías dentro de cada servicio. De esta forma podemos elegir la herramienta adecuada para cada tipo de trabajo en lugar de tener una estandarizada.

Gestión de datos descentralizada:Los microservicios prefieren dejar a cada servicio que gestione su propia base de datos, sean estos diferentes instancias de la misma tecnología de base de datos o sistemas de base de datos completamente diferentes. En un mismo sistema pueden convivir bases de datos como Redis, MySQL, Apache, Neo4j, etc.

Diseño tolerante a fallos: Las aplicaciones necesitan ser diseñadas de modo que puedan tolerar los problemas más habituales que se pueden presentar en los distintos servicios. Cualquier llamada de servicio puede fallar y el cliente tiene que ser capaz de responder a esto con la mayor facilidad y eficacia posible, evitando los fallos en cascada que suelen presentarse en las arquitecturas distribuidas.

Automatización y evolución: La mayoría de los productos y sistemas desarrollados con el enfoque de microservicios han sido construidos por equipo que usan entrega continua y su precursor la integración continua.

Además, cuando se divide el sistema en servicios hay que tener en cuenta que cada uno tiene que poder ser reemplazado o actualizado de forma independiente. Es decir, tiene que permitir una fácil evolución.

Microservicios y contenedores

La tecnología que más se ha aprovechado de la apuesta por los microservicios probablemente la de contenedores. Tal y como os contamos en el especial «Contenedores: casi todo lo que tienes que saber», un contenedor «desacopla» aplicaciones y otros elementos de software del sistema operativo en el que se ejecutan, de modo que cada una de estas aplicaciones o servicios se ejecutan en su propio sandbox de forma aislada, sin interferir con el resto de procesos y aplicaciones.

Este aislamiento impide que los procesos que se ejecutan dentro de un contenedor determinado supervisen o afecten a los procesos que se ejecutan en otro contenedor, al mismo tiempo que tampoco influyen ni afectan al funcionamiento del equipo o el sistema operativo sobre los que se despliegan.

La apuesta de los microservicios por los contenedores resulta por lo tanto obvia: cada microservicio puede ejecutarse en su propio contenedor, lo que reduce enormemente la complejidad de gestionar el conjunto de los mismos. A esto por supuesto hay que unir tecnologías como Kubernetes, que permiten automatizar la implementación, la gestión, el escalado, la creación de redes y la disponibilidad de aplicaciones basadas en contenedores. Es la combinación de microservicios fáciles de construir y contenedores fáciles de desplegar lo que facilita el desarrollo de la filosofía DevOps.

Periodista tecnológico con más de una década de experiencia en el sector. Editor de MuyComputerPro y coordinador de MuySeguridad, la publicación de seguridad informática de referencia.

Lo más leído