Hace cuatro años escribí en este blog sobre el suicidio arquitectónico que supone adoptar microservicios por pura moda. Mucha gente me tildó de anticuado. "Netflix y Amazon usan microservicios, nosotros también debemos", decían. Pues bien, esta semana el equipo de ingeniería de Amazon Prime Video acaba de publicar un artículo detallando cómo han migrado su sistema de monitorización de calidad de vídeo de microservicios a un monolito... y han reducido sus costes de infraestructura en un asombroso 90%.

Ver a Amazon, la empresa matriz de AWS y el mayor evangelista histórico de la arquitectura distribuida y el modelo serverless, admitir que los microservicios no siempre son la respuesta es un baño de humildad técnica para toda la industria.

El problema: Serialización y transiciones de estado

El equipo de Prime Video tenía una herramienta interna para monitorizar la calidad de miles de streams de vídeo concurrentes. Inicialmente, la diseñaron como una arquitectura serverless de manual: múltiples funciones AWS Lambda orquestadas por AWS Step Functions.

En el papel, la arquitectura era elegante. Cada paso del análisis de vídeo (detectar bloqueos de imagen, fallos de sincronización de audio) era un componente independiente. En la práctica, fue un desastre financiero y de rendimiento a gran escala.

El error fundamental de la arquitectura distribuida en este contexto es ignorar el peaje físico de la red. En la versión con microservicios, para pasar los frames de vídeo de un detector a otro, el sistema tenía que escribir los datos en un bucket temporal de S3 y leerlos en la siguiente Lambda. Además, AWS Step Functions cobra por cada "transición de estado". Cuando pasas millones de frames de vídeo por segundo, los costes de serializar datos, escribirlos en disco de red y pagar el peaje por cada salto de orquestación ahogan la latencia y vacían la tarjeta de crédito corporativa.

El regreso al Monolito Modular

La solución de Amazon fue aplastantemente sensata: meter todo en una sola caja.

Agruparon todos los detectores (audio, vídeo, subtítulos) dentro de un único proceso corriendo en una instancia Amazon EC2 (o en contenedores ECS de larga duración).

Al mover los datos a través de la memoria RAM del propio proceso en lugar de pasarlos por la red, eliminaron completamente los cuellos de botella de red y de I/O.

¿Y cómo escalan si el monolito se queda pequeño? De la forma más antigua y fiable: clonando el monolito. Si necesitan procesar más streams concurrentes, simplemente levantan más instancias completas del monolito en servidores EC2 más grandes y reparten el trabajo. Es decir, escalado horizontal (scale-out) de un monolito, no de componentes aislados.

Reflexión: La física no perdona

El post oficial de Amazon Prime Video debería ser lectura obligatoria en todas las universidades de ingeniería de software. Los microservicios resuelven problemas de escalabilidad humana (permiten que cientos de programadores desplieguen código sin pisarse), pero a nivel puramente técnico, añaden latencia, sobrecarga de red y complejidad operativa extrema.

La comunicación a través de una red (milisegundos) siempre será órdenes de magnitud más lenta y cara que una llamada a memoria local (nanosegundos). La física no perdona, y la factura del proveedor Cloud tampoco. Es un alivio inmenso ver que el péndulo de la industria empieza a corregirse: hay que elegir la arquitectura que resuelva el cuello de botella de tu negocio, no la que quede más moderna en una presentación de diapositivas.