En este tutorial realizaremos una introducción al concepto de microservicios respondiendo a preguntas como: ¿Qué son?¿Cuáles son sus ventajas/desventajas?¿Cuándo utilizarlos?
Índice de contenidos
- 1. Introducción
- 2. ¿Qué son?
- 3. ¿Cuáles son sus ventajas?
- 4. ¿Cuáles son sus desventajas?
- 5. ¿Cuándo utilizarlos?
- 6. Conclusiones
- 7. Referencias
1. Introducción
Los microservicios están de moda porque muchas compañías grandes y tecnológicamente sofisticadas lo usan. Amazon, eBay, Twitter, Netflix, PayPal, son algunos ejemplos exitosos de microservicios. ¿qué es un microservicio? ¿Qué beneficios aporta? ¿Cuál es el peaje a pagar para disfrutar de dichos beneficios?
En este tutorial vamos a realizar una introducción teórica para dar respuesta a estas preguntas, además de dar unas pequeñas pautas sobre cuándo es recomendable hacer uso de ellos.
2. ¿Qué son?
Tradicionalmente los sistemas grandes y complejos se han abordado mediante grandes sistemas mono-proceso (monolitos), donde el mantenimiento y evolución del mismo era complejo. En contraposición, los microservicios son un patrón de diseño software a nivel arquitectónico que implementa servicios mediante la colaboración otros servicios más pequeños y autónomos.
Cada microservicio debe dar solución a un área de negocio concreta, abstrayendo al resto del sistema de los detalles concretos de la implementación, favoreciendo su independencia, el mantenimiento y la evolución de cada uno de ellos.
Al trabajar cada uno sobre su propio proceso, permiten ser desplegados sin perjudicar a los demás, favoreciendo así la escalabilidad, y se comunican a través de mecanismos ligeros, como pueden ser peticiones HTTP, entre las diferentes APIs de cada microservicio.
3. ¿Cuáles son sus ventajas?
Gracias, en gran medida, a la independencia de los microservicios se pueden enumerar las siguientes ventajas:
- La escalabilidad es más eficiente.
- La capacidad de prueba de cada microservicio es mayor.
- Potencia la diversidad tecnológica: utilizar múltiples lenguajes así como diferentes stacks tecnológicos.
- Permite que los desarrollos sean independientes y en paralelo.
- Facilita el mantenimiento.
- Permite despliegues independientes.
- Aumenta la tolerancia a fallos.
4. ¿Cuáles son sus desventajas?
Las desventajas de los microservicios son, en gran parte, debidas a la introducción del concepto de distribución. A continuación las listamos:
- Aumentará la complejidad en la gestión de la configuración. Cada microservicio necesitará su propio canal de construcción y despliegue (Maven, Git, Jenkins, etc..).
- También aumentará la complejidad para mantener la transaccionalidad de cada operación.
- Normalmente será necesario disponer de un servicio para la localización de servicios.
- El rendimiento se puede ver afectado debido a saturaciones de la red o a procesos de (de)serialización.
- Monitorizar el sistema será más complejo.
- Será más difícil gestionar los errores correctamente.
5. ¿Cuándo utilizarlos?
Como hemos visto el enfoque de microservicios exige por parte de los desarrolladores esfuerzos no solo en la implementación del sistema sino también en la monitorización de los microservicios, el tratamiento de errores, la consistencia de los datos, además de otros factores asociados a los sistemas distribuidos.
Todo esto supone un coste de esfuerzo/tiempo añadido al proyecto que debe ser sopesado debidamente.
La decisión de si utilizar o no este tipo de diseño a la hora de construir nuestro sistema se fundamenta básicamente en el nivel complejidad que va a alcanzar.
Si el nivel de complejidad del sistema es bajo no se aconseja hacer uso de este tipo de diseños. Debido al esfuerzo que supone configurar y mantener el entorno de desarrollo, una decisión en favor de los mismos nunca será rentable hablando en términos de productividad del equipo. En este tipo de situaciones el equipo será más productivo trabajando sobre una aplicación monolítica.
A partir de cierto nivel de complejidad del sistema, las ventajas que ofrecen los microservicios harán viable el esfuerzo necesario que la productividad del equipo sea mayor.
6. Conclusiones
A lo largo de este tutorial se ha definido que es una arquitectura de microservicios, cuales son sus ventajas/desventajas y se ha dado alguna pista para saber cuando utilizar dicha arquitectura.
En posteriores tutoriales se mostrarán detalles de implementación específicos como implementación de microservicios con SpringBoot, securización de microservicios, etc…
7. Referencias
- Microservices. James Lewis y Martin Fowler.
- Sam Newman, «The Principles of Microservices», 2015
- Microservices in a Nutshell. Pros and Cons. Philipp Hauer.
[…] el tutorial Introducción a los microservicios del gran José Luis vimos una introducción al concepto de microservicios, cuales son […]