Facebook al ritmo de HipHop compila su código en PHP

Programación PHP

Facebook está liberando como código abierto una tecnología que desarrollaron internamente que permite que sitios web escritos en PHP puedan tener un rendimiento sólo reservado para expertos programadores en C++. El proyecto se inició hace un par de años y luego de demostrar su efectividad, han decidido publicarlo para que otros también pueden participar en su desarrollo, y por qué no, mejorar sus propios sitios web.

Uno de los problemas de sitios de alta demanda como Facebook es la escalabilidad. Se trata de la capacidad de que una solución pueda crecer a medida que se le vaya exigiendo más. Un sitio con buena escalabilidad puede rendir de igual forma independiente del volumen de solicitudes o independiente de su propia complejidad. En el caso de servicios como Facebook, la escalabilidad es algo vital ya que cada vez son más los usuarios que se integran al sistema, agregando nuevo contenido y por lo tanto, más información que procesar y desplegar. Sitios con problemas de escalabilidad han sido víctimas de su propio éxito, como ocurrió en los inicios de Twitter.

Como muchos otros sitios web de alta demanda, Facebook fue escrito en el lenguaje PHP. Se trata de pequeños trozos de código que se ejecutan cada vez que un usuario solicita una página. El lenguaje es bastante flexible pero tiene una restricción de diseño: Está conceptualizado como lenguaje interpretado, lo que significa que cada vez que el usuario pide una página PHP, un programa llamado intérprete debe procesar el código para convertirlo en algo ejecutable por el procesador.

PHP es un lenguaje simple y pensado para simples mortales, por lo que sus expresiones se alejan bastante del código nativo que se ejecuta finalmente en el procesador, esto hace que el código que genera el interprete tenga que agregar operaciones innecesarias por la falta de información precisa sobre lo que el programador quiere lograr, disminuyendo el rendimiento final.

La distancia entre PHP y el código de máquina (o código nativo) es suficientemente amplia como para que sitios como Facebook estén interesados en acercar el código original al código que corre finalmente en el procesador. Hay que pensar que Facebook ejecuta unas 400 billones de solicitudes al mes, que equivalen a unas 13 billones de solicitudes por día. En estos casos, cualquier mejora por mínima que sea es bienvenida.

¿Qué tiene que ver HipHop?

Hace un par de años, en Facebook vieron que las optimizaciones existentes para PHP eran insuficientes. En este ámbito una técnica usual es compilar el código PHP a código nativo para no tener que usar un intérprete, pero al final el código que se ejecuta también tiene el problema de agregar operaciones innecesarias, sólo se ahorra el tiempo que el intérprete hubiera ocupado para realizar la conversión.

Otra técnica disponible es implementar parte de la aplicación en un lenguaje cercano a la máquina como C++ y llamar a estos pedacitos veloces desde PHP. El problema es que esta combinación hace que el código final sea mucho más complejo, y un detalle no menor: También se necesitan buenos programadores en C++, lo que limitaría la capacidad de crecimiento de un sitio como Facebook.

Lo que hizo finalmente Facebook es crear HipHop, se trata de un procesador de código que convierte código escrito en PHP en código C++ puro. Este código luego se compila con el tradicional g++ (parte de GCC / GNU Compiler Collection) para obtener código nativo optimizado que es funcionalmente equivalente al código original en PHP.

En palabras no tan técnicas, HipHop permite que cualquier desarrollador que escriba PHP logre código final que se ejecuta con el rendimiento del código nativo escrito por un programador experto… Claro que your mileage may vary. Previamente en Facebook habían realizado algunas mejoras a PHP que fueron enviadas al proyecto principal para que formaran parte del código original, pero no se logró gran mejora. Otra alternativa era reescribir Facebook en C++, pero eso podría haber detenido el desarrollo de Facebook por mucho tiempo.

La gracia de tener un conversor que tome código original en PHP es que los desarrolladores pueden seguir escribiendo su código como siempre y HipHop se encarga de prepararlo para que g++ lo optimice y convierta en código nativo. La sintaxis de PHP tiene algunas similitudes con C++ por lo que la idea no es tan descabellada. Si se evita usar las características dinámicas del lenguaje y se escribe pensando en que el código será convertido a C++, HipHop puede procesarlo sin mayor dificultad.

Fuente: HipHop for PHP – Move fast

Tema Relacionado: Programación PHP