System Design Netflix: una arquitectura completa

¿Puedes diseñar Netflix en 45 minutos? 

¿¿¿Qué??? En serio ?? (Puedo verlo toda la noche, pero…). Es imposible explicar incluso un solo componente de Netflix, ¿y me pides que lo diseñe en solo 45 minutos de poco tiempo? 

Sí, esto es lo que se espera que hagas en tus entrevistas de diseño de sistemas si quieres conseguir el trabajo de tus sueños en las grandes empresas tecnológicas. Diseñar Netflix es una pregunta bastante común de ronda de diseño de sistemas en las entrevistas. Muchos candidatos tienen más miedo de esta ronda que de la ronda de codificación porque no tienen la idea de qué temas y compensaciones deben cubrir dentro de este marco de tiempo limitado. En primer lugar, recuerde que la ronda de diseño del sistema es extremadamente abierta y no existe una respuesta estándar. Incluso para la misma pregunta, tendrá una discusión totalmente diferente con diferentes entrevistadores. 

System Design Netflix

En este blog, discutiremos cómo diseñar un sitio web como Dropbox o Google Drive, pero antes de continuar, queremos que lea el artículo » ¿Cómo descifrar el diseño del sistema en las entrevistas?» ”. Tendrá una idea de cómo es esta ronda, qué se espera que haga en esta ronda y qué errores debe evitar frente al entrevistador. 

Arquitectura del sistema de alto nivel de Netflix

Todos estamos familiarizados con los servicios de Netflix. Maneja grandes categorías de películas y contenido de televisión y los usuarios pagan la renta mensual para acceder a estos contenidos. Netflix tiene más de 180 millones de suscriptores en más de 200 países.  

Netflix-High-Level-System-Architecture

Netflix funciona en dos nubes… AWS y Open Connect . Estas dos nubes funcionan juntas como la columna vertebral de Netflix y ambas son muy responsables de brindar el mejor video a los suscriptores. 

La aplicación tiene principalmente 3 componentes… 

  • Cliente: dispositivo (interfaz de usuario) que se utiliza para buscar y reproducir videos de Netflix. TV, XBOX, ordenador portátil o teléfono móvil, etc.
  • OC (Open connect) o Netflix CDN: CDN es la red de servidores distribuidos en diferentes ubicaciones geográficas, y Open Connect es la propia CDN (red de entrega de contenido) global personalizada de Netflix. Maneja todo lo que implica transmisión de video. Se distribuye en diferentes ubicaciones y una vez que presiona el botón de reproducción, la transmisión de video de este componente se muestra en su dispositivo. Entonces, si está tratando de reproducir el video desde Norteamérica, el video se entregará desde la conexión abierta (o servidor) más cercana en lugar del servidor original (respuesta más rápida del servidor más cercano).
  • Backend (base de datos) : esta parte maneja todo lo que no implica la transmisión de video (antes de presionar el botón de reproducción), como incorporar contenido nuevo, procesar videos, distribuirlos a servidores ubicados en diferentes partes del mundo y administrar el tráfico de red. . Amazon Web Services se encarga de la mayoría de los procesos.

La interfaz de Netflix está escrita en ReactJS principalmente por tres razones: velocidad de inicio, rendimiento del tiempo de ejecución y modularidad. Analicemos los componentes y el funcionamiento de Netflix.  

¿Cómo incorpora Netflix una película/video?

Netflix recibe videos y contenido de muy alta calidad de las productoras, por lo que antes de entregar los videos a los usuarios, realiza un preprocesamiento. Netflix admite más de 2200 dispositivos y cada uno de ellos requiere resoluciones y formatos diferentes. Para que los videos se puedan ver en diferentes dispositivos, Netflix realiza la transcodificación o codificación, lo que implica encontrar errores y convertir el video original en diferentes formatos y resoluciones. 

Netflix-Transcoding

Netflix también crea optimización de archivos para diferentes velocidades de red. La calidad de un video es buena cuando lo ve en una red de alta velocidad. Netflix crea múltiples réplicas (aproximadamente 1100-1200) para la misma película con diferentes resoluciones. Estas réplicas requieren mucha transcodificación y preprocesamiento. Netflix divide el video original en diferentes fragmentos más pequeños y, al usar trabajadores paralelos en AWS, convierte estos fragmentos en diferentes formatos (como mp4, 3gp, etc.) en diferentes resoluciones (como 4k, 1080p y más). 

