CARGANDO

Escribe para buscar

NETFLIX Y SU SECRETO: Su Arquitectura Interna Revelada

Arquitectura de Netflix

Netflix es un gigante del video bajo demanda, genera millones al año a través de anuncios y suscripciones. Si eres tan freak de la tecnología como yo, en algún momento te habrás preguntado, ¿como es la infraestructura de netflix?, ¿de que forma consiguen que podamos ver pelis y series con buena calidad y sin perder paquetes de red en la transmisión?.

Sigue leyendo para descubrir más.

netflix

Arquitectura General

Vamos a comenzar con una imagen que nos muestra, como es la arquitectura general que Netflix nos ha proporcionado de forma pública.

netflix arquitectura

Como podemos observar con un vistazo rápido, los servicios de Netflix están divididos en múltiples partes, pero que se identifican bastante bien. Tenemos MYSQL y Cassandra para las BBDD, microservicios, un codificador de video y balanceadores de carga.

También se observa que, el cloud que utiliza Netflix para todos sus IaaS, PaaS y SaaS es Amazon Web Services (de aquí en adelante AWS) y Open Connect, que es un CDN personalizado de Netflix.

SAAS

El software como servicio se encuentra en la capa más alta y caracteriza una aplicación completa ofrecida como un servicio bajo demanda a través de multitenencia (una sola instancia del software que corre en la infraestructura del proveedor sirve a múltiples organizaciones de clientes).

PAAS

La capa del medio, la plataforma como servicio, es la encapsulación de una abstracción de un ambiente de desarrollo y el empaquetamiento de una serie de módulos o complementos que proporcionan, normalmente, una funcionalidad horizontal.

 

IAAS

La infraestructura como servicio (también llamada en algunos casos hardware as a service, HaaS) se encuentra en la capa inferior y es un medio de entregar almacenamiento básico y capacidades de cómputo como servicios estandarizados en la red.

 

Una vez vista la estructura general, vamos a pasar a cortar en cachos, este gigante de la infraestructura.

Entrada del usuario

Vamos a empezar por donde tú, como usuario, accedes al entramado de la infraestructura de Netflix.

Como podemos observar, Netflix utiliza un ELB (Elastic Load Balancer), básicamente, un balanceador de carga proporcionado por AWS. Este ELB es el encargado de enrutar el tráfico a los servicios front-end mediante un esquema de equilibrio de carga de dos niveles. La carga se equilibra primero entre zonas y luego entre servidores.

  • El primer nivel realiza un equilibrio de Round Robin básico basado en DNS. Cuando la solicitud llega al primer balanceador, la solicitud se envía a una de las zonas, siempre manteniendo la operación por turnos de Round Robin.
  • El segundo nivel es un array de instancias de equilibrio de carga y de nuevo utiliza Round Robin para distribuir la solicitud entre los servidores que están detrás de la zona elegida en el primer nivel.

En la siguiente imagen podéis verlo un poquito mejor.

ELB

En la siguiente parte nos encontramos con OPEN CONNECT. Se trata de un cloud que hace la función de CDN.

Como cualquier CDN, Open Connect es una red de servidores repartidos por todo el mundo pero en este caso, personalizada para Netflix. Este CDN se encarga de transmitir el vídeo que tu ves en tu pantalla con poca latencia, siempre eligiendo el mejor nodo y mas cercano a tu ubicación.

Por ejemplo, si estás viendo Netflix desde España, elegirá el servidor de Madrid, donde tiene cacheado todo el contenido o al menos, el más demandado.

Enrutamiento de la solicitud

Vamos con la parte en la que, el paquete que tu has enviado desde tu equipo y ha pasado por los balanceadores para recibir la petición, se empieza a enrutar hacia la necesidad de tu solicitud.

Aquí tenemos 2 partes importantes, Netty Server y ZUUL.

ZUUL es un servicio de puerta de enlace, que nos proporciona enrutamiento dinámico, monitorización de peticiones, resilencia y seguridad. Su enrutamiento funciona de una forma muy sencilla, ya que se basa en parámetros de consulta, URL y ruta.

