¿Cuál es la arquitectura de YouTube?

La arquitectura de Youtube puede ser bastante complicada ahora, ya que es un sistema bastante grande. Creo que este artículo tiene una visión general bastante buena sobre la arquitectura de Youtube.

Sin embargo, creo que muchas personas sienten curiosidad acerca de cómo se tomaron varias decisiones de diseño para Youtube. Por ejemplo, ¿cómo almacenar videos para un acceso rápido? ¿Cómo diseñar su base de datos? ¿Cómo escalar el sistema?

Me gustaría hablar brevemente sobre algunos de estos temas y puede consultar Cómo diseñar Youtube I y Cómo diseñar Youtube II para obtener más información.

Modelo de almacenamiento y datos.
Si está utilizando una base de datos relacional como MySQL, diseñar el esquema de datos puede ser sencillo. Y en realidad, Youtube usa MySQL como su base de datos principal desde el principio y funciona bastante bien.

En primer lugar, debemos definir el modelo de usuario, que puede almacenarse en una sola tabla que incluye correo electrónico, nombre, datos de registro, información de perfil, etc. Otro enfoque común es mantener los datos del usuario en dos tablas: una para la información relacionada con la autenticación, como el correo electrónico, la contraseña, el nombre, la fecha de registro, etc., y la otra para obtener información adicional del perfil, como la dirección, la edad, etc.

El segundo modelo principal es el video. Un video contiene mucha información que incluye metadatos (título, descripción, tamaño, etc.), archivo de video, comentarios, conteos de vistas, conteos de me gusta, etc. Aparentemente, la información básica de video debe mantenerse en tablas separadas para que primero podamos tener una tabla de video.

La relación autor-video será otra tabla para asignar la identificación del usuario a la identificación del video. Y la relación de video similar al usuario también puede ser una tabla separada. La idea aquí es la normalización de la base de datos: organizar las columnas y las tablas para reducir la redundancia de datos y mejorar la integridad de los datos.

Video y almacenamiento de imágenes
Uno de los enfoques más comunes es utilizar CDN (red de entrega de contenido). En resumen, CDN es una red distribuida globalmente de servidores proxy implementados en múltiples centros de datos. El objetivo de un CDN es servir contenido a usuarios finales con alta disponibilidad y alto rendimiento. Es una especie de red de terceros y muchas empresas almacenan archivos estáticos en CDN hoy.

El mayor beneficio de usar CDN es que CDN replica el contenido en múltiples lugares para que haya una mayor posibilidad de que el contenido esté más cerca del usuario, con menos saltos, y el contenido se ejecutará en una red más amigable. Además, CND se ocupa de cuestiones como la escalabilidad y solo tiene que pagar por el servicio.

Videos populares de cola larga VS
Si pensabas que CDN es la solución definitiva, estás completamente equivocado. Dada la cantidad de videos que Youtube tiene hoy (819,417,600 horas de video), será extremadamente costoso alojarlos en CDN, especialmente la mayoría de los videos son de cola larga, que son videos que solo tienen 1-20 vistas por día.

Sin embargo, una de las cosas más interesantes sobre Internet es que, por lo general, son esos contenidos de cola larga los que atraen a la mayoría de los usuarios. La razón es simple: ese contenido popular se puede encontrar en todas partes y solo las cosas de cola larga hacen que el producto sea especial.

Volviendo al problema de almacenamiento. Un enfoque directo es alojar videos populares en CDN y los videos menos populares se almacenan en nuestros propios servidores por ubicación. Esto tiene un par de ventajas:

  • Una gran cantidad de audiencias ven los videos populares en diferentes lugares, que es en lo que CND es bueno. Replica el contenido en varios lugares para que sea más probable que sirva el video desde una red cercana y amigable.
  • Los videos de cola larga generalmente son consumidos por un grupo particular de personas y, si puede predecir con anticipación, es posible almacenar ese contenido de manera eficiente.

Vea este artículo: http://highscalability.com/youtu
y Google Tech Talk: http://video.google.com/videopla

Una más de las charlas de Google en el evento de Pycon sobre su escalabilidad: