Arquitectura de Facebook [cerrado]

169

He estado buscando artículos / información sobre la arquitectura en Facebook, los desafíos y las formas en que los abordan. Lo que usan y por qué lo usan. Cómo escalan y cuáles son las decisiones de diseño para lo que hacen, etc. El principal apuntalamiento es aprender. Conocer los sitios que manejan ese tráfico masivo ofrece muchos consejos para arquitectos, etc., para tener en cuenta ciertas cosas al diseñar nuevos sitios. Estoy compartiendo lo que encontré.

  1. Facebook Science & Social Graph (Video)
  2. Escala en Facebook
  3. Arquitectura de chat de Facebook
  4. Blog de Facebook
  5. Facebook Cassandra Arquitectura y Diseño
  6. Notas de ingeniería de Facebook
  7. Quora - Arquitectura de Facebook
  8. Facebook para 600 millones de usuarios
  9. Hadoop y su uso en Facebook
  10. Erlang en Facebook: arquitectura de chat
  11. Caché de rendimiento de Facebook
  12. Arquitectura de Facebook Connect

Tengo 2 enlaces más pero no puedo publicar debido a restricciones en este sitio. Además, comparta si alguien tiene algo mejor (no es necesario que esté relacionado solo con Facebook).

PD: no pude encontrar buenos lugares para compartir esta investigación, de ahí esta iniciativa. Espero que esto ayude a alguien.

Srikar Appalaraju
fuente
2
2. Escala en Facebook (Video) - infoq.com/presentations/Scale-at-Facebook 3. Chat de Facebook - infoq.com/news/2008/05/facebookchatarchitecture
Srikar Appalaraju
2
También highscalability.com parece ser un gran lugar para aprender sobre arquitecturas para muchos sitios populares. No tengo idea de cuánto de esto es cierto y cuánto especulativo, pero está ahí afuera y es algo para comer ...
Srikar Appalaraju
1
El blog de ingeniería de Facebook ocasionalmente tiene importantes conocimientos sobre su arquitectura y desafíos de escala.
Colin Pickard el
Dado que técnicamente no es una pregunta real, le recomendamos que mueva la información al wiki de la etiqueta FB para preservar la información allí en caso de que esta pregunta se elimine. Gracias.
Gordon
@Gordon, ¿cómo agregar la etiqueta FB Wiki? ¿No está ya la etiqueta 'Facebook'? ¿Eso no es suficiente?
Srikar Appalaraju

Respuestas:

33

Bueno, Facebook ha sufrido MUCHOS cambios y originalmente no fue diseñado para ser eficiente. Fue diseñado para hacer su trabajo. No tengo ni idea de cómo se ve el código y probablemente no encontrará mucha información al respecto (por razones obvias de seguridad y derechos de autor), pero solo eche un vistazo a la API. Mire con qué frecuencia cambia y cuánto de eso ya no funciona correctamente o no funciona.

Creo que el mayor as bajo la manga es el Hiphop. http://developers.facebook.com/blog/post/358 Puede usar HipHop usted mismo: https://github.com/facebook/hiphop-php/wiki

Pero si me preguntas, es una tarea muy ambiciosa y que probablemente desperdicie tiempo. Hiphop solo admite mucho, no puede simplemente convertir todo a C ++. ¿Entonces qué nos dice esto? Bueno, nos dice que Facebook NO está aprovechando completamente el lenguaje PHP. No está utilizando la última versión 5.3 y estoy dispuesto a apostar que todavía hay mucho que es compatible con PHP 4. De lo contrario, no podrían usar HipHop. HipHop ES UNA BUENA IDEA y necesita crecer y expandirse, pero en su estado actual no es realmente útil para tantas personas que están creando NUEVAS aplicaciones PHP.

También hay PHP a JAVA a través de cosas como Resin / Quercus. De nuevo, no es compatible con todo ...

