Introducción a Microservicios 22 Aug 2019

imagen intro

Introducción

Este articulo pretende ayudarnos a comprender la Arquitectura de Microservicios aplicadas al desarrollo de aplicaciones empresariales. Veremos que fuerzas motivaron su surgimiento, así como que patrones e implementaciones existen hoy.

Que son los microservicios

Microservicios es un “nuevo” paradigma a la hora de definir la arquitectura de una aplicación de software. Esto es, existen nuevas prácticas y patrones de arquitectura a la hora de descomponer una aplicación empresarial en “pequeños” servicios. Adoptando microservicios uno logra tener servicios de software que:

Como se puede apreciar en el diagrama siguiente, una aplicación ficticia ha sido descompuesta en tres servicios. El servicio de cuentas, el servicio de inventarios y el servicio de entrega. Cada servicio se aloja típicamente en un servidor distinto y cada uno de ellos tiene su propio almacenamiento de datos. En una aplicación con arquitectura tradicional, también llamada monolítica, estos servicios junto a otros serían los módulos o paquetes, todos integrados en un solo sistema

arquitectura de microservicios

Imagen tomada de: microservicios.io

Porque cambiar?

En la era de Internet, donde los clientes valoran la inmediatez, la experiencia digital y una constante mejora en los servicios que reciben, los negocios esperan de sus organizaciones:

Sin embargo, la forma en que se han venido construyendo las aplicaciones de software que soportan el negocio presentan síntomas que limitan las nuevas fuerzas al hacer negocios. Ver diagrama siguiente: sistema monolitico

Consideraciones claves para adoptar microservicios

Adoptando una arquitectura de microservicios genera los siguientes beneficios

Sin embargo, para cosechar estos beneficios es importante considerar aspectos claves a la hora de adoptar microservicios:

Los patrones de diseño

Como es sabido, la recurrencia para resolver un problema usando software, genera un patrón de diseño. La adopción constante de una arquitectura de microservicios nos ha dejado al día de hoy de patrones de diseño bastantes definidos a la hora de adoptar microservicios. Estos son:

  1. Patrones de construccion core. Estos patrones nos ayudan a:
    • Establecer el adecuado tamaño y responsabilidad de cada uno de los servicios.
    • Definir los protocolos de comunicación de los servicios
    • Establecer los mecanismos para gestionar la configuración de los servicios.
  2. Patrones de Enrutamiento. Estos patrones nos ayudan a:
    • Abstraer la ubicación física de red del servicio a la hora de ser consumido.
    • Proveer un solo punto de acceso hacia los servicios.
  3. Patrones de Tolerancia a fallos. Estos patrones nos ayudan a:
    • Balancear la carga cuando se realizan las llamadas desde los clientes.
    • Evitar que clientes hagan llamadas a servicios que presentan fallas.
    • Proveer respuestas alternativas antes servicios que presentan fallas.
  4. Patrones de Seguridad. Estos patrones nos ayudan a:
    • Gestionar la autenticación y autorización al llamar a servicios protegidos.
    • Gestionar y propagar los tokens de acceso obtenidos.
  5. Patrones de trazabilidad y logging. Estos patrones nos ayudan a:
    • Correlacionar los “logs” producidos por los diferentes servicios.
    • Agrupar los logs para una mejor trazabilidad.
    • Visualizar la trazabilidad de los eventos en forma integrada.
  6. Patrones de despliegue. Nos ayudan a:
    • Definir procesos de construcción y despliegue continuo.
    • Tratar las configuraciones de infraestructura tecnológica como código.
    • Generar contenedores de los servicios que son inmutables a cambios cada vez que se despliegan.

Tecnologia existente

Los patrones son el marco de especificación que necesita estar soportado en alguna implementación. En la actualidad existen diversas implementaciones de los patrones indicados, muchos de ellos inclusive antes de la existencia de arquitectura de microservicios. En el entorno Java, Spring Boot y Spring Cloud vienen siendo usado con mucho éxito al momento de implementar una arquitectura de microservicios.

En el siguiente diagrama presentamos la pila tecnológica en el entorno Java y Spring Framework.
tecnologias de microservicios

Cuando no adoptar microservicios

A pesar de los grandes beneficios que trae la adopción de una arquitectura de microservicios, su adopción no es recomendable en los siguientes escenarios.

Conclusiones

Los microservicios nos ofrecen una alternativa de arquitectura de software a la hora de implementar aplicaciones empresariales. Su adopción requiere de introducir nuevas prácticas, procesos y herramientas que ayuden a incrementar el éxito de su implementación.

Referencias