Después de la transcodificación, una vez que tenemos varias copias de los archivos de la misma película, estos archivos se transfieren a todos y cada uno de los servidores de Open Connect que se encuentran en diferentes ubicaciones en todo el mundo. 

Cuando el usuario carga la aplicación de Netflix en su dispositivo, primero entran en escena las instancias de AWS y se encargan de algunas tareas, como el inicio de sesión, las recomendaciones, la búsqueda, el historial del usuario, la página de inicio, la facturación, la atención al cliente, etc. Después de eso, cuando el el usuario presiona el botón de reproducción en un video, Netflix analiza la velocidad de la red o la estabilidad de la conexión, y luego descubre el mejor servidor Open Connect cerca del usuario. Según el dispositivo y el tamaño de la pantalla, el formato de video correcto se transmite al dispositivo del usuario. Mientras mira un video, es posible que haya notado que el video aparece pixelado y vuelve a HD después de un tiempo. Esto sucede porque la aplicación sigue comprobando el mejor servidor de conexión abierta de transmisión y cambia de formato (para obtener la mejor experiencia de visualización) cuando es necesario. 

Los datos del usuario se guardan en AWS, como búsquedas, visualización, ubicación, dispositivo, reseñas y Me gusta, Netflix los usa para crear la recomendación de películas para los usuarios que usan el modelo de aprendizaje automático o Hadoop. 

Ventajas de la conexión abierta: 

  • Menos costoso
  • Mejor calidad
  • Más escalable 

1. Equilibrador de carga elástico

Netflix-System-Design-Elastic-Load-Balancer

ELB en Netflix es responsable de enrutar el tráfico a los servicios frontend. ELB realiza un esquema de equilibrio de carga de dos niveles en el que la carga se equilibra primero entre las zonas y luego entre las instancias (servidores).  

  • El primer nivel consiste en un balanceo Round Robin básico basado en DNS. Cuando la solicitud llega al primer balanceo de carga (ver la figura), se balancea en una de las zonas (usando round-robin) que su ELB está configurado para usar.
  • El segundo nivel es una array de instancias de equilibrador de carga y realiza la técnica de equilibrio por turnos para distribuir la solicitud entre las instancias que están detrás de ella en la misma zona.

2. ZUUL

ZUUL es un servicio de puerta de enlace que proporciona enrutamiento dinámico, supervisión, resiliencia y seguridad. Proporciona un enrutamiento fácil basado en parámetros de consulta, URL y ruta. Entendamos el funcionamiento de sus diferentes partes…  

  • El servidor Netty asume la responsabilidad de manejar el protocolo de red, el servidor web, la gestión de conexiones y el trabajo de proxy. Cuando la solicitud llegue al servidor de Netty, enviará la solicitud al filtro de entrada.
  • El filtro de entrada es responsable de la autenticación, el enrutamiento o la decoración de la solicitud. Luego reenvía la solicitud al filtro de punto final.
  • El filtro de punto final se usa para devolver una respuesta estática o para reenviar la solicitud al servicio de backend (u origen, como lo llamamos). Una vez que recibe la respuesta del servicio de backend, envía la solicitud al filtro de salida.
  • El filtro de salida se usa para comprimir el contenido, calcular las métricas o agregar/eliminar encabezados personalizados. Después de eso, la respuesta se envía de vuelta al servidor de Netty y luego el cliente la recibe.

ventajas:  

  • Puede crear algunas reglas y compartir el tráfico distribuyendo las diferentes partes del tráfico a diferentes servidores.
  • Los desarrolladores también pueden realizar pruebas de carga en clústeres recién implementados en algunas máquinas. Pueden enrutar parte del tráfico existente en estos clústeres y verificar cuánta carga puede soportar un servidor específico.
  • También puede probar nuevos servicios . Cuando actualiza el servicio y desea verificar cómo se comporta con las requests de API en tiempo real, en ese caso, puede implementar el servicio en particular en un servidor y puede redirigir una parte del tráfico al nuevo servicio para verificar la servicio en tiempo real.
  • También podemos filtrar la solicitud incorrecta configurando las reglas personalizadas en el filtro de punto final o en el firewall.

