¿Qué son los microservicios? A modo de introducción, podemos decir que son un enfoque arquitectónico y organizativo para el desarrollo de software. Se compone de pequeños servicios que son independientes entre sí pero que se comunican a través de una API. Los propietarios de estos servicios son equipos pequeños independientes. Como ves, es un tema de interés para un analista programador y por eso queremos desarrollarlo en las siguientes líneas.
Arquitectura monolítica vs arquitectura de microservicios
En el caso de las arquitecturas monolíticas, todos los procesos están estrechamente asociados y se ejecutan como un solo servicio. Como consecuencia, si hay un incremento de la demanda, debe escalarse toda la arquitectura. Agregar o mejorar las características de una aplicación monolítica es más complicado según crece la base de código. Esto limita la experimentación y complica la implementación de nuevas ideas. Por lo tanto, en las arquitecturas monolíticas muchos procesos son dependientes entre sí y están estrechamente vinculados. Por eso, si hay un fallo este se hace extensivo al resto de la arquitectura.
En cambio, con una arquitectura de microservicios, las aplicaciones se crean con componentes independientes que ejecutan cada uno de los procesos de la aplicación como un servicio. Estos se comunican a través de una interfaz bien definida mediante una API ligera. Cada servicio desempeña una sola función. Como se ejecutan de forma independiente, cada servicio se puede actualizar, implementar y escalar.
Características de los microservicios
- Autonomía. Cada servicio que forma parte de una arquitectura de microservicios se puede desarrollar, implementar, operar y escalar sin necesidad de afectar el funcionamiento de los otros servicios. Estos no necesitan compartir ninguno de sus códigos ni implementaciones con otros servicios. Toda comunicación entre componentes individuales se hace a través de API bien definidas.
- Especialización. Cada servicio está concebido para un conjunto de capacidades y se dirige a resolver un problema específico. Si el desarrollador suma más código a un servicio y el servicio se complica, se puede dividir en servicios que sean más pequeños.
- Agilidad. Fomentan una organización de equipos pequeños e independientes que pasan a ser propietarios de los servicios. El contexto en el que se mueven los equipos es pequeño y estos trabajan de forma más independiente y rápida. Esto reduce los tiempos del ciclo de desarrollo. Como consecuencia, en Imagar te recordamos que se mejora el rendimiento.
- Escalado flexible. Cada servicio se escala de forma independiente para satisfacer la demanda de la característica de la aplicación a la que respalda. Así, los equipos pueden amoldarse a las necesidades de la infraestructura, medir con detalle el coste de una característica y poder responder si en un servicio se da un aumento en la demanda.
- Implementación sencilla. Los microservicios permiten una integración y entrega continuas. Esto facilita testar nuevas ideas y hacer cambios si algo no funciona. El coste de los errores es bajo, por lo que se puede experimentar, actualizar el código y acelerar la comercialización de las nuevas características.
- Libertad tecnológica. No hablamos de un enfoque de diseño único, sino de que los equipos tienen libertad para elegir la mejor herramienta para resolver sus problemas. Como resultado, los sistemas que crean microservicios pueden elegir la mejor herramienta para cada trabajo.
- Código reutilizable. Dividir el software en módulos pequeños y bien definidos permite usar sus funciones para diferentes fines. Una aplicación puede arrancar sola porque los desarrolladores pueden crear nuevas capacidades sin escribir código desde cero.
- Resistencia. En una arquitectura monolítica, un error en un componente puede provocar un fallo en toda la aplicación. En cambio, con los microservicios, si hay un error en todo el servicio, las aplicaciones pueden degradar la funcionalidad sin tener que bloquear toda la aplicación.