¿Qué son los patrones de diseño para microservicios?

Dos mujeres, una señalando la pantalla de una computadora portátil que muestra código o datos, mientras que otra mira, en un entorno profesional.

Autores

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

¿Qué son los patrones de diseño para microservicios?

Los patrones de diseño para microservicios sirven como estrategias para crear software mediante el uso de la arquitectura de microservicios, un enfoque que desglosa las aplicaciones individuales en componentes o servicios más pequeños.

Estos patrones de arquitectura proporcionan soluciones estandarizadas para los desafíos cotidianos que enfrentan los equipos de desarrollo al implementar sistemas informáticos distribuidos, incluida la comunicación de servicios, la coherencia de datos, la tolerancia a fallas y la escalabilidad del sistema.

Muchas de las experiencias digitales actuales de las que depende el mundo son posibles gracias a los patrones de diseño para microservicios y se pueden ver en muchos casos de uso del mundo real. Por ejemplo, si está transmitiendo un programa en Netflix, está contratando cientos de servicios separados que trabajan juntos para entregar contenido, administrar perfiles de usuario y sugerir qué ver a continuación.

Del mismo modo, Amazon coordina el inventario, los pagos y los envíos a través de distintos servicios. En las industrias financieras, los bancos y otras instituciones también dependen de patrones de diseño de microservicios para separar la gestión de riesgos y la atención al cliente, manteniendo el dinero seguro y accesible.

Según la encuesta de IBM, Microservices in the Enterprise, 2021, el 88 % de las organizaciones informan que los microservicios ofrecen muchos beneficios a los equipos de desarrollo. Estos beneficios incluyen un aumento del 20 al 50 % en la productividad de los desarrolladores debido a una mejor organización del código, un mantenimiento más sencillo y ciclos de despliegue más rápidos.

Las últimas noticias tecnológicas, respaldadas por los insights de expertos

Manténgase al día sobre las tendencias más importantes e intrigantes de la industria sobre IA, automatización, datos y más con el boletín Think. Consulte la Declaración de privacidad de IBM.

¡Gracias! Ya está suscrito.

Su suscripción se entregará en inglés. En cada boletín, encontrará un enlace para darse de baja. Puede gestionar sus suscripciones o darse de baja aquí. Consulte nuestra Declaración de privacidad de IBM para obtener más información.

¿Qué son los microservicios?

La arquitectura de microservicios es un método nativo de la nube que divide la aplicación en servicios independientes y de acoplamiento flexible que se implementan en contenedores gestionados por plataformas de orquestación como Kubernetes.

Cada servicio funciona de forma independiente con su propia pila dedicada de tecnología,incluidas bases de datos dedicadas y modelos de gestión de datos. La comunicación entre servicios se produce a través de API REST, plataformas de transmisión de eventos, como Apache Kafka, y agentes de mensajes, mientras que los equipos diseñan servicios en torno a capacidades empresariales con límites claros llamados contextos acotados.

Este enfoque moderno para el desarrollo de software respalda la flexibilidad operativa requerida para las iniciativas modernas de transformación digital, como la automatización de DevOps y los pipelines de CI/CD, la migración a la nube, la modernización de aplicaciones y la integración de la inteligencia artificial (IA).

microservicios

¿Qué son los microservicios?

En este video, Dan Bettinger ofrece una visión general de los microservicios.  Al comparar la arquitectura de aplicaciones de microservicios con el tipo tradicional de arquitectura monolítica a través del ejemplo de una aplicación de tickets de muestra, Dan expone los innumerables beneficios de los microservicios y las soluciones que brindan a los desafíos que presentan los sistemas monolíticos.

Microservicios frente a arquitectura monolítica

Si bien los microservicios ofrecen ventajas significativas para las aplicaciones modernas, comprender cuándo elegir esta arquitectura requiere compararla con los enfoques tradicionales.

La arquitectura monolítica crea una aplicación como una única unidad desplegable en la que todas las funciones empresariales están integradas y comparten el mismo código base, base de datos y entorno de tiempo de ejecución. La arquitectura de microservicios desglosa una aplicación en servicios más pequeños e independientes que se comunican a través de interfaces de programación de aplicaciones (API) bien definidas, cada una de las cuales tiene potencialmente su propia base de datos y ciclo de despliegue.

La diferencia clave entre estos métodos de diseño es el acoplamiento: cuán estrechamente conectadas están las diferentes partes del sistema. Los monolitos tienen un alto acoplamiento interno, pero un despliegue simple, mientras que los microservicios tienen un acoplamiento débil entre servicios, pero requisitos de infraestructura de TI más complejos.