3. Hystrix

En un sistema distribuido complejo, un servidor puede depender de la respuesta de otro servidor. Las dependencias entre estos servidores pueden crear latencia y todo el sistema puede dejar de funcionar si uno de los servidores falla inevitablemente en algún momento. Para solucionar este problema podemos aislar la aplicación host de estos fallos externos. La biblioteca Hystrix está diseñada para hacer este trabajo. Le ayuda a controlar las interacciones entre estos servicios distribuidos agregando tolerancia a la latencia y lógica de tolerancia a fallas. Hystrix hace esto aislando los puntos de acceso entre los servicios, el sistema remoto y las bibliotecas de terceros. La biblioteca ayuda.  

  • Deje de fallas en cascada en un sistema distribuido complejo.
  • control sobre la latencia y las fallas de las dependencias a las que se accede (generalmente a través de la red) a través de bibliotecas de clientes de terceros.
  • Fallar rápido y recuperarse rápidamente.
  • Retroceder y degradar con gracia cuando sea posible.
  • Habilite el monitoreo, las alertas y el control operativo casi en tiempo real.
  • Almacenamiento en caché de requests consciente de la concurrencia. Procesamiento por lotes automatizado a través del colapso de requests 

4. Arquitectura de microservicios de Netflix 

Microservice-Architecture-of-Netflix

El estilo arquitectónico de Netflix se construye como una colección de servicios. Esto se conoce como arquitectura de microservicios y potencia todas las API necesarias para aplicaciones y aplicaciones web. Cuando la solicitud llega al punto final, llama a los otros microservicios para obtener los datos requeridos y estos microservicios también pueden solicitar los datos de diferentes microservicios. Después de eso, se envía una respuesta completa para la solicitud de API al punto final. 

En una arquitectura de microservicios, los servicios deberían ser independientes entre sí, por ejemplo, el servicio de almacenamiento de video estaría desacoplado del servicio responsable de la transcodificación de videos. Ahora, comprendamos cómo hacerlo confiable… 

¿Cómo hacer que la arquitectura de microservicios sea confiable? 

  • Usa Hystrix (Ya explicado)
  • Microservicios críticos separados: podemos separar algunos servicios críticos (o punto final o API) y hacerlos menos dependientes o independientes de otros servicios. También puede hacer que algunos servicios críticos dependan solo de otros servicios confiables. Al elegir los microservicios críticos, puede incluir todas las funcionalidades básicas, como buscar un video, navegar a los videos, presionar y reproducir el video, etc. De esta manera, puede hacer que los puntos finales estén altamente disponibles e incluso en el peor de los casos al menos un el usuario podrá hacer las cosas básicas.
  • Trate a los servidores como apátridas: Esto puede sonar divertido para usted, pero para comprender este concepto, piense en sus servidores como una manada de vacas y le importa cuántos galones de leche obtiene todos los días. Si un día nota que está obteniendo menos leche de una vaca, entonces solo necesita reemplazar esa vaca (que produce menos leche) con otra vaca. No necesita depender de una vaca específica para obtener la cantidad requerida de leche. 
    Podemos relacionar el ejemplo anterior con nuestra aplicación. La idea es diseñar el servicio de tal manera que si uno de los puntos finales está dando el error o si no está atendiendo la solicitud de manera oportuna, entonces puede cambiar a otro servidor y hacer su trabajo. En lugar de confiar en un servidor específico y preservar el estado en ese servidor, puede enrutar la solicitud a otra instancia de servicio y puede activar automáticamente un nuevo Node para reemplazarlo. Si un servidor deja de funcionar, será reemplazado por otro.

5. Caché de vehículos eléctricos

En la mayoría de las aplicaciones, se utiliza con frecuencia cierta cantidad de datos. Para una respuesta más rápida, estos datos se pueden almacenar en caché en tantos puntos finales y se pueden obtener del caché en lugar del servidor original. Esto reduce la carga del servidor original, pero el problema es que si el Node se cae, todo el caché se cae y esto puede afectar el rendimiento de la aplicación. Para resolver este problema, Netflix ha creado su propia capa de almacenamiento en caché personalizada llamada caché EV. La memoria caché EV se basa en Memcached y en realidad es un contenedor de Memcached. 

