design-patterns og:image - Arquitectura de Facebook




open graph (4)

Bueno, Facebook ha sufrido MUCHOS cambios y no fue diseñado originalmente 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ás mucha información al respecto (por razones obvias de seguridad y de derechos de autor), pero solo echa un vistazo a la API. Mire con qué frecuencia cambia y cuánto de eso no funciona correctamente, nunca más o en absoluto.

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

Pero si me preguntas, es una tarea muy ambiciosa y probablemente perdida en el 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 plenamente el lenguaje PHP. No está utilizando el último 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 muchas personas que están creando NUEVAS aplicaciones PHP.

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

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

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

Así que mientras codifiques tu aplicación PHP con la idea de que tendrá que escalar un día ... Entonces creo que estás bien y no estoy realmente seguro de que siquiera mire a Facebook y lo que hicieron porque cuando lo hicieron, era un mundo completamente diferente y ahora intentan 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 empezando de nuevo, puedes usar PHP 5.3. Recomiendo consultar los frameworks 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 consulte MongoDB y otros tipos de bases de datos sin esquema y orientadas a documentos. Son mucho más rápidos y mejores para el tipo más común de sitio web / aplicación.

Mire las 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 usando. Por más exitoso que sea Facebook, honestamente no los buscaría para "cómo" construir un sitio web / aplicación eficiente. No estoy diciendo que no tengan personas muy (muy) talentosas que trabajen allí que resuelvan sus problemas de forma creativa ... Tampoco estoy diciendo que Facebook no sea una gran idea en general y que no 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 de él.

He estado buscando artículos / información sobre la arquitectura en Facebook, los desafíos y las formas en que los abordan. Qué usan y por qué usan. ¿Cómo escalan y cuáles son las decisiones de diseño para lo que hacen, etc.? El apuntalamiento principal es aprender. Conocer los sitios que manejan un tráfico tan masivo da muchos consejos a los 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. Escalar 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. Facebook Connect Architecture

Tengo 2 enlaces más pero no puedo publicar debido a las restricciones en este sitio. Además, comparta si alguien tiene algo mejor (no necesita estar relacionado con Facebook solamente).

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


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

Creo que probablemente pueda aprender mucho del diseño de Facebook, del mismo modo que puede hacerlo desde el diseño de cualquier sistema de software grande exitoso. Sin embargo, me parece que no debes tener en cuenta el diseño actual de Facebook al diseñar nuevos sistemas.

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

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


Facebook está usando la estructura LAMP . Los servicios de fondo de Facebook están escritos en una variedad de lenguajes de programación diferentes, incluidos C ++, Java, Python y Erlang, y se utilizan 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 caché de memoria que se utiliza para acelerar los sitios web dinámicos basados ​​en bases de datos (como Facebook) mediante el almacenamiento en caché de datos y objetos en la memoria RAM para reducir el tiempo de lectura. Memcache es la forma principal de caché de Facebook y ayuda a aliviar la carga de la base de datos. Tener un sistema de almacenamiento en caché permite que Facebook sea tan rápido como para recuperar sus datos.

  2. Thrift (protocolo) : es un marco de llamada de procedimiento remoto liviano para el desarrollo de servicios escalables de idiomas cruzados. Thrift admite 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 código de script PHP y se creó para guardar los recursos del servidor. HipHop transforma el código fuente de PHP en C ++ optimizado. Después de hacer esto, usa g ++ para compilarlo en código de máquina.

Si entramos en más detalles, la respuesta a esta pregunta es más larga. 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 de Facebook
  5. Estructura de datos "me gusta" de Facebook

Utilizando Angular 2 (RC5) y rutas basadas en hash, hago esto:

const appRoutes: Routes = [
  ...
  {path: '_', redirectTo: '/facebookLoginSuccess'},
  ...
]

y

export const routing = RouterModule.forRoot(appRoutes, { useHash: true });

Según tengo entendido, el carácter = en la ruta se interpreta como parte de la definición de parámetros de ruta opcionales (consulte https://angular.io/docs/ts/latest/guide/router.html#!#optional-route-parameters ), por lo que no participa en el emparejamiento de rutas.





facebook design-patterns design architecture