Los ingenieros de software a menudo eligen la arquitectura monolítica para aplicaciones más pequeñas y simples, como para pequeñas empresas o nuevas empresas que buscan controlar los costos y acelerar el desarrollo. En escenarios complejos que requieren alta escalabilidad, resiliencia y flexibilidad (por ejemplo, plataformas de redes sociales, aplicaciones bancarias), los microservicios son la mejor opción.

Al decidir qué enfoque adoptar, las organizaciones deben evaluar cada uno en función de sus requisitos específicos, incluido el tamaño del equipo, la complejidad de la aplicación, las necesidades de escalabilidad y los niveles de madurez de DevOps.

Aprenda más sobre la arquitectura monolítica frente a los microservicios.

Tipos de patrones de diseño de microservicios

Los patrones de diseño de microservicios se dividen en cinco áreas clave que proporcionan soluciones probadas que ayudan a los equipos a resolver desafíos de arquitectura distribuida:

  1. Comunicación y descubrimiento de servicios
  2. Gestión de datos y transacciones
  3. Resiliencia y manejo de fallas
  4. Arquitectura e integración
  5. Evento y comunicación

1. Comunicación y descubrimiento de servicios

Patrón de registro de servicios

El patrón de registro de servicios crea un directorio central donde los servicios registran sus endpoints y su estado de salud, eliminando la necesidad de direcciones fijas. Cuando los servicios necesitan comunicarse, consultan el registro para encontrar instancias de servidor disponibles. Por ejemplo, cuando un servicio de pago necesita ponerse en contacto con un servicio de inventario, comprueba el registro para localizar instancias de inventario en buen estado.

Patrón de API Gateway

Un patrón de API Gateway crea un único punto de entrada entre los clientes y múltiples microservicios de backend. En lugar de que los clientes realicen llamadas separadas a diferentes servicios, el API gateway recibe una solicitud, la enruta a los microservicios apropiados y combina las respuestas en un solo resultado.

Por ejemplo, al cargar la página de un producto, la puerta de enlace puede obtener simultáneamente detalles del producto, precios, inventario y comentarios de diferentes servicios. Luego devuelve toda esta información en una respuesta única y consolidada al cliente.

Patrones de detección de servicios

Un patrón de descubrimiento de servicios resuelve el desafío de que los servicios se ubiquen entre sí en entornos dinámicos. A medida que los microservicios se amplían o se actualizan a una nueva versión, sus ubicaciones de red cambian constantemente. Los patrones de descubrimiento de servicios proporcionan mecanismos automatizados para que los servicios se registren y encuentren otros servicios con los que necesitan comunicarse, eliminando la necesidad de direcciones codificadas.

2. Gestión de datos y transacciones

Base de datos por patrón de servicio

El patrón de base de datos por servicio garantiza que cada microservicio posea y gestione su propia base de datos, eliminando las dependencias de datos compartidas entre servicios. Este enfoque evita el acceso directo a datos entre servicios y reduce el acoplamiento, aunque requiere que los servicios se comuniquen a través de API cuando necesitan información de otras fuentes de información. Por ejemplo, en un sistema de planificación de recursos empresariales (ERP), el servicio de contabilidad gestiona los datos financieros independientemente de la base de datos de empleados del servicio de RR. HH.

Patrón de saga

Un patrón de saga gestiona transacciones que abarcan múltiples microservicios dividiéndolas en pasos coordinados. Cada servicio completa su transacción local y activa el siguiente paso en la cadena. Si algún paso falla, el patrón ejecuta automáticamente acciones para deshacer los pasos anteriores. Por ejemplo, al procesar un pedido en línea, si el pago falla después de reservar el inventario, la saga libera automáticamente los artículos reservados.

CQRS (patrón de segregación de responsabilidad de consulta de comando)

El patrón CQRS separa la modificación de datos (comandos) de la recuperación de datos (consultas) mediante el uso de modelos dedicados para cada uno. Esta división permite que el sistema optimice cada ruta de forma independiente, minimizando la contención de escritura en el lado de los comandos y reduciendo la latencia de consulta en el lado de lectura. En un sistema de comercio electrónico, realizar un pedido utiliza el modelo de comando optimizado para escritura, mientras que generar un informe de ventas aprovecha el modelo de consulta optimizado para lectura.

3. Resiliencia y manejo de fallas

Patrón de disyuntor

El patrón de disyuntor evita que las fallas en un servicio se propaguen por todo el sistema al monitorear las llamadas a los servicios posteriores y detener las solicitudes cuando se detectan fallas. Cuando un servicio deja de responder, el disyuntor se "dispara" y bloquea más llamadas, protegiendo los recursos del sistema y evitando fallas en cascada.

