Los microservicios se basan en una arquitectura orientada a servicios (SOA), compuesta por desarrollos independientes con objetivos sencillos y bien definidos, pero que pueden acoplarse entre sí mediante por ejemplo una API.
La arquitectura de microservicios lleva mucho tiempo ganando popularidad y actualmente se emplea en casi todos los proyectos de software importantes como Amazon, Netflix, The Guardian, UK Government Digital Service, etc. Esto se debe principalmente a sus beneficios. Veamos de qué se trata.
¿Qué son los microservicios?
Como su nombre indica, los microservicios son esencialmente servicios de software independientes que proporcionan una funcionalidad concreta de tu modelo de negocio.
Como hemos dicho antes, los microservicios están basados en la arquitectura orientada a servicios (SOA). Este modelo nos permite que las aplicaciones se comuniquen entre sí dentro de la misma o desde diferentes máquinas, no importa el lugar ni el lenguaje de programación, mientras se puedan comunicar en un mismo idioma, por ejemplo mediante un API REST con JSON.
Todo se reduce a un concepto en que siempre será necesario mantener y actualizar tus aplicaciones. Es por ello que necesitas facilitar la integración continua de tu aplicación para disminuir el tiempo que conlleva aplicar las nuevas versiones de una aplicación ‘monolítica’.
Los microservicios se diseñaron para resolver las limitaciones de las aplicaciones monolíticas, que impiden una mejora continua ágil. Esto es posible gracias a los servicios independientes de cada una de las necesidades de tu negocio o aplicación, y lo mejor de todo es que cada servicio puede ser alojado y desplegado independientemente uno del otro, como un servicio aislado. Estos servicios, al ser independientes se pueden mantener, monitorear y desplegar libremente.
¿Qué beneficios nos ofrecen los microservicios?
Los beneficios son muchos, seguro que alguno te motiva a desarrollar en arquitectura de microservicios:
- Los microservicios se pueden mantener, monitorear y desplegar de forma independiente.
- Elimina un único punto de fallo, ya que un servicio puede caerse sin afectar a todas las funciones que ofrece la aplicación de software.
- Puedes actualizar los servicios de forma independiente; actualizar un servicio no requiere modificar ningún otro.
- La aplicación está estructurada, es fácil de comprender y modificar ya que se centra en un único servicio.
- Puedes comprender y actualizar el código del microservicio sin saber nada sobre el resto de los microservicios, porque entre microservicios interactúan estrictamente a través de las API y, por lo tanto, no comparten estructuras de datos, esquemas de base de datos, u otras representaciones internas de objetos.
- Libertad en el lenguajes de programación, frameworks y bibliotecas. Como los servicios se comunican entre sí, podemos decidir qué tecnologías utilizar en cada servicio. Esto te dá la libertad de escoger la “herramienta correcta para cada tarea”.
- Puedes escalar sin dificultad, ya que cada servicio se aloja en un proceso separado. Si un servicio se convierte en el cuello de la botella y necesita muchos recursos, puede trasladarse a otra máquina sin afectar a otros servicios.
- Puedes realizar un cambio en un servicio y desplegarlo independientemente del resto del sistema o microservicios. Al contrario de las aplicaciones monolíticas en que tendrías que desplegar toda la aplicación, con Microservices tu código puede ser desplegado rápidamente.
- Todos los servicios pueden comunicarse entre sí, incluso cuando los servicios se encuentran en diferentes máquinas.
- Las aplicaciones se vuelven más resistentes porque cada característica se puede construir, probar, implementar y usar de forma independiente.
Conclusión
Piensa en cada servicio como una mini-aplicación.
Si tienes claro que tus aplicaciones escalarán o se versionarán, deberías valorar en estructurar tu programación por Microservicios, aunque la arquitectura de microservicios tenga sus propios inconvenientes, ya que la comunicación entre servicios se realiza a través de la llamada a la API del servicio en lugar de las llamadas en proceso dentro de la memoria. Pero, por otro lado, proporciona la flexibilidad para desarrollar, probar, mantener y desplegar funciones de manera independiente.
Si lo que te preocupa es el gran número de end-points que generarás con el conjunto de microservicios que necesita tu aplicación, la solución es un API Gateway. Se puede introducir como el punto de entrada para el front-end para agregar y responder las respuestas de varios servicios, entraremos en más detalles la proxima semana. Recuerda que si tienes una gran cantidad de servicios pequeños, pero todavía tienes que actualizarlos juntos, no son microservicios porque no están desplegados libremente.
Te recomiendo encarecidamente que leas el artículo de Martin Fowler y James Lewis, donde encontrarás todos los detalles de los Microservicios.
Fuentes: