Saltar a contenido

Qué es un Microservicio

Definición

Un microservicio es un enfoque de arquitectura para el desarrollo de software donde una aplicación se estructura como una colección de servicios pequeños, independientes y débilmente acoplados. Cada microservicio:

  • Se enfoca en una única funcionalidad o dominio de negocio
  • Ejecuta su propio proceso
  • Se comunica a través de mecanismos ligeros, generalmente HTTP/REST o mensajería
  • Puede ser desarrollado, desplegado y escalado independientemente
  • Generalmente posee su propio almacenamiento de datos

Características Principales

1. Independencia

Cada microservicio puede ser desarrollado, desplegado, actualizado y escalado de forma independiente, sin afectar a otros servicios. Esto permite:

  • Ciclos de desarrollo más rápidos
  • Despliegues más frecuentes y con menor riesgo
  • Escalabilidad granular (escalar solo los servicios que necesitan más recursos)

2. Especialización Tecnológica

Diferentes microservicios pueden utilizar diferentes tecnologías, lenguajes de programación y frameworks, permitiendo:

  • Elegir la mejor herramienta para cada trabajo específico
  • Adoptar nuevas tecnologías de forma incremental
  • Experimentar nuevos enfoques sin comprometer todo el sistema

3. Resiliencia

El aislamiento entre microservicios aumenta la resiliencia del sistema en su conjunto:

  • Los fallos en un servicio no afectan necesariamente a otros servicios
  • Es posible implementar mecanismos de tolerancia a fallos, como los circuit breakers
  • Recuperación más rápida, ya que solo el servicio afectado necesita ser reiniciado

4. Organización por Dominio de Negocio

Los microservicios se organizan típicamente en torno a capacidades de negocio, no a capas técnicas:

  • Alineación con los dominios de negocio (siguiendo los principios de Domain-Driven Design)
  • Equipos multifuncionales responsables de servicios específicos
  • Mejor comprensión del código y del propósito de cada servicio

Comparación con la Arquitectura Monolítica

mmd

Monolítico

  • Simplicidad: Más fácil de desarrollar inicialmente
  • Despliegue: Una única unidad de despliegue
  • Escalabilidad: Escala como una unidad, incluso si solo algunas partes necesitan más recursos
  • Consistencia: Transacciones más simples dentro del mismo proceso
  • Desarrollo: Puede volverse complejo y difícil de mantener a medida que crece

Microservicios

  • Complejidad: Más complejo de desarrollar y gestionar inicialmente
  • Despliegue: Múltiples unidades de despliegue independientes
  • Escalabilidad: Escala por servicio, optimizando los recursos
  • Consistencia: Requiere estrategias para la consistencia eventual entre servicios
  • Desarrollo: Más fácil de mantener y evolucionar servicios individuales

Desafíos de los Microservicios

1. Complejidad Distribuida

  • La comunicación entre servicios introduce latencia
  • Necesidad de manejar fallos de red
  • Depuración (debugging) más compleja en sistemas distribuidos
  • Necesidad de monitoreo y rastreo distribuidos

2. Consistencia de Datos

  • Las transacciones distribuidas son difíciles de implementar
  • Necesidad de adoptar patrones como Saga para operaciones que involucran múltiples servicios
  • Consistencia eventual en lugar de consistencia fuerte

3. Gobernanza

  • Estandarización de APIs y contratos
  • Versionamiento de servicios
  • Documentación y descubrimiento de servicios

4. Operacional

  • Necesidad de automatización para el despliegue y el monitoreo
  • Complejidad de la infraestructura (contenedores, orquestación)
  • Mayor sobrecarga operacional

Patrones Comunes en Microservicios

1. API Gateway

Un componente que actúa como punto de entrada único para todos los clientes, enrutando las solicitudes a los servicios apropiados.

mmd