Por ejemplo, si un servicio de inventario deja de funcionar, el disyuntor impide que el servicio de pedidos realice repetidas solicitudes fallidas. Esto permite que el resto del sistema continúe funcionando mientras proporciona respuestas alternativas a los clientes.

Patrón bulkhead

El patrón bulkhead aísla los recursos del sistema para evitar que las fallas en un área afecten a todo el sistema. Al igual que los compartimentos en el casco de un barco, los bulkheads separan diferentes funciones para que, si una falla, las otras permanezcan operativas. El patrón limita el número de solicitudes o recursos simultáneos asignados a servicios específicos.

4. Arquitectura e integración

Patrón de backend-for-frontend (BFF)

Un patrón de backend para frontend (BFF) crea un servicio de backend dedicado adaptado a cada interfaz de frontend específica. Debido a que las aplicaciones móviles tienen requisitos diferentes a los de las aplicaciones web (por ejemplo, pantallas más pequeñas, ancho de banda limitado, capacidades de rendimiento variables), el patrón BFF permite a los desarrolladores optimizar cada backend para su front end particular.

Patrones de entidades y agregados

Un patrón de entidades y agregados organiza los datos relacionados en unidades lógicas basadas en conceptos de diseño orientados al dominio (DDD). Una entidad representa un objeto distinto con una identidad única, como una cuenta de cliente identificada por una dirección de correo electrónico. Un agregado combina entidades relacionadas que deben actualizarse juntas como una sola unidad.

Por ejemplo, en un sistema de comercio electrónico, un agregado de pedidos incluiría los detalles del pedido, las líneas de pedido y la información de envío, todo lo cual debe permanecer sincronizado cuando se producen cambios.

Patrón strangler

Un patrón strangler ayuda a gestionar el proceso de refactorización de una aplicación monolítica en una arquitectura de microservicios más fácil de mantener. Los nuevos microservicios se construyen gradualmente junto con el monolito existente, asumiendo lentamente la funcionalidad hasta que el antiguo sistema se reemplaza por completo. El nombre proviene de la metáfora de cómo una enredadera (microservicios) crece gradualmente alrededor y finalmente estrangula un árbol (la aplicación monolítica) con el tiempo.

5. Evento y comunicación

Patrón basado en eventos

Un patrón basado en eventos permite que los microservicios se comuniquen de forma asincrónica mediante la publicación y el consumo de eventos en lugar de realizar llamadas de servicio directas. Cuando un servicio completa una acción, transmite un evento que otros servicios interesados pueden escuchar y responder en consecuencia. Este enfoque crea un acoplamiento flexible entre los servicios, lo que les permite operar de forma independiente sin dejar de coordinar sus actividades a través de un sistema de eventos compartido.

Patrón sidecar

Un patrón sidecar se refiere a desplegar un contenedor secundario (el "sidecar") junto con una aplicación principal dentro del mismo entorno de ejecución. Este sidecar maneja asuntos transversales (por ejemplo, registro, monitoreo, seguridad, observabilidad), extendiendo la funcionalidad de la aplicación principal sin modificar su base de código.

Patrones de microservicios de adaptador

Un patrón de microservicios de adaptador permite la comunicación entre sistemas o interfaces incompatibles. Al igual que un adaptador de viaje le permite conectar su dispositivo a tomas extranjeras, los patrones de adaptador convierten entre diferentes formatos de datos, protocolos o API. Este patrón es beneficioso cuando se integra con sistemas existentes o servicios de terceros que utilizan diferentes estándares de comunicación.

Casos de uso de diseño de microservicios

Los patrones de diseño de microservicios son particularmente valiosos en industrias que requieren alta escalabilidad, lógica de negocio compleja y rendimiento confiable del sistema. Los principales casos de uso incluyen:

  • Las plataformas de comercio electrónico se basan en patrones de diseño de microservicios para manejar el equilibrio de carga durante los eventos de ventas y gestionar el inventario complejo en múltiples almacenes. También coordinan las operaciones de pago, envío y atención al cliente en diferentes sistemas para mejorar los resultados comerciales y las experiencias del cliente.
  • Los servicios de transmisión utilizan patrones de microservicios para entregar contenido globalmente mientras gestionan las preferencias y recomendaciones de los usuarios, lo que les permite manejar cargas masivas de usuarios simultáneas con un almacenamiento en búfer mínimo y experiencias personalizadas.
  • Los servicios financieros implementan estos patrones para separar las operaciones comerciales, de gestión de riesgos, de autenticación y de cara al cliente, manteniendo un estricto cumplimiento normativo y los estándares de seguridad requeridos por las instituciones financieras.
  • Los sistemas de atención médica utilizan estos patrones para integrar los registros de pacientes, la programación de citas y los sistemas de facturación, al tiempo que mantienen el cumplimiento de la HIPAA y se conectan con varias API de dispositivos médicos en diferentes proveedores de atención médica.
  • Las plataformas de redes sociales utilizan patrones de diseño de microservicios para escalar mensajes, fuentes de contenido y procesamiento de medios de forma independiente, lo que les permite manejar miles de millones de interacciones de usuarios diariamente mientras mantienen un rendimiento receptivo en todas las características.

