Recientemente estuve investigando acerca de este tema que me resulta apasionante: ¿Qué son microservicios y cómo podemos diseñar sistemas basados en este concepto?
Muy rápidamente podemos acotar que microservicios es un paradigma de diseño de software que consiste en la división de un sistema complejo en pequeñas unidades funcionales (servicios) que se comunican entre sí por medio de protocolos de intercambio de mensajes muy básicos o «ligeros».
En el lenguaje técnico, podemos describir una aplicación diseñada en microservicios como lo contrario a una aplicación monolítica, es decir una aplicación diseñada «de una sola pieza». Veamos…
Tomemos como ejemplo una aplicación para el manejo de inventarios que tiene tres funcionalidades básicas: (1) autenticación de usuarios, (2) administración de catálogo de productos y (3) registro de movimientos de inventario. Mientras que nuestra aplicación monolítica se instala de una única manera, y está hecha en un único lenguaje (Java por ejemplo) cada vez que necesitamos hacer un cambio a alguna de las funciones del sistema, se debe instalar toda la nueva versión de la aplicación monolítica. Digamos que pasamos de la versión 1 a la version 2.
En el caso de una aplicación distribuida en microservicios podemos ver que cada una de las tres funcionalidades propuestas tiene su propia versión y se comunica con las otras en lo que sea necesario nada más. Así cuando tenemos que hacer un cambio en alguno de los servicios (digamos el registro de movimientos) este pasaría a la siguiente versión y los demás se mantienen sin cambio.
Ventajas
Seguidamente enumeramos una serie de ventajas del paradigma de microservicios:
- Mayor mantenibilidad y escalabilidad. Los cambios se realizan en unidades funcionales pequeñas y focalizadas.
- Cambios pequeños independientes.
- Facilidad de aprendizaje. El conocimiento de cada servicio está focalizado en unidades de negocio pequeñas.
- Facilidad de puesta en marcha. La puesta en marcha de un servicio no afecta la generalidad del sistema.
Características
Dentro de las principales características de estos componentes podemos mencionar:
- Cada componente provee un servicio funcional. Cada componente es un servicio de negocio.
- Cada microservicio tiene un bajo nivel de acoplamiento. Se puede hacer cambios a un servicio con un impacto mínimo en los demás.
- Cada microservicio es visto como un producto unitario. Tiene su propia versión y espacio de ejecución.
- Comunicación minimalista. Se usan protocolos sencillos como REST/HTTP.
- Gestión de datos descentralizada. Cada microservicio tiene su propia base de datos.
- Se facilita el uso de mtodologías DEVOPS para el desarrollo y mantenimiento de pequeños componentes independientes.
Desventajas y Cuestionamientos
También se han identificado algunas posibles áreas de cuestionamiento para este paradigma:
- Se puede facilmente incurrir en un exceso de granularidad.
- Se paga un precio en desempeño computacional por la modularización del sistema en general.
- La transición de un modelo monolítico a uno de microservicios puede ser extensa.
4,652 total views, 1 views today
Comentarios