martes, noviembre 30, 2010

La arquitectura de Netflix

martes, noviembre 30, 2010 por Martín


Adrian Cockcroft, Cloud Architect en Netflix ha compartido unas transparencias en Slideshare bastante interesantes sobre el servicio de streaming de video Netflix.

Las transparencias están orientadas tanto a desarrolladores como a ingenieros de sistemas. Las notas que se sacan son bastante interesantes y son bastante densas, de hecho entran en bastantes detalles según comenta su autor en su propio blog para atraer a ingenieros a su equipo, ya que están contratando. Y vaya si están contratando. En su web tienen unas 100 posiciones abiertas ahora mismo. Como siempre me pasa, este post iba a ser una simple referencia pero ha terminado en una recopilación de notas.

De las transparencias se extrae que tienen una arquitectura inmensa, 16 millones de subscriptores en Estados Unidos y Canadá dan para bastante. Tienen un sistema basado completamente en AWS utilizando instancias de Windows para la codificación de vídeo. Las cifras son impresionantes. Para el almacenamiento de vídeos por ejemplo hablan de decenas de miles de instancias de EC2 y petabytes de almacenamiento en S3.

Utilizan Hadoop y Amazon EMR para su gestión. Necesitan gestionar un terabyte al día de datos.

En cuanto a código, Netflix está basado en Java. Han aprovechado bastantes herramientas Open Source y se han encontrado con que muchas herramientas de gestión de centros de datos no les valían. Su código estaba orientado a centro de datos tradicional y en su transición a un sistema basado en la nube de Amazon prefirieron reescribir todo el código de cero. Pasaron a utilizar un sistema NoSQL como SimpleDB, memcached y protocolos según ellos más robustos y flexibles como Apache Avro (no lo conocía).


Utilizan Eclipse, Jira, Hudson, Ivy y Artifactory (otro descubrimiento). La build se encarga de todo. Desde el WAR al RPM a la imagen de Amazon. Los servidores corren en CentOS. Utilizan Apache, Tomcat y OpenJDK. Uno de los problemas de los desarrolladores es la colisión entre instancias cuando están realizando tests. Para ello crearon pequeños hacks de forma que se crean instancias por desarrollador y no existe esa colisión al desplegar.

Las transparencias también tratan varios temas de arquitectura del software y la interacción entre las diferentes interfaces de su sistema. Parece que tienen por ejemplo su propia gestión de pools de threads y que se preocupan bastante por el tamaño de los objetos y por como se pasan los objetos entre servicios: por referencia dentro del mismo servicio y por valor entre servicios. Los diferentes servicios instrumentan todas las llamadas. Utilizan diferentes objetos "fake" para que los desarrolladores puedan comenzar a trabajar lo más pronto posible, etc.



Por cierto en nubeblog Netflix es un tema habitual:

- ENTREVISTA A ADRIAN COCKCROFT, CLOUD ARCHITECT DE NETFLIX EN EL BLOG DE CLOUDSCALING
- EL CASO DE ÉXITO DE NETFLIX: CÓMO UNA GRAN CORPORACIÓN MIGRA A LA NUBE PÚBLICA

comments

0 Respuestas a "La arquitectura de Netflix"