Facebook comenzó a usar HipHop en todos sus servidores de producción(unos 30.000) a principios de 2010. Hace unos días comentaban en su blog de desarrollo las mejoras de rendimiento que ha obtenido hasta alcanzar la reducción del 50% de uso de CPU. Están orgullosos de la reducción de tiempos de CPU incluyendo a los nuevos desarrollos que han ido lanzado posteriormente.
El rendimiento es un factor muy importante en la eficiencia del servidor: la tasa de peticiones web servidas en un determinado periodo de tiempo. HipHop ha sido capaz de garantizar una mejora del 70% usando la misma infraestructura de hardware que antes de su implantación. Un dato espectacular que para una plataforma tan enorme como Facebook representa un importante ahorro de recursos y mejora de rendimiento.
Facebook creó HipHop como procesador de código que convierte el código escrito en PHP en código C++ puro. Este código luego se compila con gcc para obtener un código nativo equivalente a la funcionalidades escritas en PHP. De esta forma los servidores ahorran el tiempo que PHP suele necesitar para ejecutar el código interpretado y ejecutan directamente el código ya compilado en C++, mucho más rápido.
Facebook liberó HipHop como proyecto de software libre para que cualquiera pudiera mejorarlo y usarlo. Pero como recuerdan, es útil para compañías con una infraestructura muy grande escrita en PHP que deseen aprovechar C++ como lenguaje para su lógica compleja. No es una solución para todo el mundo.
Técnicas de optimización usadas por Facebook
La mejora de rendimiento se logra a través de diversas técnicas de optimización en el compilador de HipHop y en el sistema en tiempo de ejecución que han ido mejorando durante este tiempo:
Implementación de APC (Alternative PHP Cache) que utiliza Intel Threading Building Blocks. En ella se deshicieron de todas las operaciones de serialización/deserialización más costosas.
Se implementó una serialización más rápida y codificación de JSON. Optimizando las conversiones entre UTF8/UTF16, los accesos a las propiedades de los objetos, etc...
Menor número de recuentos de referencias. Así se ha optimizado cuando no es necesario esos recuentos en las cadenas o matrices. De este modo, una de las operaciones simples que más consumen CPU se ha rebajado considerablemente.
Código ejecutable compilado con HipHop a partir del PHP desplegado en los servidores web. Además de compactar todo el código para ser más reducido consiguiendo un ejecutable ligero y rápido.
Mejora de la asignación de memoria. Jemalloc, un malloc que permite el control del uso de memoria en HipHop controlando donde se asigna la memoria y donde puede ser cancelada.
Compilación más rápida. Se ha mejorado el análisis, optimización y generación de código. Hyves ha contribuido a tal fin consiguiendo que un binario de más 1GB pueda ser compilado en apenas unos 15 minutos, con la ayuda de distcc. Esto consigue que la fase de implementación mejore y pueda probarse mejor el código en un entorno real de ejecución sin pesados procesos.
Podéis echarle un vistazo a HipHop PHP en la página del proyecto en GitHub. Además de consultar la documentación de cómo construir e instalar en Ubuntu y ver cómo se ejecuta en el servidor, incluso ver cómo se compilaría Wordpress para usarse en una infraestructura grande.
Vía | Facebook Developers Más información | HipHop PHP