Cómo hacer un sitio web como Facebook, como es ahora

Voy a ser bastante general, porque gran parte del “cómo” es propietario. Sin embargo, mucho de eso no lo es.

El front-end de Facebook se entrega principalmente a través de PHP (usando cientos de bibliotecas personalizadas), ejecutándose en algo similar o igual a HipHop para PHP (HHVM), un sistema de compilación de PHP que rivaliza con la capacidad nativa de C [++] para ejecutar código rápidamente y nos ahorra algunos ciclos de CPU para cada solicitud en comparación con los intérpretes de stock. HHVM es desarrollado por Facebook y es de código abierto. Puede descargarlo usted mismo y jugar con él (aunque claramente estará algunas iteraciones detrás de lo que realmente estamos usando). También hay algunos sofisticados HTML5 y JavaScript en el front-end para permitirle interactuar con el sitio sin tener que publicar y volver a cargar constantemente.

Todo lo que he dicho hasta ahora es información pública, y puede averiguarlo después de unas horas de búsqueda en la web o con un clic derecho -> Ver código fuente

También hay una infraestructura muy compleja compuesta por docenas de centros de datos y muchos miles de servidores. Existen sistemas de servidores web, sistemas de bases de datos de usuarios, sistemas que manejan consultas de búsqueda de gráficos, sistemas que manejan la entrega de anuncios, etc. Incluso hay sistemas creados específicamente para almacenar imágenes y videos. Un cálculo rápido usando el número de usuarios y valores bastante conservadores para cuántas imágenes pueden cargar por mes en promedio, y qué tan grande es una imagen típica, puede acercarte a una estimación de alrededor de un petabyte de datos al mes. Las cifras exactas probablemente estén protegidas por la NDA, pero cualquier persona con medio cerebro puede darse cuenta de que mil millones de usuarios cargan muchas fotos, y eso significa mucho almacenamiento. El número actual disponible públicamente es de 100 petabytes. Incluso hay sistemas dedicados a erradicar datos cuando un usuario elimina una cuenta o necesitamos destruir datos en un dispositivo antes de que salga de nuestras instalaciones (NADA sale de Facebook sin ser borrado o destruido físicamente, incluso si se trata de un proveedor) ¡El “contrato social” de privacidad que tenemos con nuestros usuarios es sagrado!).

Facebook tiene problemas únicos de acceso y almacenamiento de datos que nadie más en el mundo tiene. Como tal, tenemos sistemas que nadie más en el mundo tiene, y nadie más en el mundo debería saber cómo funcionan a menos que estén trabajando en ellos.

Dicho esto, diseñamos una gran cantidad de nuestro propio hardware (consulte el Proyecto Open Compute, iniciado por FB) para que sea lo más eficiente y rentable posible. Usamos equilibradores de carga para asegurarnos de que las máquinas que son libres tengan más carga. Si una máquina se cae, se genera un repuesto (piense en Amazon Cloud Services, pero somos la nube y no utilizamos ninguna virtualización apestosa).

Todas esas máquinas necesitan mantenimiento físico (contamos con un increíble equipo de técnicos de operaciones de sitio que reemplazan piezas y solucionan problemas básicos de los sistemas; cualquiera de estas personas probablemente podría ser un administrador de sistemas en una empresa de menor escala o complejidad), y También requieren una infraestructura de aprovisionamiento y mantenimiento muy compleja para abrir nuevas cajas, sistemas para remediar automáticamente los problemas de software y cualquier problema de hardware que pueda solucionarse con una combinación de métodos dentro y fuera de banda. Mi equipo maneja principalmente la automatización a gran escala del mantenimiento y aprovisionamiento de la flota.

La infraestructura de Facebook podría ser el tema de toda una serie de libros.