Ok, pero, cuándo mi paquete de solicitud llega, ¿qué se hace con el?. Fácil, te lo explico.

  1. Cuándo Netty recibe tu petición, este asume la responsabilidad de manejar el protocolo de red, el servidor WEB, la administración de las conexiones y el trabajo de proxy. Después, envía la solicitud al filtro entrante.
  2. Este filtro entrante, que está en ZUUL, se encarga de autenticar, enrutar o decorar la solicitud para que pueda ser leída por otros filtros/sistemas. Una vez hecho este trabajo, envía la solicitud al filtro de endpoint.
  3. El filtro Endpoint se encarga de devolver una respuesta estática o de reenviar la solicitud al backend (Hystrix, del cual hablamos en la siguiente sección de la arquitectura).
  4. Una vez recibida la respuesta del servicio backend (Hystrix), envía la solicitud al filtro de salida (Outbound).
  5. Cuándo llega la solicitud al Outbound, comprime el contenido, calcula las métricas y agrega o elimina encabezados personalizados. Hecho esto, envía la respuesta de nuevo a Netty.
  6. Finalmente, Netty recoge todo ese paquetón y te lo envía a ti, como cliente.

Este proceso es un bucle que se realiza, por cada petición que realiza un cliente, por lo que, imagina la infraestructura que hay detrás para que se haga en cuestión de mili segundos y ni te enteres.

Hystrix y los microservicios

Ahora vamos a hablar del backend (Hystrix) y todo el entramado de los microservicios.

netflix hystrix

Cuándo tenemos un sistema tan complejo como es el de este caso, un servidor puede depender de la respuesta de otro, estas dependencias, crean latencias y puede dar la problemática de que todo el sistema deje de funcionar si uno de los servidores falla.

Para solucionar este problema, tenemos la librería de Hystrix que, ayuda a controlar las interacciones entre estos servicios distribuidos, agregando tolerancia a la latencia y tolerancia a fallos.

Si quieres empaparte más sobre esta librería, te dejo este github.

La parte de microservicios es algo compleja de explicar y puede hacer que este post se alargue o sea un tostón (aunque a lo mejor ya te lo está pareciendo 😂), además de que, no especifican cada microservicio que tecnología lleva dentro, por lo que, os daré una pincelada de todo esto.
Como imaginamos, si está montado en microservicios, es porque cada servicio es independiente entre sí, de esta manera conseguimos, por ejemplo, que si un servicio se cae, no deje inoperativo todo Netflix, solo la parte que tiene ese servicio.

Pongamos el ejemplo de otras compañías. Al entrar a Facebook, el servicio de login no funciona, pero tú tienes amigos que están dentro de facebook y no tienen ningún problema, bien, pues eso es porque el contenedor o microservicio que tiene la capa del login, ha tenido un problema, pero el resto de microservicios están bien. Como tu amigo ya pasó el login en el momento que funcionaba, el está visualizando la plataforma sin problema, por que ya ha pasado esa “capa”.

Con lo anterior quiero decir que, para que nos entendamos, trabajan en capas. Estas capas o servicios son independientes unos de otros, aunque se llamen entre sí para recoger datos, traspasarlos, obtenerlos y comunicarse también con diferentes tablas de las bases de datos. Por lo que, un contenedor o microservicio contendrá el servicio de almacenamiento de vídeos, otro será el responsable de la descodificación de vídeo, etc.

docker

Para continuar nuestro camino del paquete que tú has lanzado a Netflix, decir que, entre estos microservicios se están pasando información o solicitando información mutuamente. Ahora, tu paquete se bifurca en varios hilos, uno el de las bases de datos, donde recogerá la información solicitada y otra al transcoder para darte la mejor calidad posible de tu peli o serie.

Bases de datos

Pongamos que tu paquete está en la fase de obtener información. Para ello, el microservicio encargado de esta función, irá a uno de los 2 servicios de bases de datos que contiene Netflix, estos 2 servicios son:

  • Cassandra: Es una BBDD NoSQL, se encarga de manejar grandes cantidades de datos y puede manejar escrituras y lecturas de grandes volúmenes. Aquí se maneja TODA la información del contenido que visualizamos desde Netflix (Títulos, sinopsis, etc ).
  • MYSQL: En este servicio, netflix guarda todo lo referente a la facturación, utilizan MYSQL porque necesita cumplimiento ACID. La configuración que tienen se basa en replicación síncrona, por lo que los datos se traspasan entre nodos de BBDD en tiempo casi real.