System-Design-Netflix-–-EV-Cache

Clúster de Memcached de 3 Nodes en 2 zonas de disponibilidad con un cliente en cada zona

Netflix ha implementado muchos clústeres en varias instancias de AWS EC2 y estos clústeres tienen muchos Nodes de Memcached y también tienen clientes de caché. Los datos se comparten en todo el clúster dentro de la misma zona y varias copias de la memoria caché se almacenan en Nodes fragmentados. Cada vez que ocurre una escritura en el cliente, todos los Nodes en todos los clústeres se actualizan, pero cuando la lectura ocurre en el caché, solo se envía al clúster más cercano (no a todos los clústeres y Nodes) y sus Nodes. En caso de que un Node no esté disponible, lea desde un Node disponible diferente. Este enfoque aumenta el rendimiento, la disponibilidad y la confiabilidad.  

6. Base de datos

Netflix utiliza dos bases de datos diferentes, es decir, MySQL (RDBMS) y Cassandra (NoSQL) para diferentes propósitos.  

MySQL implementado en EC2

Netflix guarda datos como información de facturación, información de usuario e información de transacciones en MySQL porque necesita el cumplimiento de ACID. Netflix tiene una configuración maestro-maestro para MySQL y se implementa en grandes instancias EC2 de Amazon usando InnoDB. 

La configuración sigue el » Protocolo de replicación síncrona «, donde si el escritor pasa al Node principal principal, también se replicará en otro Node principal. El reconocimiento se enviará solo si se ha confirmado la escritura de los Nodes maestro primario y remoto. Esto asegura la alta disponibilidad de los datos. 
Netflix ha configurado la réplica de lectura para todos y cada uno de los Nodes (locales y entre regiones). Esto asegura una alta disponibilidad y escalabilidad. 

System-Design-Netflix-–-MySQL

Todas las consultas de lectura se redirigen a las réplicas de lectura y solo las consultas de escritura se redirigen a los Nodes maestros. En el caso de una falla de MySQL principal principal, el Node principal secundario asumirá la función principal y la entrada de ruta 53 (configuración de DNS) para la base de datos se cambiará a este nuevo Node principal. Esto también redirigirá las consultas de escritura a este nuevo Node principal principal.  

casandra

Cassandra es una base de datos NoSQL que puede manejar grandes cantidades de datos y también puede manejar escritura y lectura pesadas. Cuando Netflix comenzó a adquirir más usuarios, los datos del historial de visualización de cada miembro también comenzaron a aumentar. Esto aumenta la cantidad total de datos del historial de visualización y se vuelve un desafío para Netflix manejar esta enorme cantidad de datos. Netflix escaló el almacenamiento de los datos del historial de visualización, manteniendo dos objetivos principales en mente…  

  • Huella de almacenamiento más pequeña.
  • Rendimiento constante de lectura/escritura a medida que crece la visualización por miembro (la relación de lectura/escritura de datos del historial de visualización es de aproximadamente 9:1 en Cassandra).

System-Design-Netflix-Cassandra-Service-Pattern

Modelo de datos desnormalizados totales  

  • Más de 50 clústeres de Cassandra
  • Más de 500 Nodes
  • Más de 30 TB de copias de seguridad diarias
  • Clúster más grande 72 Nodes.
  • 1 clúster de más de 250 000 escrituras/s

Inicialmente, el historial de visualización se almacenaba en Cassandra en una sola fila. Cuando los usuarios comenzaron a aumentar en Netflix, aumentaron los tamaños de las filas y el tamaño general de los datos. Esto resultó en un alto almacenamiento, más costos operativos y un rendimiento lento de la aplicación. La solución a este problema fue comprimir las filas antiguas… 
Netflix dividió los datos en dos partes…  

  • Historial de visualización en vivo (LiveVH): esta sección incluía la pequeña cantidad de datos históricos de visualización recientes de usuarios con actualizaciones frecuentes. Los datos se utilizan con frecuencia para los trabajos de ETL y se almacenan sin comprimir.
  • Historial de visualización comprimido (CompressedVH): en esta sección se clasifica una gran cantidad de registros de visualización más antiguos con actualizaciones excepcionales. Los datos se almacenan en una sola columna por clave de fila, también en forma comprimida para reducir el espacio de almacenamiento.

