La velocidad del sitio web de Facebook es una de las tareas más críticas de la empresa. En 2009, triplicamos con éxito la velocidad del sitio web de Facebook. Y son algunas innovaciones clave de nuestro equipo de ingenieros las que lo hacen posible. En este artículo, les presentaré una de nuestras salsas secretas, la gran tecnología subyacente que llamamos BigPipe .
BigPipe es un sistema de servicios web dinámico básico rediseñado. La idea general es dividir las páginas web en pequeñas partes llamadas Pagelets y luego crear canalizaciones a través de servidores web y navegadores para gestionar su ejecución en diferentes etapas. Esto es similar al proceso de ejecución canalizada de la mayoría de los microprocesadores modernos: múltiples canalizaciones de instrucciones pasan a través de diferentes unidades de ejecución del procesador para lograr un rendimiento óptimo. Aunque BigPipe es un rediseño del proceso de infraestructura de red de servicios existente, no requiere cambios en los navegadores o servidores web existentes y se implementa completamente utilizando PHP y JavaScript.
motivación
Para comprender mejor BigPipe, debemos echar un vistazo al sistema de servicios web dinámico existente. Su historia se remonta a los primeros días de la World Wide Web, pero ahora no ha cambiado mucho en comparación con los primeros días. Los sitios web modernos tienen efectos mucho más dinámicos e interactividad que hace 10 años, pero los sistemas de servicios web tradicionales no han podido durante mucho tiempo mantenerse al día con los requisitos actuales de velocidad de Internet. En el modelo tradicional, el ciclo de vida de una solicitud de usuario es el siguiente:
El modelo tradicional es muy ineficiente en los sitios web modernos porque las secuencias de operación de muchos sistemas no pueden superponerse entre sí. La comunidad en línea ha adoptado ampliamente algunas técnicas de optimización, como la carga retrasada de JavaScript y la descarga paralela, para superar algunas de las limitaciones. Sin embargo, estas optimizaciones rara vez abordan el cuello de botella causado por el orden de ejecución del servidor web y el navegador. Mientras el servidor web está ocupado generando una página, el navegador está inactivo y desperdicia sus ciclos sin hacer nada. Cuando el servidor web termina de generar la página y la envía al navegador, el navegador se convierte en un cuello de botella en el rendimiento y el servidor web no puede ayudar. Al superponer el tiempo de generación del servidor web y el tiempo de representación del navegador, no solo podemos reducir el retraso final, sino también permitir que la página web muestre el área visible para el usuario antes, reduciendo así en gran medida la percepción del retraso por parte del usuario.
Esto es especialmente útil para sitios ricos en contenido como Facebook, donde el tiempo de generación del servidor web se superpone con el tiempo de procesamiento del navegador. Una página web típica de Facebook contiene datos de muchas fuentes diferentes: lista de amigos, actualizaciones de amigos, anuncios, etc. En el modo de representación de página web tradicional, el usuario tendría que esperar hasta que se devuelvan estos datos de consulta y se genere el archivo final y luego se envíe a la computadora del usuario. Cualquier retraso en la consulta ralentizará toda la generación del archivo final.
Cómo funciona BigPipe
Para explotar el paralelismo entre el servidor web y el navegador, BigPipe primero divide la página web en múltiples Pagelets invocables. Así como un microprocesador de canalización divide el ciclo de vida de una instrucción en múltiples etapas (como "búsqueda de instrucciones", "decodificación de instrucciones", "ejecución", "escritura en registro", etc.), el proceso de generación de páginas de BigPipe se divide en las siguientes etapas:
Fuente: isd