Ir al contenido principal

Patrones a tener en cuenta en microservicios

 Los microservicios son una arquitectura que permite desarrollar aplicaciones como servicios independientes que se comunican entre sí. Esta comunicación puede ser síncrona, utilizando llamadas API, o asíncrona, a través de Publicación y Suscripción mediante Message Queues. Los microservicios son altamente escalables, desplegables de forma independiente, débilmente acoplados, fáciles de mantener y verificar, y están organizados en torno al dominio empresarial. Además, son manejados por equipos pequeños y autónomos y están pensados para trabajar en integración continua a través de canalizaciones CI/CD automatizadas para una entrega rápida al mercado y tienen alta resiliencia ante fallos.

 


En contraste, la arquitectura monolítica tradicional es una aplicación estrechamente acoplada en un solo código base que contiene diferentes capas como presentación, lógica empresarial y persistencia de la base de datos. Esta aplicación es un contenedor único que contiene los archivos de clase y todas las dependencias necesarias para ejecutarlo. Aunque es fácil de crear, probar e implementar, enfrenta desafíos como el acoplamiento estrecho, la escalabilidad y un solo punto de falla. En 2009, Netflix migró su infraestructura desde sus centros de datos privados a la nube de AWS y reemplazó su arquitectura monolítica por una arquitectura de microservicios.

Los microservicios se segregan en función del dominio comercial y se conectan a su propia base de datos. Estos servicios también pueden conectarse entre sí de forma síncrona o asíncrona para obtener los datos necesarios. Estos servicios se implementan como pequeños archivos jar independientes en su propia máquina y se implementan de forma independiente. Además, esta arquitectura es escalable de forma independiente utilizando una técnica llamada escalado horizontal y es tolerante a fallos y no tiene un solo punto de falla.

La arquitectura de microservicios tiene muchos patrones de diseño diferentes que se pueden usar para diferentes casos de uso. Estos desafíos de diseño se abordan en forma de soluciones denominadas patrones de diseño de microservicios, que se agrupan en diferentes tipos. 

Los diferentes tipos de patrones de diseño para microservicios incluyen:

Patrones de comunicación

 Estos patrones se enfocan en cómo los diferentes servicios se comunican entre sí. Los patrones incluyen:

  • API Gateway: Este patrón actúa como punto de entrada para todas las solicitudes de clientes. El API Gateway puede realizar tareas como autenticación, autorización y enrutamiento de solicitudes a servicios subyacentes.
  • Service Registry: Este patrón mantiene una lista actualizada de todos los servicios disponibles y su ubicación en la red. Los clientes pueden consultar el Service Registry para encontrar los servicios que necesitan.
  • Service Mesh: Este patrón proporciona una capa de red dedicada para los microservicios. La capa de red puede proporcionar características como la resiliencia, el equilibrio de carga y la seguridad.

Patrones de escalabilidad

Estos patrones se enfocan en cómo los microservicios pueden escalar horizontalmente y verticalmente. Los patrones incluyen:

  • Escalado automático: Este patrón utiliza métricas para detectar cuando un servicio necesita más capacidad y escala automáticamente en consecuencia.
  • Partitioning: Este patrón divide los datos en particiones y distribuye esas particiones en diferentes servicios. Esto permite a los servicios manejar cargas de trabajo más grandes.
  • Circuit Breaker: Este patrón protege los servicios de fallas en otros servicios. Si un servicio falla, el Circuit Breaker lo aísla y evita que cause fallas en otros servicios.

Patrones de tolerancia a fallos

Estos patrones se enfocan en cómo los microservicios pueden ser tolerantes a fallos y recuperarse de ellos. Los patrones incluyen:

  • Bulkhead: Este patrón aísla diferentes partes de un servicio en diferentes pools de recursos para que si una parte falla, no afecte a otras partes del servicio.
  • Retry: Este patrón intenta volver a ejecutar una operación si falla. Si sigue fallando después de un número determinado de intentos, se considera que ha fallado.
  • Timeout: Este patrón cancela una operación si no se completa dentro de un tiempo determinado. Esto evita que los servicios esperen indefinidamente a una respuesta.

Patrones de gestión de datos:

Estos patrones se enfocan en cómo los microservicios pueden manejar los datos de manera efectiva. Los patrones incluyen:

  • Database per Service: Este patrón utiliza una base de datos dedicada para cada servicio. Esto hace que sea más fácil para los servicios cambiar sus datos sin afectar a otros servicios.
  • Event Sourcing: Este patrón almacena todos los cambios en el estado de una aplicación como eventos. Esto permite a los servicios reconstruir el estado de la aplicación en cualquier momento.
  • CQRS: Este patrón separa la lectura y escritura de datos en servicios separados. Esto permite a los servicios optimizar la lectura y escritura de datos de manera independiente.

En general, estos patrones de diseño para microservicios se centran en la comunicación efectiva entre servicios, la escalabilidad, la tolerancia a fallos y la gestión de datos. Al implementar estos patrones, los equipos pueden crear arquitecturas de microservicios más eficientes y robustas.

Comentarios