7. Procesamiento de datos en Netflix usando Kafka y Apache Chukwa

Cuando hace clic en un video, Netflix comienza a procesar datos en varios términos y toma menos de un nanosegundo. Analicemos cómo funciona la tubería de evolución en Netflix. 

Netflix usa Kafka y Apache Chukwe para ingerir los datos que se producen en una parte diferente del sistema. Netflix proporciona casi 500 mil millones de eventos de datos que consumen 1,3 PB/día y 8 millones de eventos que consumen 24 GB/segundo durante las horas pico. Estos eventos incluyen información como…  

  • Registros de errores
  • actividades de la interfaz de usuario
  • Eventos de rendimiento
  • Actividades de visualización de videos
  • Solución de problemas y eventos de diagnóstico.

Apache Chukwe es un sistema de recopilación de datos de código abierto para recopilar registros o eventos de un sistema distribuido. Está construido sobre HDFS y el marco Map-reduce. Viene con las funciones de escalabilidad y robustez de Hadoop. Además, incluye una gran cantidad de herramientas potentes y flexibles para mostrar, monitorear y analizar el resultado. Chukwe recopila los eventos de diferentes partes del sistema y desde Chukwe puede monitorear y analizar o puede usar el tablero para ver los eventos. Chukwe escribe el evento en el formato de secuencia de archivos de Hadoop (S3). Después de eso, el equipo de Big Data procesa estos archivos S3 Hadoop y escribe Hive en formato de datos Parquet. Este proceso se denomina procesamiento por lotes y básicamente escanea todos los datos con una frecuencia horaria o diaria. 

Para cargar eventos en línea en EMR/S3, Chukwa también proporciona tráfico a Kafka (la puerta principal en el procesamiento de datos en tiempo real). Kafka es responsable de mover los datos desde Kafka frontal a varios receptores: S3, Elasticsearch y Kafka secundario. El enrutamiento de estos mensajes se realiza utilizando el marco Apache Samja . El tráfico enviado por Chukwe puede ser flujos completos o filtrados, por lo que a veces es posible que deba aplicar un filtrado adicional en los flujos de Kafka. Esa es la razón por la que consideramos que el enrutador lleva de un tema de Kafka a un tema de Kafka diferente.  

8. Búsqueda elástica

En los últimos años, hemos visto un crecimiento masivo en el uso de Elasticsearch dentro de Netflix. Netflix ejecuta aproximadamente 150 clústeres de búsqueda elástica y 3500 hosts con instancias. 

Netflix está utilizando la búsqueda elástica para la visualización de datos, la atención al cliente y para la detección de algunos errores en el sistema. Por ejemplo, si un cliente no puede reproducir el video, el ejecutivo de atención al cliente resolverá este problema mediante la búsqueda elástica. El equipo de reproducción va a la búsqueda elástica y busca al usuario para saber por qué el video no se reproduce en el dispositivo del usuario. Llegan a conocer toda la información y los eventos que suceden para ese usuario en particular. Llegan a saber qué causó el error en la transmisión de video. El administrador también utiliza la búsqueda elástica para realizar un seguimiento de cierta información. También se utiliza para realizar un seguimiento del uso de recursos y para detectar problemas de registro o inicio de sesión.  

9. Apache Spark para recomendación de películas

Netflix usa Apache Spark y el aprendizaje automático para la recomendación de películas. Entendamos cómo funciona con un ejemplo. Cuando carga la página principal, ve varias filas de diferentes tipos de películas. Netflix personaliza estos datos y decide qué tipo de filas o qué tipo de películas se deben mostrar a un usuario específico. Estos datos se basan en los datos históricos y preferencias del usuario. Además, para ese usuario específico, Netflix clasifica las películas y calcula la clasificación de relevancia (para la recomendación) de estas películas disponibles en su plataforma. 

En Netflix, Apache Spark se usa para recomendaciones y personalización de contenido. La mayoría de las canalizaciones de aprendizaje automático se ejecutan en estos grandes grupos de chispas. Estas canalizaciones se utilizan luego para seleccionar filas, ordenar, clasificar por relevancia del título y personalizar el material gráfico, entre otros. 

