Read in English · Lire en français · Auf Deutsch lesen
Sección 6.2 de 6.8 · Intermedio · 22 min de lectura
Arquitectura basada en servicios y arquitectura orientada a servicios
Videolección
6 min · narrado en inglés, con subtítulosSolo escuchar (audio)
Leer la transcripción
Muchos sistemas reales están entre un monolito y muchos microservicios. En esta lección conocerás la arquitectura basada en servicios, el término medio pragmático, y la arquitectura orientada a servicios, más antigua y con la que a menudo se confunde.
Piensa en un hospital que se queda pequeño para un solo edificio. Podría dividirse en cientos de clínicas diminutas, cada una con su propia recepción y su propio archivo de historiales. O podría trasladarse a cinco departamentos en alas separadas: maternidad, cirugía, consultas externas, farmacia y urgencias. Cada ala tiene su propio personal, y puede reformarse sin cerrar las demás. Pero todas siguen compartiendo un archivo central de historiales. Eso es la arquitectura basada en servicios: unas pocas partes grandes y separadas, cada una encargada de toda un área del negocio, que a menudo siguen compartiendo una base de datos.
La arquitectura basada en servicios divide un sistema en unos pocos servicios de dominio de grano grueso desplegados por separado, normalmente entre cuatro y doce. Cada uno cubre toda un área de negocio, como los pedidos o los pagos. De ello se derivan dos cosas. La mayoría de los flujos de trabajo se ejecutan dentro de un servicio, así que pueden usar una transacción local corriente de base de datos, con garantías ACID completas: atomicidad, consistencia, aislamiento y durabilidad. Y los servicios rara vez se llaman entre sí, lo que mantiene cortas las cadenas síncronas.
Esta es una plataforma de reparto de comida construida de esta manera. En la parte superior hay cuatro interfaces de usuario: la app del cliente, la tableta del restaurante, la app del repartidor y un portal de operaciones. Llaman a una capa de API opcional, un proxy inverso o un gateway, que se encarga del enrutamiento, la autenticación y los límites de tasa. Detrás hay cinco servicios de dominio. Cada uno es de grano grueso, con todo lo que necesita su dominio, desde la API hasta el acceso a los datos, y cada uno es propiedad de un equipo. Cuatro de ellos comparten una base de datos PostgreSQL, con un esquema cada uno, y cada servicio solo puede tocar el suyo. Compartir hace que el estilo sea barato y sencillo, pero también es su principal debilidad, porque los cambios de esquema deben coordinarse. Pagos mantiene su propia base de datos, porque los datos de tarjetas le dan una razón de peso, y así puede auditarse por separado. Dar a un servicio su propio almacén solo cuando está justificado es una forma de domar la base de datos compartida.
¿Por qué elegir esto? Imagina que la empresa ha crecido hasta cinco equipos, unos treinta y cinco ingenieros. Su monolito está bien organizado, pero los lanzamientos se han convertido en una cola, y un fallo en el seguimiento de repartidores tumbó dos veces el proceso de pago. Con cinco servicios de dominio, hacer un pedido se ejecuta dentro del servicio de pedidos en una transacción local y después hace una llamada a pagos. Los demás servicios se enteran del pedido por un mensaje, no por una cadena de llamadas. Aporta cinco pipelines de lanzamiento separados. Un fallo en el seguimiento ya no detiene el proceso de pago, y cada equipo lanza cuando está listo. Cuesta cinco juegos de despliegues y paneles, timeouts e idempotencia en las llamadas a pagos, y cambios de esquema que siguen necesitando coordinación. El paso es modesto a propósito.
La arquitectura basada en servicios se confunde a menudo con la arquitectura orientada a servicios, más antigua, o SOA. Su idea central era sensata: capacidades de negocio expuestas como servicios con contratos explícitos. Pero lo que construyó la mayoría de las empresas se organizaba en capas técnicas. Arriba, los servicios de negocio describen procesos, como hacer un pedido o abrir una cuenta. En el centro estaba un bus de servicios empresarial, o ESB. Enrutaba los mensajes, los transformaba entre formatos y, mediante un motor de orquestación, ejecutaba él mismo los procesos de negocio. Debajo, los servicios empresariales compartidos, como el de clientes y el de precios, debían reutilizarse en todas partes, y a su vez envolvían los sistemas existentes. Y cada mensaje se traducía a un único modelo de datos canónico, y desde él: una sola definición de cada entidad de negocio para toda la empresa.
Muchos programas de SOA decepcionaron. Primero, la reutilización creó acoplamiento. Un servicio de clientes compartido, usado por cuarenta aplicaciones, no podía cambiar sin el acuerdo de cuarenta consumidores. Segundo, el bus se convirtió en el cuello de botella. Casi cualquier cambio de negocio necesitaba al único equipo que era su propietario, y el bus se convirtió en un único punto de fallo. Tercero, el modelo canónico era demasiado grande. Una única definición de cliente que sirva a ventas, facturación, soporte y logística o es enorme o es errónea para la mayoría de ellos. Y los estándares de servicios web eran complejos, con herramientas caras. Los microservicios mantienen los contratos explícitos pero invierten la mayoría de esas decisiones: extremos inteligentes y tuberías tontas, con toda la lógica en los servicios y cada servicio como propietario de sus datos.
Entonces, ¿cuándo es la arquitectura basada en servicios la elección correcta? Cuando el sistema tiene unos pocos dominios de negocio claros, y entre dos y quizá ocho equipos necesitan lanzar de forma independiente. Cuando la mayoría de los flujos de trabajo se quedan dentro de un dominio, y la consistencia fuerte dentro de un dominio es valiosa. También es un paso excelente para salir de un monolito: mucho menos arriesgado que saltar a cincuenta microservicios, y a menudo lo bastante bueno como para quedarse ahí. Planifica ir más allá cuando algunas partes necesiten un escalado muy distinto, cuando la base de datos compartida limite las escrituras o cuando los servicios se llamen constantemente entre sí para solicitudes corrientes. Eso es señal de que los límites están mal.
La sección completa compara lado a lado la arquitectura basada en servicios, la SOA y los microservicios. A continuación, en la sección seis punto tres, veremos los microservicios. Nos vemos allí.
Lo que necesitas saber
- La arquitectura basada en servicios (bautizada así por Richards y Ford) divide un sistema en unos pocos servicios de dominio de grano grueso desplegados por separado, normalmente de 4 a 12, que suelen compartir una base de datos y a menudo están detrás de una capa de API.
- Como la mayoría de los flujos de trabajo se quedan dentro de un servicio de dominio, pueden usar transacciones ACID locales, y los servicios rara vez se llaman entre sí, lo que mantiene cortas las cadenas síncronas.
- Una base de datos compartida acopla los cambios de esquema y une los servicios en un solo cuanto; los esquemas por servicio, las pequeñas bibliotecas de entidades por dominio y las bases de datos separadas cuando está justificado reducen ese acoplamiento.
- La SOA clásica dirigida por la orquestación organizaba los servicios en capas técnicas en torno a un bus de servicios empresarial, con un modelo de datos canónico y los estándares WS-*, con el objetivo de la reutilización en toda la empresa.
- La SOA decepcionó porque la reutilización creó acoplamiento, el bus se convirtió en un cuello de botella propiedad de un solo equipo, los modelos canónicos no le servían a nadie y los estándares eran pesados.
- Los microservicios mantienen contratos de servicio explícitos, pero ponen la lógica en los servicios (smart endpoints, dumb pipes: extremos inteligentes, tuberías tontas), se organizan por capacidad de negocio y dan a cada servicio sus propios datos.
- La arquitectura basada en servicios es un término medio pragmático para unos pocos dominios y equipos, y una forma de bajo riesgo de salir de un monolito.
Entre el monolito y los microservicios
Gran parte de la conversación del sector plantea una elección entre un monolito y muchos microservicios. En la práctica, una gran parte de los sistemas reales está en un punto intermedio: un puñado de servicios desplegados por separado, cada uno de los cuales cubre toda un área de negocio, que a menudo siguen compartiendo una base de datos. Mark Richards y Neal Ford llamaron a este estilo arquitectura basada en servicios en Fundamentals of Software Architecture y sostienen que es uno de los estilos distribuidos más pragmáticos que existen. Esta sección lo describe, lo contrasta con la arquitectura orientada a servicios (SOA), más antigua y con la que a menudo se confunde, y muestra en qué se diferencian los microservicios de ambas.
Arquitectura basada en servicios: la topología
Un sistema basado en servicios tiene tres partes. Una o varias interfaces de usuario llaman a un conjunto de servicios de dominio desplegados por separado, cada uno de los cuales cubre un área de negocio grande y coherente, como los pedidos o los pagos. Richards y Ford observan que estos sistemas suelen tener entre 4 y 12 servicios de dominio, unos 7 de media. Los servicios suelen compartir una base de datos, y una capa de API opcional (un proxy inverso o un gateway) puede situarse entre las interfaces de usuario y los servicios para encargarse del enrutamiento, la autenticación y la limitación de tasa.
Cada servicio de dominio es de grano grueso: contiene todo lo necesario para su dominio, desde la API hasta la lógica de negocio y el acceso a los datos, y por dentro está estructurado como un pequeño monolito, a menudo en capas o en módulos (Capítulo 5). Un servicio se despliega normalmente como unas pocas instancias detrás de un balanceador de carga.
De ello se derivan dos consecuencias. Primera, la mayoría de los flujos de trabajo de negocio se ejecutan por completo dentro de un servicio, de modo que pueden usar una transacción local corriente de base de datos con garantías ACID completas (Capítulo 0). Segunda, los servicios de dominio rara vez necesitan llamarse entre sí: una solicitud de la interfaz de usuario va al único servicio que es propietario del dominio. Esto mantiene cortas las cadenas síncronas, lo que importa por las razones calculadas en la Sección 6.1.
La base de datos compartida y cómo domarla
Compartir una base de datos es lo que hace que la arquitectura basada en servicios sea barata y sencilla: no hay sincronización de datos entre servicios, no hay consistencia eventual y los informes se hacen con SQL corriente. También es su principal debilidad. Si todos los servicios leen y escriben las mismas tablas, un cambio en las columnas de una tabla puede romper varios servicios, que entonces deben probarse y volver a desplegarse juntos. Se aplica la definición del Capítulo 5: los servicios que comparten una base de datos quedan unidos en un solo cuanto de arquitectura, de modo que comparten un único nivel de disponibilidad y un único ritmo de lanzamiento del esquema.
Los profesionales usan tres técnicas para reducir el acoplamiento. La primera es el particionado lógico: dar a cada servicio su propio esquema (o conjunto de tablas) y prohibirle tocar el de los demás, algo que se hace cumplir con permisos de la base de datos además de por convención. La segunda es mantener las clases de entidad de la base de datos compartida en pequeñas bibliotecas por dominio en lugar de en una gran biblioteca compartida, de modo que un cambio en las tablas de restaurantes solo afecte a los servicios que las usan. La tercera es dar a un servicio su propia base de datos cuando hay una razón de peso, como el alcance de seguridad, un patrón de carga muy distinto o un tipo distinto de almacén de datos. Los equipos que las aplican con constancia descubren que un paso posterior a bases de datos separadas, si alguna vez llega a ser necesario, es mucho más fácil.
La plataforma de reparto de comida como cinco servicios de dominio
Ejemplo práctico
Ejemplo práctico: la plataforma de reparto de comida como cinco servicios de dominio
Una empresa de reparto de comida ha pasado de un equipo a cinco, unos 35 ingenieros. Su monolito en Django está bien modularizado, pero los lanzamientos se han convertido en una cola y un fallo en el seguimiento de repartidores tumbó dos veces el proceso de pago el trimestre pasado. El arquitecto propone una arquitectura basada en servicios con cinco servicios de dominio, uno por cada módulo y equipo existentes.
| Pedidos | Carrito, proceso de pago, ciclo de vida y estado del pedido. Es propietario del esquema ordering. Mucho trabajo a las horas de comer; ejecuta de 6 a 20 instancias. |
|---|---|
| Restaurante | Cartas, precios, horarios de apertura, alta de restaurantes. Predominan las lecturas; las cartas se cachean en la capa de API. Ejecuta 3 instancias. |
| Entrega | Despacho de repartidores, estimaciones de ruta, seguimiento en vivo. Recibe actualizaciones de ubicación cada pocos segundos de cada repartidor activo, así que se escala por separado de todo lo demás. |
| Pagos | Autorización de tarjetas a través del proveedor de pagos, reembolsos, pagos a restaurantes y repartidores. Tiene su propia base de datos para que el alcance de la evaluación PCI DSS sea un servicio pequeño en lugar de toda la plataforma. |
| Cliente | Cuentas, direcciones, incidencias de soporte, reseñas. Poca carga, pero contiene la mayor parte de los datos personales, así que las reglas de acceso y de conservación se concentran aquí. |
| Cómo se ejecuta un flujo de trabajo | Hacer pedido se ejecuta dentro de Pedidos en una transacción local (crear el pedido, reservar la franja del restaurante) y después hace una llamada a Pagos. Restaurante y Reparto se enteran del pedido por un mensaje, no por una cadena de llamadas. |
| Qué se comparte | Un servidor PostgreSQL con un esquema por servicio. Cada servicio solo puede leer y escribir su propio esquema; se publican unas pocas vistas de solo lectura (los nombres de los restaurantes, por ejemplo) para los demás. |
| Qué aporta | Cinco pipelines de despliegue en lugar de uno; un fallo en el seguimiento ya no detiene el proceso de pago; los pagos pueden auditarse por separado; cada equipo lanza cuando está listo. |
| Qué cuesta | Cinco desplegables y paneles en lugar de uno; llamadas de red entre Pedidos y Pagos que necesitan timeouts e idempotencia; los cambios de esquema siguen coordinándose a través del servidor de base de datos compartido. |
El paso es modesto a propósito. Pasa de un cuanto a unos dos (Pagos con sus propios datos, y los cuatro servicios que comparten la base de datos), y da a cada equipo su propio lanzamiento, que era el principal problema.
Si más adelante el flujo de ubicaciones de Reparto se queda grande para la base de datos compartida, se puede dar a ese único servicio su propio almacén y dividirlo más; el resto puede quedarse como está.
El arquitecto deja por escrito las reglas de los límites como pruebas de arquitectura: ningún servicio puede consultar el esquema de otro, y los servicios solo pueden llamarse entre sí a través de API publicadas.
La arquitectura orientada a servicios clásica
La arquitectura orientada a servicios es más antigua y más amplia. El término entró en el sector a través de un informe de Gartner de 1996 de Roy Schulte y Yefim Natis, y desde principios de la década de 2000 se convirtió en el modelo dominante de integración empresarial. Su idea central era sensata: exponer las capacidades de negocio como servicios con contratos explícitos y neutrales respecto a la tecnología, de modo que las aplicaciones de una gran organización puedan montarse a partir de ellos en lugar de reconstruirse o integrarse punto a punto.
Sin embargo, lo que la mayoría de las empresas construyó en realidad fue lo que Richards y Ford llaman SOA dirigida por la orquestación. Los servicios se organizaban en capas técnicas: servicios de negocio que describían procesos (hacer un pedido, abrir una cuenta), servicios empresariales compartidos que ofrecían capacidades reutilizables (cliente, precios, factura), y servicios de aplicación y de infraestructura que envolvían los sistemas existentes y las inquietudes técnicas. En el centro estaba un bus de servicios empresarial (ESB): un middleware que enrutaba los mensajes, los transformaba entre formatos, mediaba entre protocolos y, mediante un motor de orquestación, ejecutaba los propios procesos de negocio.
Dos ideas más completaban el cuadro. Un modelo de datos canónico definía una única representación de cada entidad de negocio para toda la empresa (un Customer, un Order), y cada mensaje se traducía a ella y desde ella en el bus. Y una familia de estándares de servicios web, normalmente llamada WS-*, definía cómo los servicios se describían y se llamaban entre sí: SOAP para los mensajes, WSDL para las descripciones de interfaces, UDDI para los registros, WS-Security, WS-ReliableMessaging y WS-AtomicTransaction para las cualidades, y WS-BPEL (versión 2.0 aprobada por OASIS en 2007) para las definiciones de procesos ejecutables.
SOA dirigida por la orquestación
Por qué la SOA clásica cayó en desuso
A finales de la década de 2000, muchos programas de SOA habían decepcionado. Anne Thomas Manes, de Burton Group, captó el ambiente en una entrada muy leída de enero de 2009 titulada SOA is Dead; Long Live Services: la etiqueta se había vuelto tóxica, pero la idea de los servicios sobrevivió. Merece la pena conocer las razones, porque cada una es una trampa en la que las arquitecturas modernas pueden volver a caer.
La reutilización creó acoplamiento. Un servicio empresarial compartido de Customer usado por cuarenta aplicaciones no podía cambiar sin el acuerdo de cuarenta consumidores; la reutilización, el objetivo principal, convirtió cada cambio en una negociación. El bus se convirtió en el cuello de botella. Poner la lógica de enrutamiento, de transformación y de procesos en un ESB central, normalmente propiedad de un único equipo de integración, significaba que casi cualquier cambio de negocio necesitaba a ese equipo, y el bus se convirtió en un único punto de fallo y de retraso. El modelo canónico era demasiado grande. Una única definición de Customer que satisfaga a ventas, facturación, soporte y logística o es enorme o es errónea para la mayoría de ellos; los contextos delimitados del Capítulo 5 explican por qué un término significa legítimamente cosas distintas en distintas partes de un negocio. Los estándares eran pesados. Las especificaciones WS-* eran complejas, las herramientas eran caras y las transacciones distribuidas entre servicios resultaron frágiles. El particionamiento técnico significaba que una funcionalidad sencilla atravesaba varias capas de servicios propiedad de grupos distintos.
Las lecciones duraderas son aquellas sobre las que se construyeron los microservicios: contratos de servicio explícitos, servicios cuyos propietarios son las personas que los construyen, la lógica en los servicios y no en el middleware, y los datos propiedad de un único servicio en lugar de compartidos por toda la empresa.
En qué se diferencian los microservicios
Los microservicios, que se tratan a fondo en la sección siguiente, conservan la idea de la SOA de servicios con contratos explícitos e invierten la mayoría de sus decisiones de implementación. James Lewis y Martin Fowler resumieron una de esas inversiones como smart endpoints and dumb pipes (extremos inteligentes y tuberías tontas): la red solo transporta mensajes, y toda la lógica vive en los servicios. Los servicios se organizan en torno a capacidades de negocio en lugar de capas técnicas, la reutilización queda deliberadamente por detrás de la independencia, cada servicio es propietario de sus datos y la gobernanza está descentralizada.
Comparados con la arquitectura basada en servicios, los microservicios son de grano más fino, mucho más numerosos e insisten en tener datos separados. Eso compra más independencia, un escalado más selectivo y más aislamiento de fallos, y cuesta mucho más en operación, consistencia y coordinación. La arquitectura basada en servicios puede verse como el punto del espectro en el que llega la mayor parte de los beneficios de despliegue y de equipos por una fracción del costo.
Comparación de la arquitectura basada en servicios, la SOA clásica y los microservicios
| Aspecto | Basada en servicios | SOA clásica (dirigida por la orquestación) | Microservicios |
|---|---|---|---|
| Objetivo principal | Modularidad pragmática y despliegue independiente de unas pocas áreas de dominio | Reutilización de servicios compartidos en toda la empresa | Cambio y despliegue independientes por parte de muchos equipos autónomos |
| Particionamiento | Por dominio: un servicio por cada área de negocio grande | Técnico: capas de negocio, empresarial, de aplicación y de infraestructura | Por dominio: un servicio por contexto delimitado, o más pequeño |
| Número típico | Unos 4 a 12 por sistema | De decenas a cientos en toda una empresa | De decenas a cientos por sistema |
| Granularidad | Grueso: todo un dominio, por ejemplo todo lo relativo a pedidos | Mixto; los servicios empresariales compartidos suelen ser de grano fino | De fino a medio: una capacidad cohesiva |
| Datos | A menudo una base de datos compartida, idealmente particionada por esquema | Sistemas de registro compartidos detrás de los servicios empresariales | Cada servicio es propietario de sus datos; no hay tablas compartidas |
| Comunicación | Sobre todo de la interfaz de usuario a un servicio; pocas llamadas entre servicios | A través del bus de servicios empresarial, normalmente SOAP o mensajería XML | HTTP ligero, gRPC o mensajería; extremos inteligentes, tuberías tontas |
| Dónde vive la lógica | Dentro de los servicios de dominio | Gran parte en el bus: enrutamiento, transformación, orquestación | Dentro de los servicios; la red solo transporta |
| Transacciones | Transacciones ACID locales dentro de un servicio de dominio | Se intentaban transacciones distribuidas (WS-AtomicTransaction, XA) | Sin transacciones distribuidas; sagas y consistencia eventual |
| Gobernanza | Ligera; basta con un equipo de arquitectura | Central y pesada: modelo canónico, registro de servicios, comité de estándares | Descentralizada; plataforma compartida y caminos pavimentados |
| Costo operativo | Moderado | Alto, más licencias caras de middleware | Alto: muchos desplegables, pipelines y turnos de guardia |
Características de la arquitectura basada en servicios
| Característica | Valoración | Razón |
|---|---|---|
| Desplegabilidad | Media a alta | Cada servicio de dominio se despliega por su cuenta, así que un cambio en las cartas no vuelve a desplegar los pagos; un cambio en un esquema compartido sigue necesitando coordinación. |
| Tolerancia a fallos | Media a alta | Una caída del servicio de reparto deja funcionando los pedidos y los pagos; una base de datos compartida sigue siendo un punto común de fallo. |
| Escalabilidad | Media | Los servicios escalan por separado, pero cada uno es de grano grueso, y la base de datos compartida limita hasta dónde pueden escalar las escrituras. |
| Elasticidad | Baja a media | Los servicios grandes arrancan despacio y escalan a saltos grandes, así que los picos repentinos se absorben con menos soltura que con servicios pequeños. |
| Consistencia de los datos | Alto | La mayoría de los flujos de trabajo de negocio se quedan dentro de un servicio, donde una transacción corriente de base de datos mantiene la consistencia de los datos. |
| Simplicidad | Media | Muchas menos piezas móviles que los microservicios; sigue siendo un sistema distribuido, con llamadas de red, pipelines de despliegue y monitorización por servicio. |
| Costo global | Medio (moderado) | Un puñado de servicios y una base de datos son baratos de operar en comparación con decenas de servicios y bases de datos. |
| Capacidad de prueba (testabilidad) | Media a alta | Cada servicio tiene un alcance menor que el monolito y puede probarse por su cuenta contra su esquema. |
| Capacidad de evolución | Media | El particionamiento por dominio mantiene los cambios típicos dentro de un servicio, pero la base de datos compartida acopla la evolución del esquema. |
Cuándo la arquitectura basada en servicios es el término medio pragmático
Elígela cuando el sistema tenga unos pocos dominios de negocio claros, cuando entre dos y quizá ocho equipos necesiten lanzar de forma independiente, cuando la mayoría de los flujos de trabajo se queden de forma natural dentro de un dominio y cuando la consistencia fuerte dentro de un dominio sea valiosa. También es un paso de migración excelente para salir de un monolito: dividir un monolito bien modularizado en un puñado de servicios de dominio es mucho menos arriesgado que saltar a cincuenta microservicios, y a menudo el resultado es lo bastante bueno como para quedarse ahí.
Evítala, o planifica ir más allá, cuando partes de un dominio necesiten una escalabilidad o una disponibilidad muy distintas (pertenecen a cuantos separados), cuando decenas de equipos necesiten autonomía, cuando la base de datos compartida se haya convertido en el cuello de botella de las escrituras, o cuando los servicios de dominio se llamen constantemente entre sí para completar solicitudes corrientes, lo que es señal de que los límites están mal.
Comprueba lo que has entendido
¿Por qué la mayoría de los flujos de trabajo de una arquitectura basada en servicios pueden usar una transacción corriente de base de datos?
Porque cada servicio de dominio cubre toda un área de negocio y el flujo de trabajo suele quedarse dentro de él, tocando solo datos del propio esquema de ese servicio en una única base de datos.
¿Qué hizo que el bus de servicios empresarial se convirtiera en un cuello de botella en muchos programas de SOA?
La lógica de enrutamiento, de transformación y de procesos vivía en el bus, normalmente propiedad de un único equipo central, así que la mayoría de los cambios de negocio necesitaban a ese equipo y el bus era un punto de fallo compartido.
Nombra dos técnicas que reducen el acoplamiento causado por una base de datos compartida.
Dar a cada servicio su propio esquema y prohibir el acceso a los de los demás (con permisos que lo hagan cumplir), y dividir las clases de entidad en pequeñas bibliotecas por dominio; también dar a un servicio su propia base de datos cuando esté justificado.
¿Qué invierte "smart endpoints and dumb pipes" (extremos inteligentes y tuberías tontas) respecto a la SOA clásica?
Saca la lógica del middleware (el ESB) y la lleva a los servicios, dejando que la red solo transporte mensajes.
Fuentes y lecturas recomendadas
- James Lewis and Martin Fowler: Microservices (2014), on smart endpoints and dumb pipes
- OASIS: Reference Model for Service Oriented Architecture 1.0
- W3C: Web Services Architecture (Working Group Note)
- OASIS: Web Services Business Process Execution Language Version 2.0
- Enterprise Integration Patterns: messaging patterns catalogue
¿Tienes una pregunta sobre esta sección? ArchitectBot, el asistente de estudio con IA del curso, responde primero a partir del curso.
Pregunta: “Tenemos un monolito modular y cuatro equipos. ¿Deberíamos pasar a una arquitectura basada en servicios o directamente a microservicios, y qué deberíamos hacer con la base de datos compartida?”