Otra cosa a tener en cuenta es que si usa un módulo PHP no estándar, tampoco podrá convertir ese código a C ++ o Java. Sin embargo ... Echemos un vistazo a los módulos PHP. Están compilados en C ++. Entonces, si puede construir módulos PHP que hagan cosas (como analizar XML, etc.), entonces básicamente está (menos alguna interacción) trabajando a la misma velocidad. Por supuesto, no puede simplemente crear un módulo PHP para cada necesidad posible y toda su aplicación porque tendría que volver a compilar y sería mucho más difícil de codificar, etc.

Sin embargo ... Hay algunos módulos PHP útiles que pueden ayudar con problemas de velocidad. Aunque al final del día, tenemos esta cosa increíble conocida como "la nube" y con ella, podemos escalar nuestras aplicaciones (PHP incluido) para que ya no importe tanto. El hardware se está volviendo cada vez más barato. Amazon acaba de bajar sus precios (nuevamente) hablando.

Entonces, siempre que codifique su aplicación PHP con la idea de que necesitará escalar un día ... Entonces creo que está bien y no estoy realmente seguro de siquiera mirar Facebook y lo que hicieron porque cuando lo hicieron, era un mundo completamente diferente y ahora intenta mantener esa infraestructura y mantenerla ... Bueno, obtienes cosas como HipHop.

Ahora, ¿cómo te va a ayudar HipHop? No lo hará. No puede Estás comenzando de nuevo, puedes usar PHP 5.3. Recomiendo encarecidamente examinar los marcos PHP 5.3 y todos los nuevos beneficios que PHP 5.3 trae a la mesa junto con las bibliotecas SPL y también pensar en su base de datos. Lo más probable es que esté sirviendo contenido de una base de datos, así que revise MongoDB y otros tipos de bases de datos sin esquemas y orientados a documentos. Son mucho más rápidos y mejores para el tipo de sitio web / aplicación más "común".

Mire NUEVAS compañías como Foursquare y Smugmug y algunas otras compañías que están utilizando NUEVA tecnología y CÓMO la están utilizando. Por más exitoso que sea Facebook, honestamente no los vería "cómo" construir un sitio web / aplicación eficiente. No digo que no tengan personas muy (muy) talentosas que trabajen allí que resuelvan (sus) problemas de manera creativa ... Tampoco digo que Facebook no sea una gran idea en general y que no lo sea. exitoso y que no deberías obtener ideas de él ... Solo digo que si pudieras ver su código fuente completo, probablemente no te beneficiarías.

Tom
fuente
1
acordado en la mayoría de lo que dijiste. Esos enlaces son solo por curiosidad. A veces miras una pieza de tecnología y dices "¡hey!
Eso
Revisando al azar mi respuesta aquí dos cosas. # 1, creo que C y no C ++ es mi problema técnico ... Pero lo más importante es que # 2, Phalcon es un marco PHP más nuevo que convierte mucho la extensión PHP en velocidad. Aunque gran parte de su propio código no se ejecutará en C, por supuesto, y cualquier otra biblioteca que use probablemente tampoco. Sin embargo, es una idea inteligente, como HipHop, exprimir un poco de rendimiento adicional.
Tom
... y aquí vamos de nuevo con ese as bajo la manga. Mirando hacia atrás años más tarde tenemos este lenguaje Hack (nacido del material HipHop con su propio IDE, nada menos). ¿Ha crecido para ser algo mejor? Ya veremos. ¿Te puede ayudar? Tal vez, pero ahora parece que usted también podrá construir como Facebook. Solo tomó unos 4 años =) Aunque personalmente, no sería tan rápido para beber el kool-aid.
Tom
1
Mirando la respuesta ahora, estoy sorprendido de cómo resultan las cosas en el mundo tecnológico. HipHop no solo era compatible con las últimas versiones de PHP, sino que también desarrolló HHVM, que es aún más rápido.
Gopi Krishna
Sí, a veces recibo notificaciones que me devuelven a esto. Es realmente asombroso ver cómo las cosas han cambiado y cómo HipHop evolucionó a HHVM (y probablemente cómo Facebook se reinventa a sí mismo debajo de las cubiertas), mira todos los increíbles avances de JS que también están haciendo. Tiene sentido para mí. Si tiene una empresa tremendamente exitosa con toneladas de dinero y empleados ... ¿Por qué no reinvertir en I + D en algún momento, verdad?
Tom
18

