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.
Boletín de la industria
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.
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.
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).
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.
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:
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.
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.
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.
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.
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.
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:
Los patrones de diseño de microservicios ofrecen las mejores prácticas para gestionar los complejos sistemas distribuidos actuales y brindan estos amplios beneficios:
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 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.
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.
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.
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.
Red Hat OpenShift on IBM Cloud es una plataforma de contenedores OpenShift (OCP) totalmente gestionada.
Utilice el software y las herramientas de DevOps para crear, desplegar y gestionar aplicaciones nativas de la nube en múltiples dispositivos y entornos.
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.