Beneficios de los patrones de diseño de microservicios

Los patrones de diseño de microservicios ofrecen las mejores prácticas para gestionar los complejos sistemas distribuidos actuales y brindan estos amplios beneficios:

  • Complejidad reducida: los enfoques estandarizados y probados para los desafíos comunes llevan a resultados más predecibles, una resolución de problemas más fácil y una incorporación más rápida al equipo.
  • Agilidad y tiempo de comercialización más rápido: los equipos pueden desarrollar, desplegar y escalar servicios de forma independiente, lo que reduce los cuellos de botella de coordinación y acelera la entrega de características.
  • Tolerancia a fallos mejorada: las técnicas de aislamiento evitan que las fallas se produzcan en cascada en todo el sistema, lo que reduce significativamente el tiempo de inactividad y mejora la confiabilidad general del sistema.
  • Escalabilidad y flexibilidad mejoradas: las organizaciones pueden asignar recursos con precisión donde sea necesario y adaptarse rápidamente a los cambiantes requisitos del negocio sin grandes revisiones del sistema. Los equipos pueden desarrollar servicios en diferentes lenguajes de programación, como Java™ o Python, en función de necesidades específicas.
  • Rentabilidad: el escalado dirigido y la optimización de recursos, combinados con la capacidad de elegir pilas de tecnología óptimas para servicios específicos, dan como resultado sistemas más económicos.
  • Diversidad tecnológica: los equipos pueden seleccionar las mejores herramientas y marcos para los requisitos específicos de cada servicio, lo que conduce a soluciones más eficientes y fáciles de mantener. Por ejemplo, puede seleccionar Java Spring Boot para microservicios empresariales para bases de datos como servicio (DBaaS) o Python para analytics de datos.

Elegir los patrones de diseño de microservicios adecuados

La selección de patrones adecuados depende de los requisitos específicos de su sistema y de las capacidades organizativas. El uso de un enfoque sistemático puede guiar estas decisiones arquitectónicas.

Comience con patrones fundacionales

Comience con API gateway y el descubrimiento de servicios antes de implementar patrones complejos como el abastecimiento de eventos o CQRS. Estos patrones centrales establecen la infraestructura de comunicación necesaria para implementaciones más sofisticadas.

Relacione las capacidades de su equipo

Considere su experiencia con sistemas distribuidos, madurez operativa y prácticas de DevOps. Los equipos nuevos en microservicios inicialmente obtienen beneficio de patrones más simples, mientras que los equipos experimentados pueden abordar patrones de coordinación más avanzados que requieren un conocimiento operativo más profundo.

Revisar la sobrecarga operativa

Cada patrón introduce una complejidad que su equipo debe gestionar a largo plazo. La base de datos por servicio requiere estrategias de sincronización de datos. Los patrones basados en eventos necesitan una infraestructura de intermediario de mensajes. Asegúrese de tener la capacidad para admitir los patrones elegidos.

Adopte gradualmente

Comience con algunos servicios utilizando patrones básicos, adquiera experiencia y luego amplíe a medida que crezca su experiencia. Este enfoque incremental evita el exceso de ingeniería y permite aprender de las primeras implementaciones.

Soluciones relacionadas
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloud es una plataforma de contenedores OpenShift (OCP) totalmente gestionada.

Conozca Red Hat OpenShift
Soluciones de DevOps

Utilice el software y las herramientas de DevOps para crear, desplegar y gestionar aplicaciones nativas de la nube en múltiples dispositivos y entornos.

Explorar las soluciones DevOps
Servicios de consultoría en la nube 

Desbloquee nuevas capacidades e impulse la agilidad empresarial con los servicios de IBM de asesoramiento sobre la nube. Descubra cómo crear conjuntamente soluciones, acelerar la transformación digital y optimizar el rendimiento a través de estrategias de nube híbrida y asociaciones de expertos.

Servicios en la nube
Dé el siguiente paso

Desbloquee nuevas capacidades e impulse la agilidad empresarial con los servicios de asesoramiento de IBM Cloud.

Explorar servicios de consultoría de IBM Cloud Cree su cuenta gratuita de IBM Cloud