Personalización de obras de arte

Cuando abres la página principal de Netflix, es posible que hayas notado las imágenes de cada video… estas imágenes se denominan imágenes de encabezado (miniatura). Netflix quiere el máximo de clics para los videos de los usuarios y estos clics dependen de las imágenes de encabezado. Netflix tiene que elegir la imagen de encabezado convincente correcta para un video específico. Para hacer eso, Netflix crea múltiples obras de arte para una película específica y muestra estas imágenes a los usuarios al azar. Para la misma película, las imágenes pueden ser diferentes para diferentes usuarios. Según sus preferencias y su historial de visualización, Netflix predice qué tipo de películas le gustan más o qué actores le gustan más en una película. Según los gustos de los usuarios, se les mostrarán las imágenes. 

Por ejemplo, supongamos que ve 9 imágenes diferentes de su película favorita Good Will Hunting en tres filas (si le gustan las comedias, se mostrarán imágenes de Robin Williams para esta película. Si le gustan las películas románticas, Netflix le mostrará la imagen de Matt Damon y Minnie Driver). Ahora, Netflix calcula la cantidad de clics que recibe una determinada imagen. Si los clics para la imagen central de la película son 1500 veces y las otras imágenes tienen menos clics, Netflix hará que la imagen central sea una imagen de encabezado para la película Good Will Hunting para siempre. Esto se llama basado en datos y Netflix realiza el análisis de datos con este enfoque. Para tomar la decisión correcta, los datos se calculan en función del número de vistas asociadas con cada imagen. 

Sistema de recomendación de video

Si un usuario quiere descubrir algún contenido o video en Netflix, el sistema de recomendación de Netflix ayuda a los usuarios a encontrar sus películas o videos favoritos. Para construir este sistema de recomendación, Netflix tiene que predecir el interés del usuario y recopila diferentes tipos de datos de los usuarios, como…  

  • Interacción del usuario con el servicio (ver el historial y cómo el usuario calificó otros títulos)
  • Otros miembros con gustos y preferencias similares.
  • Información de metadatos de los videos vistos anteriormente para un usuario, como títulos, género, categorías, actores, año de lanzamiento, etc.
  • El dispositivo del usuario, a qué hora un usuario está más activo y durante cuánto tiempo está activo un usuario.

Netflix usa dos algoritmos diferentes para construir un sistema de recomendación… 

1. Filtrado colaborativo: la idea de este filtrado es que si dos usuarios tienen un historial de calificación similar, se comportarán de manera similar en el futuro. Por ejemplo, considere que hay dos personas. A una persona le gustó la película y la calificó con una buena puntuación. Ahora, hay una buena posibilidad de que la otra persona también tenga un patrón similar y haga lo mismo que hizo la primera persona. 

2. Filtrado basado en contenido: La idea es filtrar aquellos videos que son similares al video que le ha gustado a un usuario anteriormente. El filtrado basado en el contenido depende en gran medida de la información de los productos, como el título de la película, el año de estreno, los actores y el género. Entonces, para implementar este filtrado, es importante conocer la información que describe cada elemento y también es deseable algún tipo de perfil de usuario que describa lo que le gusta al usuario.  

Curso de diseño de sistemas GeeksforGeeks

¿Quiere conseguir un trabajo de desarrollador/ingeniero de software en una empresa de tecnología líder? o ¿Quiere hacer una transición sin problemas de SDE I a SDE II o perfiles de desarrollador sénior? En caso afirmativo, ¡entonces debe sumergirse profundamente en el mundo del diseño de sistemas! Un dominio decente sobre los conceptos de diseño de sistemas es muy esencial, especialmente para los profesionales que trabajan, para obtener una ventaja muy necesaria sobre los demás durante las entrevistas técnicas.  

System-Design-Course-By-GeeksforGeeks

Y es por eso que GeeksforGeeks le brinda un Diseño de sistemas en vivo centrado en una entrevista en profundidad que lo ayudará a prepararse para las preguntas relacionadas con Diseños de sistemas para Google, Amazon, Adobe, Uber y otras empresas basadas en productos.

Publicación traducida automáticamente

Artículo escrito por anuupadhyay y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *