Patrones de diseño para microservicios

Una arquitectura de microservicios distribuye la responsabilidad entre los servicios independientes. Esa independencia cambia la forma de controlar los siguientes desafíos arquitectónicos comunes:

  • Mantenimiento de coherencia de datos sin transacciones distribuidas
  • Administración de comunicaciones entre servicios
  • Aislamiento de errores para que los errores no se produzcan en cascada
  • Integración de sistemas legados durante la migración

Los patrones de diseño de este artículo abordan estos desafíos directamente. Cada patrón tiene como destino una preocupación específica que podría surgir al diseñar, compilar y operar microservicios.

Diagrama que muestra los patrones de diseño de microservicios y sus relaciones.

El flujo de diagrama comienza con una aplicación cliente. Una flecha apunta de la aplicación cliente a un cuadro que representa la aplicación de microservicios. Una segunda flecha apunta desde la aplicación cliente al patrón Strangler Fig. Dos flechas apuntan desde el patrón Strangler Fig. Una flecha apunta al cuadro de aplicación de microservicios y la otra apunta a un sistema heredado etiquetado como rectángulo en la parte inferior del diagrama. La caja de aplicación de microservicios incluye patrones de diseño y microservicios. En una sección etiquetada Puerta de Enlace de API, una flecha apunta desde el patrón de descarga del gateway a los patrones de enrutamiento del gateway y agregación del gateway. Una flecha apunta desde el patrón de enrutamiento de gateway hacia un microservicio de escritorio. Una flecha apunta desde el Gateway Aggregation pattern a un microservicio para móviles. Estos microservicios se encuentran dentro de una sección con la etiqueta Backends for Frontends. Las flechas apuntan de estos microservicios a otro microservicio en un cuadro con la etiqueta Sidecar. Una flecha apunta de este microservicio a un servicio remoto fuera del cuadro de aplicación de microservicios. Una flecha apunta desde el microservicio para dispositivos móviles a una sección que contiene dos cuadros etiquetados como servicio. Las flechas apuntan de cada servicio a un bus de eventos que se encuentra entre ellos. En otra sección, una flecha que pasa por una capa anticolisión señala desde un microservicio hacia el sistema heredado, fuera de la aplicación de microservicios.

Patrones de diseño comunes

  • Capa de anticorrupción implementa una capa de fachada o adaptador entre subsistemas que no comparten la misma semántica. Este patrón traduce las solicitudes entre subsistemas e impide que las dependencias de sistemas heredados u otros servicios que tengan modelos de dominio incompatibles limiten el diseño de un nuevo servicio.

  • Backends for Frontends crean servicios backend independientes para diferentes tipos de clientes, como escritorio y móvil. Al adoptar este enfoque, no es necesario que un único servicio back-end controle los requisitos en conflicto de varios tipos de cliente. Este patrón ayuda a simplificar cada microservicio separando preocupaciones específicas del cliente.

  • Bulkhead aísla los recursos críticos, como grupos de conexiones, memoria y CPU, para cada carga de trabajo o servicio. Este aislamiento impide que una sola carga de trabajo o servicio consuma todos los recursos. Este patrón aumenta la resistencia de la carga de trabajo evitando que un servicio cause errores en cascada.

  • La coreografía permite a cada servicio decidir cuándo y cómo procesar una operación empresarial, en lugar de depender de un orquestador central. Este patrón reduce el acoplamiento entre servicios y admite actualizaciones o cambios frecuentes del servicio.

  • La segregación de responsabilidades de consulta de comandos (CQRS) separa las operaciones de lectura de las operaciones de escritura en modelos de datos independientes. Este patrón mejora el rendimiento, la escalabilidad y la seguridad en los microservicios donde las lecturas y escrituras tienen diferentes requisitos de rendimiento o escalado.

  • Enrutamiento de Pasarela utiliza un gateway de API como proxy inverso para enrutar las solicitudes de cliente a diferentes servicios según la solicitud. Este enfoque proporciona a los clientes un único punto de conexión en lugar de muchos.

    La agregación de puerta de enlace utiliza la puerta de enlace para combinar varias solicitudes de clientes en una sola solicitud. Este enfoque reduce el intercambio innecesario de información entre clientes y servicios.

    Descarga de puerta de enlace centraliza la funcionalidad transversal, como la terminación de Secure Socket Layer (SSL), la autenticación y la limitación de velocidad, en la puerta de enlace para que los servicios individuales no tengan que implementar estos problemas por separado.

    Para más información, consulte Puertas de enlace de API para microservicios.

  • Saga administra la coherencia de los datos entre microservicios que tienen almacenes de datos independientes. Una saga es una secuencia de transacciones locales en las que cada servicio realiza su operación y desencadena el siguiente paso. Si se produce un error en un paso, la saga ejecuta transacciones compensatorias para deshacer los cambios anteriores. Este patrón reemplaza las transacciones distribuidas, que a menudo no son prácticas en una arquitectura de microservicios.

  • Sidecar implementa componentes auxiliares de una aplicación como un contenedor o proceso independientes para proporcionar aislamiento y encapsulación. Use este patrón para adjuntar funciones comunes, como el registro, la supervisión y la configuración de red, a un servicio sin insertarla en el código del servicio.

  • Strangler Fig admite la migración incremental desde un sistema heredado reemplazando gradualmente partes específicas de funcionalidad por nuevos servicios. Los consumidores siguen usando la misma interfaz, sin tener en cuenta que se está llevando a cabo la migración, hasta que reemplace por completo el sistema heredado.

Patrones auxiliares

La comunicación entre servicios describe los patrones Retry y Circuit Breaker para llamadas de servicio a servicio resistentes.

Para obtener el catálogo completo de patrones de diseño en la nube en el Centro de arquitectura de Azure, consulte Patrones de diseño en la nube.

Pasos siguientes