En cuanto a “cómo” todo está construido desde cero? Bueno, probablemente funcionó en una caja en el dormitorio de Zuck por un tiempo, hasta que eso no fue suficiente. Luego se pusieron en línea algunas cajas más en algún centro de datos. Entonces eso no fue suficiente. Luego construimos nuestros propios centros de datos. Y todavía estamos construyendo más: acabamos de convertir un DC de última generación en Lulea, Suecia, en un sitio del tamaño de unos pocos campos de fútbol. Todos los sistemas de soporte para manejar el escalado han sido construidos en el camino por las personas más talentosas con las que he tenido el placer de trabajar. Una gran cantidad de estos problemas se tratan de manera ad hoc, es decir, no sabemos cómo hacerlo hasta que el problema se presente y necesite solucionarse (a menudo lo más rápido posible). Entramos en todo lo nuevo entendiendo los problemas potenciales e intentamos construir sistemas para manejarlos antes de que afecten a algo. Sin embargo, siempre surgen nuevos en un sistema tan complejo. Recuerde, nadie ha hecho esto antes. Lo que nos distingue es qué tan rápido podemos tratar con ellos y evitarlos en el futuro.

Como empresa, Facebook no dicta que se use un lenguaje específico. A mucha gente le gusta Python, por lo que muchas herramientas internas están escritas en Python. A mucha gente (como yo) le gusta Bash, por lo que mucho está escrito en Bash. En el pasado, ha habido preguntas sobre Quora sobre por qué todavía usamos PHP cuando podríamos estar usando algo más difícil, mejor, más rápido, más fuerte … El front-end de PHP ahora está en un punto donde es un mal necesario. Somos millones de líneas de código PHP de profundidad y comenzar de nuevo ahora sería un esfuerzo masivo para una recompensa mínima, si la hubiera. De hecho, debido a que estamos ejecutando el sistema de compilación de PHP en tiempo de ejecución más avanzado del mundo, yo (aunque no soy un experto) diría que probablemente perderíamos el rendimiento al cambiar a otra cosa. Muchas herramientas de back-end están escritas en C, C ++, D, Java, Perl, etc. Como empresa, nos enfocamos en generar impacto, no en seguir el dogma. Si tiene una idea que mejorará la empresa de alguna manera, y elige un idioma basado en su habilidad o sus características y requisitos de aplicación, será aceptado en el redil siempre que funcione con lo que ya existe y no No rompas nada. Nuestro repositorio es un poco como el Borg Collective: tomaremos cualquier cosa siempre que haga el trabajo de manera adecuada, rápida, segura y tenga el mayor impacto para la empresa (y, en última instancia, la maravillosa comunidad que utiliza el servicio).

No hay una persona que sepa “cómo funciona todo”: hay muchas personas que saben cómo funciona su caja negra, cuáles son sus entradas y salidas, y cómo construir alrededor de las cajas negras de todos los demás. Se necesita mucha comunicación abierta y trabajo en equipo para construir algo como Facebook desde cero. Conseguir un nuevo Facebook, tal como está, desde el principio sería casi imposible y costaría miles de millones de dólares. Algo como esto tiene que evolucionar orgánicamente.

Eso es lo más cercano a una respuesta que puedo darle por dos razones: 1) su pregunta era demasiado general: especifique lo que desea saber y 2) Mucho de esto está cubierto por el Acuerdo de confidencialidad y simplemente no puede ser discutido MUCHA información ya está disponible en Internet. Echa un vistazo a Facebook Newsroom para obtener más detalles. También hay blogs de ingeniería y charlas tecnológicas disponibles con algunas búsquedas simples en la web.

Sí, tienes conocimiento de que fb se escribió por primera vez en php. Pero a partir de su no php, al menos no solo php. Hay demasiadas funcionalidades que php no puede hacer. Como notificaciones en tiempo real, chat, etc. Necesita saber acerca de websockets, ajax, nodejs, etc.

Si quieres crear un sitio web como ese, primero haz una imagen clara de lo diferente que harás. Y ven a mí, puedo unirte a ti en ese proyecto. Pero, no solo yo, necesitaremos muchas otras personas con nosotros. Como donde está ahora el fb, tomaría al menos medio año de la edad de fb. Y para entonces fb estará más avanzado.

Pero si realmente tienes una idea única, entonces estoy aquí para trabajar contigo.

Sí, puedes hacer un sitio básico similar. Pero ese nivel de perfección es difícil. De todos modos, no hay nada malo en probarlo, ya que aprenderá mucho.