De varias lecturas y conversaciones que tuve, mi comprensión de la arquitectura actual de Facebook es:
- Front-end web escrito en PHP. El compilador HipHop de Facebook [1] luego lo convierte a C ++ y lo compila usando g ++, proporcionando así una capa de ejecución de plantillas web y lógica de alto rendimiento.
- Debido a las limitaciones de depender completamente de la compilación estática, Facebook comenzó a trabajar en un intérprete HipHop [2], así como en una máquina virtual HipHop que traduce el código PHP a HipHop ByteCode [3].
- La lógica empresarial se expone como servicios que utilizan Thrift [4]. Algunos de estos servicios se implementan en PHP, C ++ o Java dependiendo de los requisitos del servicio (probablemente se usen otros lenguajes …)
- Los servicios implementados en Java no usan ningún servidor de aplicaciones empresariales habitual, sino que usan el servidor de aplicaciones personalizado de Facebook. Al principio, esto puede parecer una reinvención de la rueda, pero como estos servicios están expuestos y se consumen solo (o en su mayoría) usando Thrift, la sobrecarga de Tomcat, o incluso Jetty, probablemente fue demasiado alta sin un valor agregado significativo para su necesidad.
- La persistencia se realiza utilizando MySQL, Memcached [5], Hadoop’s HBase [6]. Memcached se usa como caché para MySQL y como caché de uso general.
- El procesamiento sin conexión se realiza con Hadoop y Hive.
- Los datos como el registro, los clics y los feeds transitan usando Scribe [7] y se agregan y almacenan en HDFS usando Scribe-HDFS [8], lo que permite un análisis extendido usando MapReduce
- BigPipe [9] es su tecnología personalizada para acelerar el procesamiento de páginas utilizando una lógica de canalización
- Caché de barniz [10] se utiliza para proxy HTTP. Lo han preferido por su alto rendimiento y eficiencia [11].
- El almacenamiento de miles de millones de fotos publicadas por los usuarios está a cargo de Haystack, una solución de almacenamiento ad-hoc desarrollada por Facebook que ofrece optimizaciones de bajo nivel y escrituras de solo agregado [12].
- Facebook Messages está utilizando su propia arquitectura que se basa notablemente en el fragmentación de infraestructura y la gestión dinámica de clústeres. La lógica empresarial y la persistencia se encapsulan en la llamada ‘Celda’. Cada celda maneja una parte de los usuarios; Se pueden agregar nuevas células a medida que crece la popularidad [13]. La persistencia se logra usando HBase [14].
- El motor de búsqueda de mensajes de Facebook está construido con un índice invertido almacenado en HBase [15]
- Los detalles de implementación del motor de búsqueda de Facebook son desconocidos hasta donde yo sé
- La búsqueda de typeahead utiliza una lógica de almacenamiento y recuperación personalizada [16]
- El chat se basa en un servidor Epoll desarrollado en Erlang y al que se accede mediante Thrift [17]
- Han creado un sistema automatizado que responde a las alertas de monitoreo mediante el lanzamiento del flujo de trabajo de reparación apropiado, o escalando a los humanos si no se puede superar la interrupción [18].
Sobre los recursos aprovisionados para cada uno de estos componentes, se conocen algunos datos y números:
- Se estima que Facebook posee más de 60,000 servidores [18]. Su reciente centro de datos en Prineville, Oregón, se basa en un hardware completamente auto diseñado [19] que se presentó recientemente como Open Compute Project [20].
- 300 TB de datos se almacenan en procesos Memcached [21]
- Su clúster Hadoop y Hive está compuesto por 3000 servidores con 8 núcleos, 32 GB de RAM, discos de 12 TB que son un total de 24k núcleos, 96 TB de RAM y 36 discos PB [22]
- 100 mil millones de visitas por día, 50 mil millones de fotos, 3 billones de objetos en caché, 130 TB de registros por día a partir de julio de 2010 [22]
[1] HipHop para PHP : http://developers.facebook.com/b…
[2] Haciendo HPHPi más rápido : http://www.facebook.com/note.php…
[3] La máquina virtual HipHop : http://www.facebook.com/note.php…
[4] Ahorro : http://thrift.apache.org/
[5] Memcached : http://memcached.org/
[6] HBase : http://hbase.apache.org/
[7] Escriba : https://github.com/facebook/scribe
[8] Scribe-HDFS : http://hadoopblog.blogspot.com/2…
[9] BigPipe : http://www.facebook.com/notes/fa…
[10] Caché de barniz : http://www.varnish-cache.org/
[11] Facebook apuesta por el barniz : http://www.varnish-software.com/…
[12] Aguja en un pajar : almacenamiento eficiente de miles de millones de fotos: http://www.facebook.com/note.php…
[13] Escalando el back-end de la aplicación de mensajes : http://www.facebook.com/note.php…
[14] La tecnología subyacente de los mensajes : https://www.facebook.com/note.ph…
[15] La tecnología subyacente de los mensajes Tech Talk : http://www.facebook.com/video/vi…
[16] Arquitectura de búsqueda de mecanografía de Facebook : http://www.facebook.com/video/vi…
[17] Chat de Facebook : http://www.facebook.com/note.php…
[18] ¿Quién tiene más servidores web? : http: //www.datacenterknowledge.c…
[19] Creación de centros de datos eficientes con el proyecto Open Compute : http://www.facebook.com/note.php…
[20] Proyecto de cómputo abierto : http://opencompute.org/
[21] Presentación de la arquitectura de Facebook en Devoxx 2010 : http://www.devoxx.com
[22] Escala de Facebook a 500 millones de usuarios y más : http://www.facebook.com/note.php…
- ¿Cuáles son sus principales desafíos como Project Manager en software o desarrollo web?
- ¿Cuáles son los mejores métodos de depuración de software?
- ¿Qué trabajo es más satisfactorio: Patwari a 18,000 / trabajo de software a 80,000?
- ¿Cómo se ve una buena solicitud de función (de un empleado no técnico)?
- ¿Cuáles son los software más famosos escritos en Haskell y por qué no hay más? Sé de xmonad y que Standard Chartered lo usó en la producción. ¿Hay otros?