Facebook, tecnología y almacenamiento

data_facebook
fuente de la imagen: https://www.facebook.com/note.php?note_id=469716398919

Una de las cosas que me llamo la atención es la capacidad de almacenamiento de Facebook, imagínense 1000 millones de usuarios interactuando a la vez, generando una cantidad de información enorme cada segundo. Algunos investigadores estiman que Facebook tiene cerca de 180 mil servidores (hasta Agosto del 2012) y que cada millón de usuarios es administrado por un ingeniero, eso quiere decir que Facebook tendría sólo para administrar la data aproximadamente 1000 ingenieros.

facebook_data_center
fuente de la imagen: http://www.theredmenmovie.com/2011/10/facebook-data-centre.html

¿Cómo hace Facebook para notificar, almacenar y responder cada evento que genera un usuario?, bueno la respuesta no es tan sencilla, pero lo que se sabe es que Facebook ha migrado su forma de almacenar información a una base de datos no relacional, llamado NoSQL (“Not only SQL”) y que trabaja por intermedio de Cassandra, una base de datos de código abierto creado por el propio Facebook.
Este entorno de trabajo tiene dos características importantes, Dynamo (creado por Amazon) y BigTable (creado por Google), pudiendo acelerar la respuesta de consulta sobre un volumen enorme de información.
Gracias a esta tecnología de almacenamiento Facebook puede ser altamente escalable de manera horizontal, es por eso que puede implementar servidores para su almacenamiento de data sin perder la velocidad de respuesta.

Facebook ya cuenta con un centro de datos propio en Prineville Oregon, también alquila instalaciones de data center al norte de Virginia y en Silicon Valley.

La necesidad de guardar 350 millones de fotografías por día, y la optimización de gastos de energía ha llevado a Facebook descentralizar su almacenamiento, es por eso que hace poco acaban de abrir un centro de datos en Lulea Suecia (30000 metros cuadrados), el primero fuera de Estados Unidos, este lugar fue elegido por su clima frio y que casi nunca se corta el servicio eléctrico, según las estadísticas desde hace 30 años que no tienen ningún tipo de corte en Lulea. (fuente BBC Mundo).

Si Cassandra y Tornado son las herramientas que Facebook agradece por tenerlos en sus sistemas, aun no puede desligarse del todo con MySQL ya que gran parte de la integración aun depende de esta base de datos relacional.
Aquí les dejo una lista de tecnologías de software que utiliza Facebook (fuente alt1040.)

1. Linux
Aquí sería más preciso decir que se trata del ecosistema Linux, en particular de LAMP:

Linux, el sistema operativo que administrar los recursos de cada servidor en Facebook,
Apache, el servidor de páginas web,
MySQL, el manejador de bases de datos, el que almacena de forma estructurada los datos de los usuarios,
Y PHP, el lenguaje de programación que automatiza la creación de páginas web.

Facebook no sería posible sin Linux.

2. Cassandra
Y, ¿qué es lo que hace? Además de Facebook, sitios como Reddit y Twitter también usan Cassandra para almacenar los datos de los usuarios de forma estructurada y distribuida. Se dice que Cassandra pertenece a una segunda generación de bases de datos, a un paradigma llamado NoSQL. Facebook hizo público el código de Cassandra al tiempo que lo entregó a la comunidad Apache en el 2008.

Facebook no podría escalar sin Cassandra.

3. Hive
Este es un proyecto auspiciado por la Fundación Apache. Entre sus varias funcionalidades destaca una fundamental para Facebook: el análisis de grandes conjuntos de datos sobre los cuales es posible inquirir, buscar información en ellos.

Facebook no podría ofrecer su servicio de búsqueda sin Hive.

4. Thrift
Podría decirse que Thrift es un kit de herramientas, uno especializado en la interoperabilidad de lenguajes de programación. A través de Thrift Facebook ha combinado el uso de lenguajes tan distintos entre sí como C++, Java, Python, PHP, Ruby, Haskell, y más, a lo largo de todos sus equipos de desarrollo.

Facebook no podría crear servicios de software a la velocidad que requiere sin la ayuda de Thrift.

5. Scribe
Lo que hace Scribe es muy sencillo: es un sistema de distribución y registro de mensajes en los servidores, tolerante a fallas y capaz de funcionar sobre una gran cantidad de equipos.

Facebook gestiona con mayor facilidad sus miles de servidores gracias a Scribe.

6. HipHop for PHP
Este es uno de mis favoritos. La parte visible de Facebook está escrita en su mayoría con lenguaje PHP, por lo que su desempeño es crítico para todo el sistema. Siendo un lenguaje interpretado tiene limitaciones de desempeño que los lenguajes compilados no tienen. HipHop for PHP es un transformador de código PHP en código C++, por lo que el resultado es un software de igual funcionalidad, pero optimizado para un alto desempeño. De hecho, Facebook afirma que gracias a HipHop for PHP usa hasta 50% menos CPU que antes.

Facebook sería más lento sin la ayuda de HipHop para PHP.

7. Tornado
Este es otro kit de herramientas de software, en este caso especializado en los servicios web escalables –es decir, los que crecen sin afectar el desempeño o las funciones del sistema–. En particular, es capaz de gestionar miles de conexiones web de forma simultánea y veloz. Está escrito en el lenguaje Python y su diseño está basado en el que tiene FriendFeed.

Facebook no podría “sentirse” en tiempo real sin Tornado.

Esta información fue recopilada de varias fuentes que están enlazados dentro del post.

Leave a Reply

Your email address will not be published.