Netflix es una de las plataformas de streaming más grandes del mundo, capaz de soportar el tráfico diario de casi 300 millones de usuarios. Pero, ¿cómo logra mantenerse?
Los orígenes de Netflix
Como muchos ya saben, Netflix comenzó su trayectoria como una compañía dedicada a la venta y renta de DVDs, con la ambición de convertirse en la competencia directa de Blockbuster. El desenlace de la historia ya es conocido.
Por otro lado, Lo verdaderamente interesante de la historia de Netflix empieza en 2007, cuando da el salto al servicio de streaming. En ese entonces, la empresa operaba su infraestructura tecnológica sobre un sistema monolítico desarrollado en Java.
Para quienes no estén familiarizados con el término, un sistema monolítico es aquel en el que toda la aplicación se ejecuta como una única unidad indivisible. Es decir, no hay una separación clara entre sus diferentes componentes. En el caso de Netflix, esto significaba que el sistema de facturación, el motor de recomendaciones, el módulo de inicio de sesión y otros servicios estaban todos integrados en el mismo proyecto. Cualquier cambio en una parte del sistema podía afectar el funcionamiento del resto, lo que dificultaba la escalabilidad y el mantenimiento del servicio.
Microservicios de Netflix
Entre 2010 y 2016, Netflix emprendió una profunda transformación tecnológica. Su objetivo: migrar de una arquitectura monolítica a un sistema distribuido basado en microservicios alojados en la nube, específicamente en Amazon Web Services (AWS).
Este cambio permitió a la empresa desacoplar gradualmente su gran aplicación en módulos independientes. Cada uno de estos microservicios se encargaba de una única función específica. Por ejemplo, surgieron servicios individuales dedicados exclusivamente al sistema de recomendaciones, a la facturación, a la autenticación de usuarios, y así sucesivamente.
La decisión de realizar esta migración no fue arbitraria. El 15 de agosto de 2008, Netflix sufrió una caída crítica de tres días provocada por la corrupción de su base de datos. Este evento evidenció la fragilidad de su infraestructura monolítica y fue el punto de inflexión que impulsó la búsqueda de una arquitectura más robusta.
En ese momento, Amazon era uno de los pocos proveedores capaces de ofrecer una plataforma en la nube con la escalabilidad que Netflix necesitaba.
La empresa descompuso su enorme monolito en una red de microservicios independientes. Cada uno se desplegaba por separado en la nube y era responsable de un aspecto particular del negocio: recomendaciones, búsqueda, streaming, gestión de cuentas, entre otros.
Este enfoque, ampliamente adoptado en la ingeniería de software, parte de una premisa sencilla, pero poderosa: cuando un problema es demasiado grande, lo mejor es dividirlo en partes más pequeñas. Al desacoplar los componentes del sistema, se logra que evolucionen de forma independiente.
¿Cómo está construida la arquitectura de Netflix?
Gracias al trabajo de realizado por ByteByteGo, podemos entender mejor cómo está diseñada la arquitectura de Netflix para soportar el tráfico de aproximadamente 300 millones de usuarios diarios.
Comencemos por la parte más visible: la interfaz de usuario (UI), es decir, lo que el usuario ve cuando ingresa a Netflix. En la versión web, la interfaz está desarrollada con React. Por otro lado, la aplicación móvil de Netflix está construida con Kotlin para dispositivos Android y Swift para dispositivos Apple.
Pero la arquitectura de Netflix va mucho más allá de la capa visual. En el backend, una de las piezas clave es AWS Elastic Transcoder, un servicio que convierte archivos de video a múltiples formatos y resoluciones antes de su distribución. Esto significa que, para cada contenido, se generan varias versiones—por ejemplo, en 4K, 1080p y 720p—durante una fase de procesamiento previa.
Estas versiones se almacenan y distribuyen a través de una red de entrega de contenido (CDN) como Amazon CloudFront. Este sistema elige automáticamente la mejor versión del video según el dispositivo del usuario y sus condiciones de red, optimizando tanto el rendimiento.
Comunicación entre frontend y backend: GraphQL
El frontend de Netflix se comunica con el backend utilizando GraphQL, un lenguaje de consultas para APIs desarrollado por Facebook. Aunque podría dedicarse un artículo completo solo para explicar GraphQL, la idea principal es que permite al frontend solicitar exactamente los datos que necesita.
A diferencia de las APIs REST tradicionales, donde cada endpoint devuelve un conjunto fijo de datos, GraphQL permite que el cliente defina la estructura precisa de la respuesta mediante una consulta clara y flexible. Por ejemplo, si el frontend solo requiere el nombre de una película y la cantidad de capítulos, puede pedir únicamente esa información, evitando recibir datos innecesarios.
Backend de Netflix
En cuanto al backend, no es sorprendente que Netflix continúe utilizando Java, particularmente a través del framework Spring Boot. Además, emplea dos servicios fundamentales dentro del ecosistema de Netflix OSS: Netflix Zuul y Netflix Eureka.
- Zuul funciona como un enrutador y balanceador de carga que identifica y redirige las solicitudes hacia el microservicio correspondiente, asegurando una distribución eficiente del tráfico.
- Eureka es un servicio de descubrimiento que permite a los microservicios registrarse y localizarse entre sí dinámicamente, facilitando la comunicación y escalabilidad dentro del sistema.
Bases de datos y procesamiento en tiempo real: el motor detrás de la experiencia Netflix
Netflix utiliza una combinación de sistemas de bases de datos. Entre las bases de datos que emplea se encuentran:
- MySQL
- Cassandra
- CockroachDB
- EVCache
En cuanto al streaming, Netflix incorpora tecnologías especializadas. Dos de las más importantes son:
- Apache Kafka: Una plataforma de mensajería distribuida que se encarga de transmitir eventos en tiempo real. Actúa como una columna vertebral para la comunicación entre servicios.
- Apache Flink: Una potente herramienta para el procesamiento de flujos de datos en tiempo real, utilizada para analizar eventos conforme ocurren y reaccionar en milisegundos.
¿Cómo Netflix analiza y visualiza datos a escala masiva?
Una de las capacidades más críticas para una empresa como Netflix es la de recopilar, almacenar y analizar grandes volúmenes de datos. Netflix ha logrado dominar el ecosistema del big data para mejorar la experiencia del usuario, optimizar su operación y tomar decisiones basadas en datos.
Para el almacenamiento a gran escala, Netflix utiliza una combinación de servicios en la nube, entre los que destacan:
- AWS S3 (Amazon Simple Storage Service)
- Amazon Redshift
- Apache Iceberg
- Apache Druid
En cuanto a la visualización y análisis de estos datos, Netflix integra diversas herramientas especializadas como:
- Apache Spark
- Apache Flink
- Tableau
DevOps en Netflix
Uno de los pilares clave en la operación moderna de Netflix es la adopción de prácticas de DevOps, específicamente a través del modelo CI/CD (Continuous Integration / Continuous Deployment). Esta metodología de desarrollo permite que nuevas funcionalidades sean desarrolladas, probadas y desplegadas de forma continua, garantizando una evolución constante de la plataforma sin interrupciones significativas en el servicio.
Netflix ha construido un flujo de trabajo altamente automatizado en el que los cambios se integran con agilidad. Por ejemplo, si un desarrollador necesita modificar el color de un botón en la interfaz, simplemente realiza el cambio en el código, ejecuta las pruebas automatizadas correspondientes, y si todo está en orden, el cambio es desplegado a producción casi de inmediato. Luego, el desarrollador puede continuar con su siguiente tarea, manteniendo un ritmo de trabajo ágil.
Para lograr este nivel de automatización, Netflix se apoya en un conjunto sofisticado de herramientas:
- Jira y Confluence
- Jenkins y Spinnaker
- Atlas
- Chaos Monkey
- Gradle y Nebula