$30 off During Our Annual Pro Sale. View Details »

Migración a HipHop y la HHVM

Tuenti
November 20, 2013

Migración a HipHop y la HHVM

HipHop es uno de los proyectos liberados por Facebook más conocidos. Hablaremos del estado actual del proyecto, y aprovecharé mi experiencia migrando de PHP a HipHop para describir los mayores problemas que supone la migración, así como los resultados obtenidos, con la idea de que los asistentes puedan valorar si la migración merece la pena en su caso.

Tuenti

November 20, 2013
Tweet

More Decks by Tuenti

Other Decks in Technology

Transcript

  1. Moving to HipHop

    View Slide

  2. ●Qué es HipHop
    ●Considerando la migración
    ●HipHop @ Tuenti
    ●HHVM
    ●Conclusiones

    View Slide

  3. ¿Qué es HipHop?

    View Slide

  4. Qué es HipHop
    ●Implementación completa de parser & runtime de PHP
    ●Transforma ficheros PHP a C++ y los compila (modo
    compilado)
    ●Pensado para evitar tener que codificar parte del BE en
    C / C++
    ●Servidor HTTP incluido (libevent)
    ●Proyecto grande y complejo (~ 600k líneas de código)

    View Slide

  5. ¿Ventajas?
    ●Facebook dice ganar entre un 50 y un 70% de CPU
    ●Nuestros resultados muestran un 50% menos de CPU
    ●Uso de memoria también reducido, rondando el 6x de
    ahorro (y más estable)
    ●Sin degradación inicial de rendimiento (PHP & APC)

    View Slide

  6. Actividad del proyecto
    ●Repositorio github estuvo parado durante casi un año
    ●Facebook está prestando atención a la versión open
    source de nuevo
    ●Hay mucha actividad a nivel de incidencias / commits
    ●La versión upstream es una máquina virtual con
    compilación JIT

    View Slide

  7. Documentación
    ●Muy básica, cercana al código
    ●Normalmente desactualizada
    ●Código poco documentado (aunque la calidad del
    código es buena en general)
    ●Normalmente acaba siendo mejor recurrir al código
    fuente (incluso para cosas como configurar el servidor)

    View Slide

  8. Documentación (HipHop en google)

    View Slide

  9. Termcast sobre HipHop
    T

    View Slide

  10. Considerando la
    migración

    View Slide

  11. Migrando: Factores a tener en cuenta
    ●Características de la granja de frontales

    Coste de mantenimiento (tamaño)

    Factores limitantes de la arquitectura
    ●Tamaño del código
    ●Complejidad del código
    ●Cantidad de extensiones de PHP usadas
    ●¿Indeciso? ¡Haz una prueba de concepto!

    View Slide

  12. Migrando: Recursos necesarios
    ●Migración involucra a toda la compañía
    ○ DevOps y Sistemas
    ■ Sistema de desarrollo y despliegues
    ■ Testeo bajo HipHop
    ○ Otros equipos
    ■ Cambios de código para conseguir la compatibilidad
    con HipHop
    ●Equipo encargado de la migración
    ○ Conocimiento de bajo nivel (C, C++, red)
    ○ Conocimiento de la arquitectura del código
    ○ ¡Paciencia!

    View Slide

  13. HipHop @ Tuenti

    View Slide

  14. HipHop @ Tuenti: nuevas extensiones
    ●Implementación de extensión de Memcache

    Añadido soporte UDP a libmemcached
    ●Implementación parcial de gmagick
    ●Migración de filter, gettext, geoip...
    ●Algunas extensiones internas

    View Slide

  15. HipHop @ Tuenti: otras modificaciones
    ●Última versión de libevent
    ●Mejorado el build y creación de paquetes deb
    ●Cientos de fixes en todo el código fuente
    ●Cambiar sistema de traducciones a boost
    ●634 files changed, 35025 insertions(+), 59768 deletions
    (-)

    View Slide

  16. Problemas encontrados: código
    ●Funciones o parametros sin implementar
    ●Diferencias de comportamiento PHP vs HipHop
    ●Acceso a ficheros del repositorio no presentes en la
    versión compilada
    ●Ficheros de configuración en PHP
    ●Thread-safety en HipHop
    ●Diferencias detectadas en los tests

    View Slide

  17. Problemas encontrados: código
    ●Funciones o parametros sin implementar
    ●Diferencias de comportamiento PHP vs HipHop
    ●Acceso a ficheros del repositorio no presentes en la
    versión compilada
    ●Ficheros de configuración en PHP
    ●Thread-safety en HipHop
    ●Diferencias detectadas en los tests

    View Slide

  18. Problemas encontrados: código
    ●Funciones no implementadas
    ○Evitar su uso si es posible (y/o aconsejable)
    ○Implementación en HipHop
    ●Ejemplos
    ○eval
    ○class_alias
    ○runkit_constant_redefine
    ○dynamic defines
    ○ftp_* functions
    ○extensión filter

    View Slide

  19. Problemas encontrados: código
    ●Diferencias de comportamiento PHP vs HipHop
    ○Debug del problema
    ○Fix en el código de HipHop
    ○En ocasiones significa hacer que HipHop se
    comporte de forma "errónea"
    ○A veces debidas a que HipHop es más estricto que
    PHP

    View Slide

  20. Problemas encontrados: código
    ●Problemas derivados de la naturaleza multithread de
    HipHop
    ○Reescritura de extensiones no thread-safe
    ○Cambio del sistema de traducciones
    ○Problemas de locking
    ○Algunas partes de HipHop resultaron no ser thread
    safe!

    View Slide

  21. Problemas encontrados: código
    ●Diferencias detectadas en los tests
    ○Unit e Integration

    Bastantes problemas detectados

    Pocos falsos positivos

    Fácil de depurar en unit, no tanto en integration
    ○Browser

    Casi ningún problema real detectado

    Muy díficil de depurar

    Muchísimos falsos positivos por las diferencias
    de tiempos

    View Slide

  22. Problemas encontrados: código
    T

    View Slide

  23. Problemas encontrados: despliegue
    ●Tiempo de compilación
    ○Tiempo inicial de compilación del código: 3 horas
    ○Tiempo actual: 5 minutos (sin cache)
    ●¿Cómo?
    ○Granja de compilación (distcc)
    ○ccache (cacheo de compilaciones locales)
    ○Clusterización de los fuentes

    View Slide

  24. Problemas encontrados: despliegue
    ●Cambios en todos los entornos
    ○Debe de usarse HipHop en todas las etapas del
    desarrollo
    ○Tests unit / integration / browser también en HipHop
    ○Modo interpretado para las etapas más tempranas
    del desarrollo (más cómodo, más parecido a PHP)
    ○Modo compilado para fases pre-producción

    View Slide

  25. HHVM
    ●Modo compilado e interpretado fusionados en HHVM
    ●Compilación JIT o compilado previamente
    ●Paridad con PHP muy mejorada
    ●Importados todos los test de PHP
    ●Posibilidad de usar extensiones de Zend
    ●Carga dinámica de extensiones

    View Slide

  26. Conclusiones
    ●HipHop es un proyecto que demuestra estar probado
    en producción
    ●La ausencia de base de usuarios garantiza problemas
    ●Su implantación mejora la base de código
    ●La implantación previsiblemente requerirá un esfuerzo
    considerable en tiempo
    ●El debug de los problemas requiere soltura con la
    toolchain de compilación en linux (gcc / gdb / strace...)

    View Slide

  27. Extra ball! Más problemas encontrados
    T

    View Slide

  28. Gracias!

    View Slide

  29. ¿Preguntas?

    View Slide

  30. Datos de contacto
    Email
    [email protected]
    Twitter
    @dpaneda
    Github
    dpaneda

    View Slide