mysql

Tu paquete ya tiene la información de las bases de datos, por lo que, ahora se mueve a la parte del procesamiento de datos.

Procesamiento del dato

chukwa

Cómo hemos comentado antes, ya tenemos la información de la peli o serie que quieres ver, al menos, el título, sinopsis y demás, pero, ¿como procesa Netflix esos datos?.

Netflix utiliza Kafka y Apache Chukwe para manejar todos estos datos y no hablamos de 2TB de información, si no de, 500 mil millones de eventos de datos que consumen 1,3 PB/día y 8 millones de eventos que consumen 24GB/segundo durante las horas pico, ahí es ná.

apache chukwa

Apache Chukwa es un sistema de recopilación de datos de código abierto donde recopila registros y eventos de un sistema distribuido, tiene escalabilidad y la potencia de Hadoop. Para cargar estos eventos, chukwa proporciona el tráfico a Kafka, que es el responsable de mover los datos entre el Kafka (frontal) a varios receptores en los que se encuentra un bucket de S3, elasticsearch y un nodo Kafka secundario.
Con Elasticsearch controlan la información y los eventos que suceden para un usuario en particular,  por ejemplo, porque hubo un error en la transmisión de vídeo hacia tu televisor, incluso, lo utilizan los administradores para revisar algún tipo de información, ya sea de accesos, errores, etc.

Por otro lado tenemos Apache Spark, es el encargado de, a través de un aprendizaje automático, recomendarte películas basada en tus intereses.

Codificación del video

Venga, que ya terminamos.

Nuestro paquete ya tiene todo el contenido, sabe que video hemos solicitado, ha pasado todos los filtros habidos y por haber, ¿que hace Netflix con nuestra solicitud entonces?, la pasa por un transcoder.

transcoder

Para procesar el video que se va a visualizar en tu televisor, Netflix recibe esa petición con toda la información que hemos visto anteriormente y la pasa por su transcodificador o codificador, para encontrar errores y convertir el video original en diferentes formatos y resoluciones.

Netflix tiene una cantidad insana de protocolos y códecs que utiliza para mostrarnos el video que queremos ver.

codecs

Netflix divide el video original en diferentes fragmentos más pequeños y utilizando workers paralelos de AWS, convierte estos fragmentos, en diferentes formatos y en diferentes resoluciones.

formatos

Una vez realizada la transcodificación y tenemos varias copias de los archivos para la misma película, se transfieren a todos y cada uno de los servidores Open Connect (del que ya hemos hablado al principio) que se encuentran en diferentes ubicaciones del mundo.

Hecho todo esto, tu paquete/solicitud que enviaste al principio de este post, se te devuelve, a través de, como hemos comentado, Open Connect, para que puedas visualizar la peli o la serie.

¿Que te ha parecido este artículo?, ¿te imaginabas que el entramado de Netflix era tan loco?, si te gustaría ver las entrañas de otras infraestructuras, ¡solo tienes que dejarnos un comentario!

También te dejo un artículo interesante con todas las certificaciones de azure.

Ah, hola 👋
Un placer conocerte.

Veo que te gusta la tecnología, ¿quieres que te mandemos una newsletter semanal?.

Acepto la política de privacidad *

¡No enviamos spam!. yo también lo odio a muerte!.

Tags:

También podría gustarte

2 Comentarios

  1. Albert mayo 8, 2024

    Muy buen artículo, la verdad es que artículos que muestran las tripas de grandes servicios está muy chulo. Más que nada porque sirve para conocer tecnologías nuevas y si te pica la curiosidad indagar más

    Responder
    1. Sysbeards mayo 8, 2024

      Es una frikada, pero súper interesante, a parte de por conocer nuevas tecnologías, luego te da ideas de que implementar en la infra que tengas en la empresa. Traeremos más entrañas si tiene acogida el artículo, sin duda, porque a mi me encanta estudiar esto y traéroslo!. Muchas gracias por tu coment Albert!.

      Responder

Deja un Comentario

Your email address will not be published. Required fields are marked *