Be Software Architecture Wise
Be Wise Apps

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ítulos
Solo 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

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

La plataforma de reparto de comida como cinco servicios de dominio de grano grueso tras una capa de API; cuatro comparten una base de datos con un esquema cada uno y Pagos usa la suyaApp clienteTableta restauranteApp repartoPortal operacionesCapa de API: proxy inverso o gateway (enrutamiento, autenticación, límites de tasa)Pedidoscarrito, pago,estado pedidoRestaurantecartas, horariosde apertura, altasRepartoasignación, rastreorepartidorClientecuentas, soporte,reseñasPagoscobros, reembolsos,abonosBD PostgreSQL compartidaorderingrestaurantdeliverycustomerBD de pagosseparada,alcance PCI DSSCada servicio tiene su propio esquema; solo Pagos tiene una base de datos aparte
Cinco servicios de grano grueso, cada uno propiedad de un equipo, detrás de una capa de API; cuatro comparten una base de datos con un esquema cada uno, y Pagos mantiene la suya propia.

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.

PedidosCarrito, 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.
RestauranteCartas, precios, horarios de apertura, alta de restaurantes. Predominan las lecturas; las cartas se cachean en la capa de API. Ejecuta 3 instancias.
EntregaDespacho 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.
PagosAutorizació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.
ClienteCuentas, 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 trabajoHacer 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 comparteUn 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é aportaCinco 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é cuestaCinco 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

SOA dirigida por la orquestación: los servicios de negocio llaman a un bus de servicios empresarial que orquesta servicios empresariales compartidos, que usan servicios de aplicación y de infraestructura, todos con un modelo de datos canónicoServ. de negocioHacer pedidoAbrir cuentaPago proveedorBus de servicios empresarial y motor de orquestaciónenrutamiento, transformación, orquestación, mediación de protocoloServ. empresarialesServ. de clienteServ. de preciosServ. de facturasServicios de aplicaciónSistema CRMSistema ERPLogging, seguridadCada mensaje se traduce a un único modelo de datos canónico, y desde él, dentro del bus
En la SOA clásica, el bus contenía la lógica de enrutamiento, de transformación y de procesos, y todos los servicios compartían un único modelo canónico del negocio.

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

AspectoBasada en serviciosSOA clásica (dirigida por la orquestación)Microservicios
Objetivo principalModularidad pragmática y despliegue independiente de unas pocas áreas de dominioReutilización de servicios compartidos en toda la empresaCambio y despliegue independientes por parte de muchos equipos autónomos
ParticionamientoPor dominio: un servicio por cada área de negocio grandeTécnico: capas de negocio, empresarial, de aplicación y de infraestructuraPor dominio: un servicio por contexto delimitado, o más pequeño
Número típicoUnos 4 a 12 por sistemaDe decenas a cientos en toda una empresaDe decenas a cientos por sistema
GranularidadGrueso: todo un dominio, por ejemplo todo lo relativo a pedidosMixto; los servicios empresariales compartidos suelen ser de grano finoDe fino a medio: una capacidad cohesiva
DatosA menudo una base de datos compartida, idealmente particionada por esquemaSistemas de registro compartidos detrás de los servicios empresarialesCada servicio es propietario de sus datos; no hay tablas compartidas
ComunicaciónSobre todo de la interfaz de usuario a un servicio; pocas llamadas entre serviciosA través del bus de servicios empresarial, normalmente SOAP o mensajería XMLHTTP ligero, gRPC o mensajería; extremos inteligentes, tuberías tontas
Dónde vive la lógicaDentro de los servicios de dominioGran parte en el bus: enrutamiento, transformación, orquestaciónDentro de los servicios; la red solo transporta
TransaccionesTransacciones ACID locales dentro de un servicio de dominioSe intentaban transacciones distribuidas (WS-AtomicTransaction, XA)Sin transacciones distribuidas; sagas y consistencia eventual
GobernanzaLigera; basta con un equipo de arquitecturaCentral y pesada: modelo canónico, registro de servicios, comité de estándaresDescentralizada; plataforma compartida y caminos pavimentados
Costo operativoModeradoAlto, más licencias caras de middlewareAlto: muchos desplegables, pipelines y turnos de guardia

Características de la arquitectura basada en servicios

CaracterísticaValoraciónRazón
DesplegabilidadMedia a altaCada 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 fallosMedia a altaUna 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.
EscalabilidadMediaLos 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.
ElasticidadBaja a mediaLos 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 datosAltoLa 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.
SimplicidadMediaMuchas 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 globalMedio (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 altaCada servicio tiene un alcance menor que el monolito y puede probarse por su cuenta contra su esquema.
Capacidad de evoluciónMediaEl 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.

Siguiente · 6.3MicroserviciosQué son los microservicios según Lewis y Fowler, los contextos delimitados, la desplegabilidad independiente, la base de datos por servicio, los gateways y las mallas, cómo decidir la granularidad, los antipatrones clásicos y el precio organizativo.Continuar →

Fuentes y lecturas recomendadas

¿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?”