Recientemente he visto la película “La red social” que cuenta la historia del inicio de Facebook, la aplicación más usada del mundo. Aparte de los aspectos cinematográficos de la película, verla me ha hecho pensar en lo que hay de detrás de ella y es que como arquitecto TI, una de las cosas que más me sorprende y admira en el campo de las aplicaciones web, es la increíble capacidad de facebook para soportar más de 600 millones de usuarios.
Más que escalabilidad, parece que lo de Facebook es elasticidad infinita. En una aplicación web normal de un banco o de una tienda de internet, tenemos que emplearnos al máximo en el diseño técnico y la implementación de la aplicación si queremos soportar unos pocos miles de usuarios. ¿cómo es posible?
Obviamente no es lo mismo una web de un banco, donde se realizan transacciones financiera (con todo lo que ello conlleva en cuanto a fiabilidad y robusted del monitor transaccional) que una aplicación que se dedica a publicar mensajes y fotos de nuestros amigos. Sin embargo, Facebook tiene fama de que no se cae, que está a prueba de bomba. Ademas se han ido incluyendo varias funcionalidades, como el uso del dinero interno (créditos Facebook), comercio electrónico, etc. etc. que la alejan cada vez más de una “pagina tonta para compartir fotos”

¿En qué se basa Facebook para conseguir esta fabulosa capacidad?
  • Linux y compañía. El sistema operativo Linux empezó siendo un “experimento” que abanderaron los defensores del software libre. Sin embargo, en realidad y por irónico que resulte, son las grandes empresas como IBM las que lo mantienen y desarrollan en su mayor medida. Alrrededor de éste han ido surgiendo las herramientas necesarias para hacer realidad una aplicación en internet
    • El servidor web Apache
    • MySQL, una base de datos libre de futuro un poco incierto desde la adquisición de Sun Microsystems por parte de Oracle
    • PHP, lenguaje de programación sencillo que facilita el construir páginas web dinámicas con acceso a base de datos
  • Memcaché. Es una memoria distribuida de muy alto rendimiento. En Facebook se usa para aliviar la carga de la base de datos, que de otra manera no podría servir tantas peticiones de sus millones de usuarios. Las aplicaciones la usan como una gran tabla hash, a la que pedir la información buscada antes de acudir a la base de datos
  • Cassandra. Uno de los máximos exponentes del movimiento NoSQL (ver esta entrada en este blog). Esta claro que una base de datos relacional no escala lo suficiente para atender a millones de clientes y empresas como Twitter, Amazon, Google, etc. implantan sus soluciones al margen de este tipo de software.
  • Hive. Un proyecto de código abierto de Apache que sirve para analizar grandes cantidades de datos. Con este software es posible saber qué amigos tienes en Facebook, clasificarlos por su lugar de residencia, que amigos en común tienes con tal y cual y en definitiva lograr esa “magia” social de Facebook.
  • Thrift: herramienta que permite la interoperabilidad entre diferentes lenguajes. De esta manera se pueden combinar programas hechos en C++, Java, PHP, etc.
  • Scribe. Es una herramienta para agregar todos los logs de los miles de servidores de los que dispone Facebook. Está diseñado para ser escalable, robusto y tolerante a fallos. ()
  • HipHop for PHP. Es un compilador muy optimizado que traduce un sitio web programador en PHP a C++. De esta manera se logra el rendimiento de éste último, con la facilidad de uso del PHP, y sin los inconvenientes de programar directamente en C++ (como los famosos punteros que suelen jugar malas pasadas)
  • Tornado. Está escrito en lenguaje Python. Es un framework de desarrollo web orientando al mayor de rendimiento. Las peticiones que se hacen al sitio web son no bloqueantes. Puede soportar cientos de peticiones simultáneas por lo que es ideal para funcionalidades de tiempo real.

Sin duda, Facebook es una de los mayores centros de innovación en el software en el mundo. Y es que no es fácil poder cumplir con sus requisitos no funcionales. No debemos perderlo de vista, tal vez podamos aplicar sus experiencias en nuestros desarrollos más pronto que tarde.

Comparte esta entrada…

Share