
Facebook es una empresa gigante, es la red de redes sociales, un tinglado complejísimo que evoluciona, escala y sencillamente funciona. Más de 500 millones de personas usan y abusan de Facebook no sólo para participar de la red sino también para vivir en ella. El resultado es una inmensidad de operaciones de cómputo coordinadas por una plataforma de hardware y software igualmente compleja y gigantesca, todo un reto para los ingenieros de la empresa.
Ahora bien, a propósito de los 7 años que cumplió Facebook el pasado 4 de febrero, quiero ofrecerles una lista en la que enumero siete de las tecnologías de que sostienen su plataforma de software. El punto es valorar los esfuerzos de Facebook por entregar el mejor de los servicios, sobre todo en términos de disponibilidad, tiempo de respuesta y coherencia. Cada elemento de la lista es software de código libre y abierto y, salvo Linux y Hive, los demás son una creación de los empleados de Mark Zuckerberg.
Es cierto es que la infraestructura de Facebook es mucho, pero mucho más que sólo siete tecnologías de software, sin embargo me atrevo a decir que sin estas que pongo a continuación Facebook no podría ser quien es hoy en día.
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.
Imagen: Mapa de amistades en Facebook










genial
Si hubieran usado Grails, no hubieran necesitado tantas herramientas
Me gustaria conocer tus fuentes ya que me parece bastante extraña la información que entregas. Conociendo y habiendo trabajado con MySQL tengo serias dudas de qe sea capaz de manejar la cantidad de datos que reqiere Facebook, entre otras cosas. Ademas el articulo se limita a nombrar sin explicar cada tecnologia.
Amigo, recuerda que MySql es código libre y obviamente si Face los usa tranquilamente pueden tener una versión optimizada para sus necesidades.
@Alf: Bueno si necesitas saber la fuente, lo más sencillo es esto: http://developers.facebook.com/opensource/
sistemas distribuidos.. sin problemas amigo. en verdad trabajas con MySQL? jaja, y Cassandra (no BD relacional) para los demás datos.
muy incompleto el articulo.
porque…
Buen conjunto amigo. No conocía algunas herramientas mencionadas ahí.
Ni Linux es un sistema operativo (quizá quisite decir GNU/Linux, por ejemplo) ni PHP un “lenguaje de programación que automatiza la creación de páginas web”. Si fuese así, los que programan en PHP no tendrían trabajo.
Insisto:
Linux es un sistema operativo de cabo a rabo. GNU/Linux suele ser el apelativo para distribuciones de software como Fedora, Ubuntu, Debian, etc.
PHP automatiza porque es una lenguaje interpretado o de scripts, que en este caso no es sino un lenguaje que crea código HTML de forma programable: automática desde la perspectiva del desarrollador (recordemos que HTML no es un lenguaje de programación).
Espero haberme explicado mejor.
a lo que me refieria de que no entendi el punto 1 es a esto, es que conteste desde un dispositivo movil y el tema movil de alt1040 no me deja contestar a gusto…
bueno, es que no entiendo a que te refieres con:
“Linux es un sistema operativo de cabo a rabo. GNU/Linux suele ser el apelativo para distribuciones de software como Fedora, Ubuntu, Debian, etc.”
Por un lado, Linux si es un sistema operativo de cabo a rabo si nos vamos a la definicion de sistema operativo que implica solo el kernel. Ciertamente asi es con Linux. Por otro lado, si no es solo el kernel, sino nos atenemos al ‘concepto’ que se tiene de S.O. en un entorno Unix, este implica el resto de utilidades/herramientas que necesita el mismo S.O. (no solo el usuario) para interectuar con el usuario. Por otro lado podemos decir a secas Linux refiriendonos a lo mismo, y no veo problema en esto, salvo si vamos a discutir en tono flame y no creo que eso nos interese.
Por ultimo, dices que GNU/Linux es un apelativo para distribuciones, pero es donde menos entendi a que te refieres. Podria ser pero segun entiendo solo ciertas distribuciones utilizan el apelativo GNU/ en sus nombres, o mas bien te refieres a otra situacion? a que al ser una distro estas ya de por si necesita el software añadido para ser distros y por eso le agregan a Linux tanto GNU/ como el resto de software que le agregan? De nuevo, voy a lo mismo que conteste a Broad: si y no, debido a que aun asi el Kernel requiere al menos de la libreria C para trabajar, o mas bien el verdader software de usuario requiere a la libreria C para interactuar con el kernel…
saludos!
Hola, Javier. Me temo que en el fondo hablamos y pensamos en lo mismo, lo demás son sutilezas del lenguaje.
Como bien dices, sí y no, depende de la perspectiva.
¿GNU/Linux? se llama ¡LINUX! Stallman solo apoyo brindando una excelente licencia (GPLv2), Linus Tolvards a dejado muy en claro que no tiene nada que ver con la FSF
¿acaso si redactas un cuento en openoffice este se pasara a llamar openoffice/tucuento?
gnu hizo un montón de herramientas para el sistema operativo, tales como gcc, glibc, ncurses, bash, etc. por favor infórmate antes de opinar, y menos con ese tono.
Yo uso una versión pirata de GNU/Linux, llamada solamente Linux. El GNU es solo capricho de stallman para meter la nariz…
A ver, para los de “no es linux, sera GNU/linux” Pues no, no es para hacer la pelota, pero lo que ha puesto el redactor es CORRECTO porque: -Linux es el núcleo, y GNU lo que aporta es la interacción núcleo-usuario. El proyecto GNU es básicamente las herramientas (además de GNOME) -El SO sería por lo tanto la unión, es decir GNU/Linux…PERO hasta los especialistas usan el término Linux para nombrar ambos proyectos. Entra en cualquier foro de Linux y mira cómo lo denominan.
@Broad si y no. Gnu no solo es herramientas de usuario, también son las librerías C bajo las que cualquier software de usuario o sistema necesita para correr, el glibc , por lo tanto, ya que tanto apache como php como mysql necesitan una librería C, si seria correcto decir que es gnu/Linux. Aunque si nos vamos a referir solo al kernel si seria solo Linux, pero un kernel sin librería C no podría usarse directamente sin mas…
Pero por que pelear por el denominativo de el sistema operativo?
Si, de hecho el nombre total y correcto es GNU/Linux, los usuarios, los bloggeros, y los expertos lo abrevian como Linux y esto no supone una falta de respeto ni a la comunidad gnu, ni a linux (como kernel y desarrolladores).
Vamos! todos decimos windows y no microsoft windows, mac y no apple OSX, solaris y no oracle solaris.
El pelear por un denominativo es mas una acto desesperado de obtener atencion que una correcion neutral, clara y seria.
El post esta bien, realmente no le hacia falta nada.
comparto tu opinion, yo solo le contestaba a Broad sobre lo que dice acerca de que GNU solo es un conjunto de herramientas de usuario, haciendo alusion a la libreria de C…
Y… algunos nunca pierden el gustito por las discusiones Bizantinas…
Genial la información.
muy interesante la nota. Por cierto, para aquellos que piden mas profundidad en cada tecnologia, pues a googlear, es que no todo se lo pueden dar molidito caramba
@Alan no entendí tu punto 1
¿Nada? Puedo intentar otra explicación si me ayudas siendo más preciso. Gracias de antemano.
Eso de pelear por llamarlo GNU/Linux o Linux es una verdadera tonteria… simplemente Linux esta bien o cualquiera de los dos
Es como si mac OSX se llamara match/darwin/cocoa o algo asi…. q tonteria!!!
Yo le digo linux, así sea debian, fedora, suse, para mi es linux y ya, sin pedos.
Alguien sabe que distribución Linux es la que utilizan para sus servidores? Debian, Slackware, Red Hat???
Por que los nerds serán tan pleitistos? con sus palabras rimbombantes y sus tecnicismos… jajaja
Buen post dude!