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é.
- Facebook Science & Social Graph (Video)
- Escala en Facebook
- Arquitectura de chat de Facebook
- Blog de Facebook
- Facebook Cassandra Arquitectura y Diseño
- Notas de ingeniería de Facebook
- Quora - Arquitectura de Facebook
- Facebook para 600 millones de usuarios
- Hadoop y su uso en Facebook
- Erlang en Facebook: arquitectura de chat
- Caché de rendimiento de Facebook
- 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.
fuente
Respuestas:
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.
fuente
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
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.
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.
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.
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:
fuente
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.
fuente