Facebook está utilizando la estructura LAMP . Los servicios de back-end de Facebook están escritos en una variedad de lenguajes de programación diferentes, incluidos C ++, Java, Python y Erlang, y se usan según los requisitos. Con LAMP, Facebook utiliza algunas tecnologías para admitir una gran cantidad de solicitudes, como

  1. Memcache : es un sistema de almacenamiento en memoria caché que se utiliza para acelerar sitios web dinámicos basados ​​en bases de datos (como Facebook) almacenando datos y objetos en la memoria RAM para reducir el tiempo de lectura. Memcache es la forma principal de almacenamiento en caché de Facebook y ayuda a aliviar la carga de la base de datos. Tener un sistema de almacenamiento en caché le permite a Facebook ser tan rápido como recuperar sus datos.

  2. Thrift (protocolo) : es un marco de llamadas de procedimiento remoto liviano para el desarrollo escalable de servicios en varios idiomas. Thrift es compatible con C ++, PHP, Python, Perl, Java, Ruby, Erlang y otros.

  3. Cassandra (base de datos) : es un sistema de administración de bases de datos diseñado para manejar grandes cantidades de datos distribuidos en muchos servidores.

  4. HipHop para PHP : es un transformador de código fuente para el código de script PHP y fue creado para ahorrar recursos del servidor. HipHop transforma el código fuente PHP en C ++ optimizado. Después de hacer esto, usa g ++ para compilarlo en código máquina.

Si entramos en más detalles, la respuesta a esta pregunta irá más tiempo. Podemos entender más de las siguientes publicaciones:

  1. ¿Cómo funciona Facebook?
  2. Gestión de datos, estilo Facebook
  3. Diseño de base de datos de Facebook?
  4. Estructura de la base de datos del muro de Facebook
  5. Estructura de datos de "me gusta" de Facebook
Somnath Muluk
fuente
7

"Conocer los sitios que manejan ese tráfico masivo ofrece muchos consejos para arquitectos, etc. para tener en cuenta ciertas cosas al diseñar nuevos sitios"

Creo que probablemente puedas aprender mucho del diseño de Facebook, al igual que del diseño de cualquier sistema de software grande exitoso. Sin embargo, me parece que se debe no mantener el diseño actual de Facebook en cuenta en el diseño de nuevos sistemas.

¿Por qué quieres poder manejar el tráfico que Facebook tiene que manejar? Lo más probable es que nunca tenga que hacerlo, sin importar cuán talentoso sea un programador. Facebook en sí no fue diseñado desde el principio para una escalabilidad tan grande, que es quizás la lección más importante para aprender de ella.

Si desea obtener información sobre un sistema de software no trivial, le puedo recomendar el libro "Disección de una aplicación C #" sobre el desarrollo del IDE SharpDevelop. Está agotado, pero está disponible de forma gratuita en línea . El libro le permite echar un vistazo a una aplicación real y proporciona información sobre IDE que son útiles para un programador.

Jørgen Fogh
fuente
1
sí, probablemente no mucha gente necesite lidiar con un tráfico tan pesado. pero siempre es bueno entender la escalabilidad y cómo una gran empresa como Facebook trata con un tráfico tan pesado. Puede haber algunos buenos méritos de diseño que se pueden aprender de :)
trillones
@nanshi: Estoy de acuerdo en que es útil aprender. Mi punto es que debes tener en cuenta para qué estás diseñando. Diseñar para la escalabilidad desde el primer día hace que sea más difícil cambiar lo que hace el programa. En la mayoría de las situaciones, la simplicidad es más importante. Además, Facebook es mantenido por muchas personas. Cada una de esas personas solo tiene que ser un experto en parte del sistema.
Jørgen Fogh
entiendo tu argumento. de acuerdo :)
billones de