Navegando por Quora encontré una fantástica explicación de cómo está programado y cómo funciona Facebook por dentro gracias a Chris Scholz, un Ingeniero de Sistemas que trabaja para Facebook:
Voy a ser bastante general, porque muchos detalles son información reservada. Aunque bastantes otros detalles no lo son.
El front end de Facebook se entrega principalmente a través de PHP (con cientos de bibliotecas personalizadas), que se ejecuta en algo similar o igual a HipHop para PHP (HHVM), un sistema de compilación de PHP que rivaliza la capacidad de C++ nativo de ejecutar código de forma rápida y ahorra algunos ciclos de CPU para cada solicitud en comparación con intérpretes por lotes. HHVM está desarrollado por Facebook y es de código abierto. Puedes descargarlo y jugar con él (aunque el código que descargues será detrás de unas pocas iteraciones detrás de lo que realmente estamos utilizando ahora mismo). También hay algo de HTML5 y JavaScript en el front end para que puedas interactuar con el sitio constantemente sin tener que volver a cargar la página.
Todo lo que he dicho hasta ahora es información pública, y se puede entender después de unas horas de búsqueda web o con Botón derecho -> Ver código.
También hay una infraestructura muy compleja compuesto por decenas de centros de datos y muchos miles de servidores. Hay sistemas de servidores web, sistemas de bases de datos de usuarios, sistemas que manejan consultas de Graph Search, sistemas que manejan la publicación de anuncios, etc. Hay incluso sistemas creados específicamente sólo para almacenar imágenes y videos. Haciendo un rápido cálculo usando el número de usuarios y unos valores muy conservadores para la cantidad de imágenes que se pueden subir al mes en promedio y el tamańo de una imagen típica, podemos obtener cerca de alrededor de un Petabyte de datos al mes. Las cifras exactas son probablemente restringidas por el NDA, pero cualquier persona con dos dedos de frente puede imaginarse mil millones de usuarios subiendo un montón de fotos, y eso significa una gran cantidad de almacenamiento. El actual número disponible al público es de 100 Petabytes. Hay incluso sistemas dedicados a la erradicación de datos cuando un usuario elimina una cuenta o tenemos que destruir los datos en un dispositivo antes de que pueda salir de nuestras instalaciones (NADA sale de Facebook sin ser borrado o destruido físicamente, incluso si es para un distribuidor (el “contrato social” de privacidad que tenemos con nuestros usuarios es sagrado!) .
Facebook cuenta con almacenamiento de datos único y tiene problemas de acceso que nadie más en el mundo tiene. Por lo tanto, tenemos sistemas de nadie más en el mundo tiene, y nadie más en el mundo debería estar al tanto de cómo funcionan a menos que trabajen en ellos.
Dicho esto, diseñamos un montón de nuestro propio hardware (véase el Open Compute Project, iniciado por FB) para ser lo más eficiente y rentable posible. Utilizamos balanceadores de carga para asegurarnos de que las máquinas que están libres asuman más carga. Si el equipo se cae, se pone un repuesto (parecido a Amazon Cloud Services, pero nosotros siendo la nube, y no utilizamos apestosas virtualizaciones).
Todas estas máquinas deben ser mantenidas físicamente (tenemos un equipo de operaciones increíble en el sitio que reemplaza partes y soluciona problemas básicos de los sistemas – cualquiera de estas personas probablemente podría ser un administrador de sistemas en una compañía más pequeña o de menor complejidad), también requieren aprovisionamientos e infraestructura muy complejos para mantener y montar nuevos servidores, sistemas para remediar automáticamente problemas de software y cualquier problema de hardware que podrían ser remediados con una combinación de métodos. Mi equipo se encarga principalmente de la automatización a gran escala y del mantenimiento y aprovisionamiento de la flota.
La infraestructura de Facebook podría ser objeto de toda una serie de libros.
En cuanto a el “cómo” todo está construido desde cero? Bueno, es probable que inicialmente funcionó en una torre de ordenador en el dormitorio de Zuck por un tiempo, hasta que eso no fue suficiente. Además de algunas otras torres, se pusieron en línea en algún centro de datos. Entonces eso no fue suficiente. Entonces creamos nuestros propios centros de datos. Y todavía estamos construyendo más – acabamos de realizar un centro de datos que es una obra de arte en Lulea, y en Suecia tenemos otro sitio del tamaño de unos pocos campos de fútbol. Todos los sistemas de apoyo para manejar la escala se han construido a lo largo del tiempo por personas con mucho talento. Un gran número de estos problemas se tratan ad hoc , lo que quiere decir que no sabemos cómo hacerlo hasta que el problema se presenta y necesita ser arreglado (a menudo tan rápido como sea posible). Creamos cosas nuevas estimando cuales pueden ser los problemas potenciales y tratamos de construir sistemas y manejarlos antes de que impacte nada. Sin embargo, otros problemas surgen siempre en un sistema de este complejo. Recuerda, nadie ha hecho esto antes. Lo que nos diferencia es la rapidez con que podemos lidiar con los problemas y evitarlos en el futuro.
Como empresa, Facebook no dicta que se utilice cualquier lengua específica. A mucha gente le gusta Python, por lo que una gran cantidad de herramientas internas están escritas en Python. Un montón de gente (como yo), usa Bash, por lo que una gran cantidad del código de Facebook está escrito en Bash. Ha habido preguntas en Quora en el pasado acerca de por qué seguimos usando PHP cuando podríamos estar usando algo más fuerte, mejor, más rápido… El front-end PHP se encuentra ahora en un punto en que es un mal necesario. Hay millones de líneas de código PHP profundo y empezar de nuevo ahora sería un esfuerzo enorme para una mínima o ninguna recompensa. De hecho, ya se nos está acabando el más avanzado sistema de tiempo de ejecución compilar PHP en el mundo, (aunque no es un experto) diría que probablemente perderíamos rendimiento al cambiar a otra cosa. Muchas herramientas de back-end están escritas en C, C++, D, Java, Perl, etc…
Como empresa nos centramos en hacer efecto, no en seguir el dogma. Si tienes una idea que hará que la empresa sea mejor, de alguna manera, y escoges un lenguaje basándote en tu habilidad o sus características y requisitos de aplicación, va a ser aceptada en el redil, siempre y cuando se trabaja con lo que ya está ahí y no rompe nada. El repositorio es un poco como el Colectivo Borg – vamos a tomar algo mientras se hace el trabajo correctamente, de forma rápida, segura y que tenga el mayor impacto para la empresa (y en última instancia, la comunidad maravillosa que utiliza el servicio).
No hay una persona que sabe “cómo funciona todo” – hay un montón de gente que sabe cómo funciona su caja negra , lo que las entradas y salidas son, y cómo construir alrededor de las cajas negras. Se necesita mucha comunicación abierta y el trabajo en equipo para construir algo como esto desde el principio. Conseguir un nuevo Facebook – como es – de la tierra de una sola vez sería casi imposible, a un costo de miles de millones de dólares. Algo como esto tiene que evolucionar orgánicamente.
Eso es lo más cercano a una respuesta que te puedo dar por dos razones:
- La pregunta es demasiado general
- Mucho de esto está protegido por el acuerdo interno de confidencialidad
Mucha de esta información ya está disponible en Internet. Echa un vistazo a Facebook – Sala de Prensa para información más específica. También hay blogs de ingeniería y TechTalks que puedes encontrar con algunas simples búsquedas en la web.
Fuente: https://www.quora.com/How-is-a-Facebook-like-site-actually-created-from-scratch
No comments yet