Para entender bien qué aportan los microservicios hay que entender igual de bien aquello con lo que se comparan: la arquitectura monolítica. Es la forma más habitual de construir software, la que usa hoy TechCorp y, probablemente, la que has utilizado en la mayoría de tus proyectos. Lejos de ser una reliquia, el monolito tiene virtudes importantes y, bien construido (el llamado monolito modular), es una opción excelente para muchísimos sistemas.
En esta lección definiremos qué es un monolito y sus variantes, compararemos ambas arquitecturas dimensión a dimensión con una tabla y diagramas, y seguiremos paso a paso el ciclo de vida de un mismo cambio funcional ("añadir cupones de descuento a la tienda de TechCorp") en cada una de ellas para ver dónde están las diferencias reales. Terminaremos desmontando el mito de que el monolito es siempre la opción mala. Aquí no decidiremos todavía cuándo conviene una u otra (eso llega en la lección 01-04) ni veremos la técnica de dividir un monolito (lección 02-02).
Contenido
- Qué es un monolito
- El monolito modular: un punto intermedio
- Comparativa dimensión a dimensión
- Los dos sistemas en diagramas
- Un mismo cambio, dos ciclos de vida: cupones de descuento en TechCorp
- Otras alternativas: SOA y monolito modular como destino
- El mito de que el monolito es siempre malo
- Errores comunes y consejos
- Ejercicios
- Conclusión
- Qué es un monolito
Un monolito es una aplicación construida y desplegada como una única unidad: un solo proceso (o un solo artefacto que se ejecuta en varios procesos idénticos), un solo repositorio de código habitualmente, y casi siempre una sola base de datos. Toda la funcionalidad (interfaz, lógica de negocio, acceso a datos) vive en el mismo despliegue.
Características típicas:
- Una unidad de despliegue: se compila o empaqueta todo junto y se sube todo junto. En TechCorp,
techcorp-shopes un único proyecto Node.js que se arranca connode servidor.jsy sirve toda la tienda. - Llamadas internas en memoria: cuando el módulo de pedidos necesita comprobar el stock, llama a una función del módulo de inventario en el mismo proceso. Nada viaja por la red.
- Una base de datos compartida: todas las tablas (
clientes,productos,stock,pedidos,pagos,notificaciones) están en el mismo PostgreSQL y cualquier módulo puede consultar cualquier tabla. Las transacciones abarcan todo lo que haga falta. - Escalado horizontal por réplica completa: si hace falta más capacidad, se ejecutan varias copias idénticas del monolito detrás de un balanceador.
Es importante subrayar que "monolito" no significa "código desordenado". Un monolito puede estar perfectamente organizado en capas y módulos. Cuando el código de un monolito está enmarañado, sin límites internos claros, se habla de big ball of mud ("gran bola de barro"), que es un problema de calidad, no de arquitectura de despliegue.
- El monolito modular: un punto intermedio
Un monolito modular es un monolito cuyo código está dividido en módulos con límites explícitos, cada uno con su API interna y, en la versión más disciplinada, con su propio esquema o conjunto de tablas al que los demás módulos no acceden directamente. Sigue desplegándose como una unidad, pero por dentro se parece mucho a un conjunto de microservicios que viven en el mismo proceso.
| Aspecto | Monolito "clásico" | Monolito modular | Microservicios |
|---|---|---|---|
| Unidad de despliegue | Una | Una | Una por servicio |
| Límites entre áreas | Difusos o inexistentes | Explícitos (módulos con API interna) | Explícitos (procesos con API de red) |
| Acceso a datos | Cualquier módulo lee cualquier tabla | Cada módulo accede solo a sus tablas | Cada servicio tiene su base de datos |
| Comunicación interna | Llamadas a funciones sin restricción | Llamadas a funciones a través de la API del módulo | Llamadas HTTP o mensajes |
| Coste de la red | Ninguno | Ninguno | Presente en cada interacción |
El monolito modular tiene un valor doble: es una arquitectura excelente por sí misma, y además es el mejor punto de partida si algún día se quiere migrar a microservicios, porque los límites ya están trazados. Un módulo bien aislado se puede "extraer" a un servicio con relativa facilidad; una bola de barro, no. Volveremos sobre esta idea en el módulo 2.
- Comparativa dimensión a dimensión
Esta es la tabla central de la lección. Compara ambas arquitecturas en las dimensiones que más importan en la práctica. Léela con calma; casi cada fila corresponde a una lección posterior del curso.
| Dimensión | Monolito | Microservicios |
|---|---|---|
| Despliegue | Una unidad. Cualquier cambio, por pequeño que sea, implica desplegar toda la aplicación. Despliegues menos frecuentes y más "grandes". | Una unidad por servicio. Cada equipo despliega su servicio cuando quiere. Despliegues pequeños y frecuentes, pero muchos más pipelines que mantener. |
| Escalado | Se replica toda la aplicación aunque solo una parte necesite capacidad. Sencillo pero poco eficiente. | Se escala cada servicio de forma independiente según su carga. Eficiente, pero exige orquestación y balanceo por servicio. |
| Datos | Una base de datos compartida. Transacciones ACID entre cualquier tabla. Consistencia inmediata y sencilla. | Una base de datos por servicio. No hay transacciones globales; consistencia eventual y patrones como sagas. Cada servicio elige su motor. |
| Equipos | Varios equipos trabajan sobre el mismo código y el mismo despliegue; se pisan y necesitan coordinarse. | Cada equipo es dueño de sus servicios de extremo a extremo. Menos coordinación en el día a día, pero hace falta gobernanza común. |
| Tecnología | Un único stack para toda la aplicación. Cambiar de versión de un framework afecta a todo. | Cada servicio puede usar su stack. Libertad, a cambio de más tecnologías que mantener. |
| Pruebas | Las pruebas de extremo a extremo son fáciles: se arranca la aplicación y se prueba. Las suites crecen y se vuelven lentas. | Probar un servicio aislado es rápido. Probar la integración de muchos servicios es difícil: hacen falta pruebas de contrato y entornos complejos. |
| Rendimiento | Llamadas internas en memoria, casi gratuitas. Consultas SQL con JOIN entre cualquier tabla. |
Cada interacción entre servicios cruza la red: latencia, serialización, posibles fallos. Los "joins" entre datos de distintos servicios hay que hacerlos en la aplicación. |
| Tolerancia a fallos | Un error grave (fuga de memoria, excepción no controlada) puede tumbar toda la aplicación. | Un servicio caído no tiene por qué tumbar los demás, si se diseña bien la resiliencia. Pero hay muchos más puntos de fallo. |
| Coste inicial | Bajo. Un proyecto, un servidor, una base de datos. Se empieza a entregar valor en días. | Alto. Hacen falta contenedores, orquestación, mensajería, observabilidad, CI/CD por servicio... antes de que la primera funcionalidad esté en producción. |
| Complejidad | Está en el código: a medida que crece, se vuelve difícil de entender y de cambiar. | Está en las interacciones: cada servicio es simple, pero el conjunto es un sistema distribuido. |
| Depuración | Un proceso, un log, un depurador. | Muchos procesos, muchos logs; hace falta trazabilidad distribuida para seguir una petición. |
Una forma útil de leer la tabla: el monolito es sencillo al principio y se complica al crecer; los microservicios son complicados al principio y mantienen la complejidad acotada al crecer. La cuestión de dónde está el punto de cruce es exactamente lo que abordaremos en la siguiente lección.
- Los dos sistemas en diagramas
El monolito de TechCorp (situación actual)
flowchart TB
Cliente[Navegador / App móvil]
subgraph Monolito techcorp-shop (Node.js + Express, un solo proceso)
direction TB
R[Rutas Express]
subgraph Módulos
MC[clientes]
MCat[catálogo]
MI[inventario]
MP[pedidos]
MPa[pagos]
MN[notificaciones]
end
R --> MC & MCat & MI & MP & MPa & MN
MP --> MI
MP --> MPa
MP --> MN
MP --> MCat
end
BD[(PostgreSQL única<br/>todas las tablas)]
Cliente --> R
MC & MCat & MI & MP & MPa & MN --> BD
Todo vive en el mismo rectángulo. Las flechas entre módulos son llamadas a funciones. Todos los módulos apuntan a la misma base de datos.
La misma tienda en microservicios (punto de llegada del curso)
flowchart TB
Cliente[Navegador / App móvil]
GW[API Gateway :8080]
Cliente --> GW
subgraph Servicios
CLI[servicio-clientes :3004]
CAT[servicio-catalogo :3001]
INV[servicio-inventario :3006]
PED[servicio-pedidos :3002]
PAG[servicio-pagos :3003]
NOT[servicio-notificaciones :3005]
end
BDC[(PG clientes)]
BDCat[(MongoDB catálogo)]
BDI[(PG inventario)]
BDP[(PG pedidos)]
BDPa[(PG pagos)]
MQ[(RabbitMQ)]
GW --> CLI & CAT & PED
CLI --> BDC
CAT --> BDCat
INV --> BDI
PED --> BDP
PAG --> BDPa
PED -. eventos .-> MQ
MQ -. eventos .-> INV & PAG & NOT
Cada servicio tiene su propio rectángulo y su propia base de datos. Las relaciones entre servicios pasan por la red (HTTP o RabbitMQ). El gateway es el único punto de contacto con el exterior.
- Un mismo cambio, dos ciclos de vida: cupones de descuento en TechCorp
Nada ilustra mejor las diferencias que seguir un cambio real. Marta pide una funcionalidad nueva: cupones de descuento. Un cliente introduce un código al hacer el pedido, el sistema valida el cupón, aplica el descuento al total y registra que el cupón se ha usado. Además, se debe poder consultar en el catálogo qué productos admiten cupón y enviar un correo distinto cuando el pedido lleva descuento.
5.1 En el monolito
| Paso | Qué ocurre |
|---|---|
| 1. Diseño | Un desarrollador (o dos) diseña la tabla cupones y decide dónde va la lógica. Como todo está en el mismo código, puede tocar lo que quiera. |
| 2. Base de datos | Añade una migración: tabla cupones (código, descuento, fecha de caducidad, usado) y una columna cupon_id en pedidos. Una sola migración, una sola base de datos. |
| 3. Código | Modifica crearPedido para recibir codigoCupon, hace un SELECT sobre cupones, valida, aplica el descuento y marca el cupón como usado dentro de la misma transacción que crea el pedido. Modifica la consulta del catálogo para incluir admite_cupon. Modifica la plantilla de correo. |
| 4. Pruebas | Arranca la aplicación entera en local, crea un pedido con cupón y comprueba de extremo a extremo. Las pruebas automatizadas de toda la aplicación tardan 25 minutos porque son muchas. |
| 5. Coordinación | Aunque el cambio lo hace una persona, toca las áreas de pedidos, catálogo y notificaciones. Los responsables de esas áreas revisan el pull request; a veces hay conflictos con otros cambios en curso sobre los mismos ficheros. |
| 6. Despliegue | El cambio entra en el despliegue semanal del viernes junto con todo lo demás. Se despliega la aplicación completa. Si algo falla en cualquier otra parte, se revierte todo, incluidos los cupones. |
| 7. Operación | Si el cálculo del descuento tiene un error, se busca en el único log y se corrige para el siguiente viernes (o se hace un despliegue de urgencia de toda la aplicación). |
Balance: desarrollo rápido y sencillo (una transacción, un repositorio, un despliegue), pero con dependencia del calendario global de despliegue, riesgo de pisarse con otros cambios y un despliegue que arrastra todo.
5.2 En microservicios
| Paso | Qué ocurre |
|---|---|
| 1. Diseño | Primera pregunta: ¿de quién es la capacidad "cupones"? ¿Es un servicio nuevo (servicio-promociones) o parte de servicio-pedidos? Supongamos que el equipo decide que es un servicio nuevo, porque marketing querrá gestionar campañas. Hay que definir su API (GET /cupones/{codigo}, POST /cupones/{codigo}/canjes) y sus eventos. |
| 2. Base de datos | servicio-promociones crea su propia base de datos con la tabla cupones. servicio-pedidos añade cuponAplicado a su propio esquema. Dos migraciones, en dos bases de datos, sin transacción común. |
| 3. Código | servicio-pedidos cambia crearPedido para llamar por HTTP a servicio-promociones y validar el cupón, aplicar el descuento y, tras crear el pedido, pedir el canje. Hay que decidir qué pasa si promociones no responde (¿se rechaza el pedido? ¿se ignora el cupón?). servicio-catalogo añade admiteCupon a su documento y a su API. servicio-notificaciones escucha pedido.confirmado, que ahora incluye descuentoAplicado, y elige la plantilla adecuada. |
| 4. Contratos | La API de servicio-catalogo y el evento pedido.confirmado cambian: hay que hacerlo de forma compatible hacia atrás (añadir campos, no quitar) para que consumidores no actualizados no se rompan. |
| 5. Pruebas | Cada servicio prueba lo suyo en segundos. Además, pruebas de contrato entre pedidos y promociones y una prueba de integración con los servicios implicados levantados juntos. |
| 6. Coordinación | Participan tres o cuatro equipos, pero cada uno trabaja en su servicio. La coordinación es sobre contratos, no sobre código: "¿qué campos devuelve GET /cupones/{codigo}?" |
| 7. Despliegue | Primero se despliega servicio-promociones (nuevo, no rompe nada). Después catálogo y notificaciones (cambios compatibles). Por último pedidos, que activa la funcionalidad. Cada despliegue es pequeño e independiente y puede hacerse cualquier día. |
| 8. Operación | Si el descuento se calcula mal, se corrige y se redespliega solo servicio-pedidos en minutos. Si el error es "el cupón se marcó como usado pero el pedido no se creó", hay que revisar la traza entre dos servicios y quizá añadir una compensación. |
Balance: más trabajo inicial (definir servicio, API, contratos, manejo de fallos), pero despliegues independientes, equipos que no se pisan y una capacidad de negocio (promociones) que nace ya aislada y podrá evolucionar sola.
5.3 Lo que enseña el recorrido
flowchart LR
subgraph Monolito
A1[Diseño rápido] --> A2[Una migración] --> A3[Un PR grande] --> A4[Pruebas lentas] --> A5[Despliegue semanal de todo]
end
subgraph Microservicios
B1[Diseño: ¿de quién es?] --> B2[Definir contratos] --> B3[Varios PR pequeños] --> B4[Pruebas rápidas + contrato] --> B5[Despliegues independientes]
end
- El monolito optimiza el desarrollo del cambio; los microservicios optimizan la entrega y la evolución independiente.
- En el monolito la dificultad aparece al final (coordinar el despliegue, revertir todo). En microservicios aparece al principio (decidir límites y contratos).
- El manejo de fallos, que en el monolito lo resuelve la transacción, en microservicios es una decisión explícita de diseño.
- Otras alternativas: SOA y monolito modular como destino
La elección no es binaria. Entre "un monolito" y "docenas de microservicios" existen paradas intermedias válidas:
- Monolito modular (visto en el apartado 2): mismo despliegue, límites internos rigurosos. Muchas organizaciones deberían aspirar a esto y quedarse aquí. Es también la base ideal para una futura extracción de servicios.
- SOA "clásica": servicios de grano más grueso que los microservicios, a menudo con un bus de integración. Todavía es común en grandes corporaciones. Comparte con los microservicios la idea de servicios, pero con más centralización (véase la lección 01-01).
- Pocos servicios grandes ("macroservicios"): dividir el sistema en dos o tres piezas por razones muy concretas (por ejemplo, separar el catálogo de alta lectura del resto) sin ir más allá. Es una estrategia pragmática que captura parte de las ventajas con una fracción del coste.
Ninguna de estas opciones es "hacer trampas". Son puntos distintos de un mismo espectro, y lo razonable es elegir el que responda a los problemas reales que se tienen.
- El mito de que el monolito es siempre malo
Conviene decirlo con claridad, porque la industria a veces lo olvida: el monolito no es un error de arquitectura. Es la opción por defecto correcta para la mayoría de proyectos nuevos y para muchos sistemas maduros. Sus ventajas son reales:
- Se empieza a entregar valor en días, no en meses de infraestructura.
- Un desarrollador puede entender y ejecutar todo el sistema en su portátil.
- Las transacciones y los
JOINresuelven gratis problemas que en microservicios cuestan patrones complejos. - Refactorizar es fácil porque el compilador o las pruebas ven todo el código a la vez; mover una responsabilidad de un módulo a otro es cambiar un
import, no renegociar un contrato entre equipos. - Operarlo es barato: un proceso, una base de datos, un log.
Empresas grandes y muy respetadas operan monolitos enormes con éxito, y otras que migraron a microservicios han vuelto parcialmente a consolidar servicios porque el coste operativo no compensaba. Los microservicios no hacen bueno un sistema; resuelven un conjunto concreto de problemas (escalado desigual, equipos que se estorban, ciclos de despliegue lentos) a cambio de otro conjunto de problemas. Si no tienes los primeros, no compres los segundos.
El caso de TechCorp que seguimos en el curso está elegido precisamente porque sí tiene esos problemas: campañas que saturan solo el catálogo, despliegues semanales con miedo, equipos que se pisan en el mismo código. Por eso su historia es una historia de migración. Pero un TechCorp de cuatro personas y mil pedidos al mes debería quedarse en su monolito, idealmente modular, y ser feliz.
Errores Comunes y Consejos
- Confundir monolito con código malo. Un monolito puede estar impecablemente organizado. Si el problema es que el código es un caos, la solución es refactorizar hacia un monolito modular, no repartir el caos por la red.
- Comparar un monolito real con unos microservicios idealizados. Es fácil ganar el debate si se compara el monolito heredado lleno de deuda técnica con un diagrama limpio de servicios. Compara con la misma honestidad: los microservicios también acumulan deuda, solo que distribuida.
- Olvidar el coste inicial. La tabla comparativa muestra que los microservicios pagan por adelantado. Si el proyecto necesita entregar valor en semanas, ese coste puede ser prohibitivo.
- Pensar que las transacciones "se sustituyen" sin más. El paso de "una transacción que lo hace todo" a "varios servicios sin transacción común" es la parte más difícil de la comparación y merece la mayor atención en el diseño.
- Consejo: al evaluar un cambio funcional, haz el ejercicio del apartado 5 mentalmente: recorre los pasos en tu arquitectura actual y en la alternativa. Es la forma más rápida de detectar dónde están los costes reales.
Ejercicios
Ejercicio 1: Clasificar arquitecturas
Para cada descripción, indica si se trata de un monolito clásico, un monolito modular o microservicios, y justifica con la tabla del apartado 2.
- Una aplicación Node.js en un único repositorio, dividida en carpetas
clientes/,catalogo/,pedidos/, cada una con su propio conjunto de tablas al que las demás carpetas solo acceden a través de funciones públicas del módulo; se despliega como un único proceso. - Seis procesos Node.js independientes, cada uno con su base de datos, que se comunican por HTTP y RabbitMQ y se despliegan por separado.
- Una aplicación Java desplegada como un único fichero
.waren la que cualquier clase puede ejecutar consultas SQL sobre cualquier tabla.
Ejercicio 2: Recorrer un cambio
Marta pide otra funcionalidad: lista de deseos (un cliente puede guardar productos para más adelante y recibir un correo si bajan de precio). Describe, en formato de lista de pasos como en el apartado 5, cómo se implementaría en el monolito actual de TechCorp y en la versión de microservicios. Señala en cada uno el paso más costoso.
Ejercicio 3: Defender el monolito
Un compañero afirma: "Los monolitos son cosa del pasado; cualquier proyecto serio hoy debería empezar con microservicios". Escribe tres argumentos, apoyados en la tabla del apartado 3, para rebatirlo.
Soluciones
Ejercicio 1
- Monolito modular. Una unidad de despliegue, pero con límites explícitos entre módulos y datos "privados" por módulo. Es exactamente el punto intermedio descrito.
- Microservicios. Varias unidades de despliegue, base de datos por servicio, comunicación por red.
- Monolito clásico (y probablemente con tendencia a bola de barro). Una unidad de despliegue y acceso indiscriminado a los datos.
Ejercicio 2 (una solución posible)
Monolito:
- Migración: tabla
lista_deseos (cliente_id, producto_id, precio_en_el_momento). - Endpoints en las rutas de clientes para añadir y listar deseos, con un
JOINaproductospara mostrar nombre y precio actual. - Al actualizar el precio de un producto (módulo de catálogo), consultar
lista_deseosy llamar a la función de notificaciones para enviar el correo, todo en el mismo proceso. - Pruebas de la aplicación completa; despliegue semanal. Paso más costoso: el despliegue conjunto y las pruebas lentas; el desarrollo en sí es sencillo.
Microservicios:
- Decidir dónde vive la lista de deseos: probablemente en
servicio-clientes(es una preferencia del cliente). servicio-clientesañade su tabla y endpoints; para mostrar nombre y precio actual debe llamar aservicio-catalogoo guardar una copia local actualizada por eventos.servicio-catalogopublica un eventoproducto.precio-cambiado;servicio-clienteslo consume, busca quién tenía ese producto en su lista y publica algo comodeseo.bajada-precio;servicio-notificacioneslo consume y envía el correo.- Contratos: definir los dos eventos nuevos y sus campos.
- Despliegues independientes de catálogo, clientes y notificaciones, en ese orden. Paso más costoso: decidir cómo obtiene clientes los datos del producto (llamada síncrona frente a copia por eventos) y diseñar la cadena de eventos; hay que pensar en fallos y duplicados.
Ejercicio 3 (argumentos posibles)
- Coste inicial: un monolito entrega valor en días con un servidor y una base de datos; los microservicios exigen contenedores, orquestación, mensajería y observabilidad antes de la primera funcionalidad. Para un proyecto nuevo, cuyo mayor riesgo es no encontrar mercado, ese coste es difícil de justificar.
- Datos y rendimiento: en un monolito, una transacción y un
JOINresuelven problemas que en microservicios requieren sagas, duplicación de datos y llamadas por red con latencia. Mientras el dominio no esté claro, esa simplicidad vale oro. - Equipos: las ventajas de autonomía de los microservicios solo aparecen cuando hay varios equipos que se estorban. Con un único equipo pequeño no hay a quién dejar de estorbar, y sí hay muchos más servicios que operar. Además, un monolito modular ofrece límites claros sin coste de red y deja abierta la puerta a extraer servicios más adelante.
Conclusión
En esta lección hemos definido el monolito como una única unidad de despliegue con una base de datos compartida y llamadas internas en memoria, y hemos presentado el monolito modular como una variante disciplinada que combina la sencillez operativa del monolito con límites internos claros. La comparación dimensión a dimensión ha mostrado un patrón consistente: el monolito es barato y simple al principio y se complica al crecer, mientras que los microservicios pagan un coste inicial alto a cambio de mantener acotada la complejidad de cada pieza y permitir despliegues, escalado y equipos independientes. El recorrido del cambio "cupones de descuento" ha hecho tangible dónde aparecen las dificultades en cada caso: al final del ciclo en el monolito, al principio en los microservicios. Y hemos dejado claro que el monolito no es una arquitectura de segunda: es la opción correcta para muchos sistemas.
Con esta comparación en la mano, ya podemos abordar la pregunta que de verdad importa en la práctica: ¿cuándo conviene adoptar microservicios y cuándo no? La siguiente lección da criterios concretos, señales de alarma, prerrequisitos y una lista de comprobación para tomar esa decisión con fundamento.
Curso de Microservicios
Módulo 1: Introducción a los Microservicios
- Conceptos Básicos de Microservicios
- Ventajas y Desventajas de los Microservicios
- Comparación con la Arquitectura Monolítica
- Cuándo Adoptar Microservicios: Criterios de Decisión
- El Caso Práctico del Curso: la Tienda Online de TechCorp
Módulo 2: Diseño de Microservicios
- Principios de Diseño de Microservicios
- Descomposición de Aplicaciones Monolíticas
- Definición de Bounded Contexts
- Gestión de Datos: una Base de Datos por Servicio
- Consistencia Distribuida: Sagas, CQRS y Event Sourcing
Módulo 3: Comunicación entre Microservicios
- APIs RESTful
- Mensajería Asíncrona
- Protocolos de Comunicación: gRPC, GraphQL
- API Gateway y Backend for Frontend
- Descubrimiento de Servicios y Balanceo de Carga
- Contratos y Versionado de APIs
Módulo 4: Implementación de Microservicios
- Elección de Tecnologías y Herramientas
- Desarrollo de un Microservicio Simple
- Gestión de Configuración
- Integración Práctica: Consumir APIs y Publicar Eventos
- Pruebas en Microservicios: Unitarias, de Integración y de Contrato
Módulo 5: Despliegue y Orquestación
- Contenedores y Docker
- Orquestación con Kubernetes
- CI/CD para Microservicios
- Estrategias de Despliegue: Rolling, Blue-Green y Canary
- Service Mesh: Istio y Linkerd
Módulo 6: Monitoreo y Mantenimiento
- Monitoreo y Logging
- Trazabilidad Distribuida con OpenTelemetry
- Gestión de Errores y Recuperación
- Escalabilidad y Rendimiento
- SLOs, Alertas y Gestión de Incidentes
Módulo 7: Seguridad en Microservicios
- Autenticación y Autorización
- Seguridad en la Comunicación
- Prácticas de Seguridad
- Seguridad en Contenedores y Kubernetes
