texto:   A-   A+
eliax

¿Facebook reescribe el runtime de PHP para hacerlo mas rápido?
eliax id: 7438 josé elías en feb 1, 2010 a las 02:13 AM ( 02:13 horas)
Hace unos días Facebook invitó el núcleo de programadores responsables por la tecnología PHP que cientos de miles de websites utilizan para sus páginas web interactivas y dinámicas, y los hizo a todos firmar acuerdos de confidencialidad para que trabajasen a corto plazo en un proyecto secreto.

Pues ahora, alguien cercano a los hechos afirma que tan pronto como mañana martes veremos un anuncio importantísimo de parte de Facebook que sin duda cambiará afectará a PHP profundamente: Facebook ha decidido re-escribir el compilador núcleo de PHP para hacerlo muchísimo mas rápido que lo que es actualmente. Noten que no hablamos de agregar nuevas funcionalidades, sino acelerar la velocidad de PHP.

Esto se debe a que como muchos saben, PHP nunca ha sido conocido por una gran velocidad de ejecución de código, lo que hace que empresas como Facebook gasten muchísimo dinero expandiendo sus centros de datos horizontalmente para poder tener mas capacidad.

Facebook aparentemente se cansó de esperar a que los responsables de mantener a PHP se encargaran del problema, y decidió resolver el problema de la manera que más rápidamente se resuelven los problemas en los negocios: Con dinero.

Así que esperemos a ver si ciertamente mañana Facebook hace ese anuncio, puesto que se espera que este nuevo compilador será 100% Open Source y por tanto para el beneficio de todos.

Yo personalmente aun sigo esperando por una buena solución nativa de PHP para el tema de Database Pools, que es esencial para el tipo de trabajo que hago (las soluciones actuales para PHP son en realidad hacks, razón por la cual prefiero otras soluciones como J2EE o Coldfusion).

Fuente de la noticia

Actualización: El proyecto dejó de ser un rumor, y ahora se llama HipHop, y se trata de un transformador de código que convierte PHP a C++ nativo, y después lo compila a código binario nativo, lo que lo hace mucho mas rápido, así como permite un ahorro de hasta un 50% de memoria. Consulten la documentación pues existen algunas limitaciones, pero ciertamente veo un gran uso para esta implementación por parte de Facebook (y sí, el proyecto es 100% Open Source).

Previamente en eliax:

PHP Zend Framework 1.0 disponible (Julio 2007)

Acelera a PHP con EAccelerator (Julio 2007)

autor: josé elías

Comentarios

  • ¿Qué software usas para eliax.com? es decir, php, html, mysql, wordpress, mobiletype...

    • Eliax.com utiliza el motor de blog Serendipity de s9y.org, pero la nueva versión que instalaré en los próximos días es un motor de blog que escribí yo mismo desde cero en Coldfusion. :)

      • saludos eliax,


        antes de esta mejora de facebook a el runtime de php,
        cual es o era mas rapido de php vs asp.net?

        2- solo para yo estar informado, que tipo de problema tiene php con el tema de Database Pools ?

        • Emmiguel,

          Yo no utilizo ASP.net, ni he hecho pruebas de velocidad comparándolo con PHP, por lo que no puedo opinar al respecto (quizás otros lectores quieran exponer sus experiencias).

          En cuanto a Database Pools, el problema es que en aplicaciones que requieren alta escalabilidad, es importante poder tener solo un pequeño conjunto de conexiones (un "pool") y poder reutilizarlas, de modo a evitar dos cosas:

          1. Evitar tener demasiadas conexiones simultáneas que pueden fácilmente ahogar cualquier servidor por mas potente que sea,

          2. Evitar abrir y cerrar conexiones a bases de datos, que es una operación sumamente costosa en términos de recursos.

          PHP lo único que permite es reutilizar una misma conexión, pero bajo la misma transacción, lo que es inaceptable para aplicaciones en donde la integridad de los datos, y la atomicidad de las transacciones y los usuarios, debe ser garantizada.

          Esa es la razón principal por la cual con frecuencia (yo lo veo al menos una vez por semana) ocurren los errores en páginas web de PHP sobre "demasiadas conexiones de base de datos" o "falta de recursos" u otros errores.

          Lo que empresas como Facebook y Yahoo hacen, es que obtienen soluciones especializadas que requieren de modificar el código de PHP de una manera especial que no es estandarizada (significando eso que no puedes tomar ese código a otro lugar). Hoy día el 99% de las grandes empresas implementan tales soluciones encima de PHP para hacerlo funcionar de esa manera, de lo contrario, el famoso error de que existen demasiadas conexiones a las bases de datos...

          Esta es la *única* cosa que me ha impedido utilizar a PHP en muchos proyectos, y es una lástima que Java pueda hacer esto desde hace ya casi una década, y los desarrolladores de PHP no hayan notado la necesidad en el mundo empresarial para resolver este serio problema de escalabilidad.

          En cuando a los detalles sobre como esto funciona desde el punto de vista del programador, hay dos variantes principales.

          La primera es que tu explícitamente le digas al contenedor de tu aplicación "necesito una conexión a la base de datos", en cuyo momento el runtime te ofrece una la cual ya estaba previamente abierta, lo que significa que está lista para su uso inmediatamente ofreciendo una gran velocidad de acceso a la base de datos, y entonces procedes a ejecutar tu SQL, y cuando finalizas tu llamas un método para devolver esa conexión al pool. Esta es la versión "explícita" de Database Pools.

          La otra versión, y la que prefiero, es la versión implícita como utilizado en Adobe Coldfusion, en donde tu nunca tienes que preocuparte de tomar prestada o devolver una conexión, sino que el contenedor lo hace automáticamente cada vez que tu le das SQL. En otras palabras, escalabilidad automática.

          En cuanto a la implementación interna, por lo general esto no es mas que un conjunto de conexiones constantemente abiertas colocadas en una estructura que obedece a un algoritmo Round Robin, y por lo general la cantidad de conexiones se limita entre 8 y 32 conexiones simultáneas para casos típicos, dependiendo del hardware y la base de datos a utilizar.

          • Saludos Eliax y gracias por educarme un poco en ese tema.

            Actualmente desarrollo en php, y tener ese problema en cuenta nos ahorrara mucho tiempo de investigación si en algún momento si nos topamos con el.

            Me alegra saber que al igual que yo prefieres a php sobre asp :-)

          • Supongo que el problema principal para hacer un buen database pool en php es que en este cada request que le llega al servidor vuelve a ejecutar el script completamente.

            Usándolo con Fcgi puede ayudar para mantener un pool, pero no es una solucion segura, ni estable.

            En otros lenguajes, como python, hay un proceso persistente que es el que maneja los request, por lo que se hace mucho mas simple implementarlo, de hecho ya existen varias implementaciones, por ej SQLalchemy.

            Pero mientras escribo esto escucho que en en HipHop también implementaron un servidor, asi que supongo que este puede ser el que se encargue de hacer el database pool.

  • Excelente noticia! En especial para mí que desarrollo sobre PHP! Ahora me sentiré más confiado de usar el 3er lenguaje más popular del mundo y el más popular orientado a la Web :)...

    Lo más importante de esto es que será Open Source(o Free Software?), pues si no fuese liberado no tendría sentido alguno como noticia...

  • Un aplauso para Facebook por entender el espíritu del software libre.

    Ellos han hecho un gran negocio utilizando PHP. Si necesitan algo más, pues ¿qué menos que invertir algo de lo que han ganado en mejorarlo?

    Claro que podrían haber decidido guardarse las mejoras para ellos, pero si lo hacen se pierden de seguir beneficiándose de las correcciones y mejoras que hagan los demás.

  • Claramente aquí eseñas que patrocinas un sistema vacio de dinero. Espero que puedas cambiar un dia. La primera idea que tiene que cambiar es, el pensar que no podremos hacer un cambio, claro que si se puede.

    • GarSOUL,

      Con todo el respeto, creo que debes aprender a leer antes de opinar.

      Debes entender que una cosa es reportar una noticia, y otra es endorsar una noticia. Cuando dices que yo...

      "Claramente aquí eseñas que patrocinas un sistema vacio de dinero"

      Te conviertes en una persona que no sabe leer noticias.

      Cuando un periódico o blog pone un artículo sobre comunismo, o sobre ateísmo, no significa que son comunistas o ateos, sino que siendo imparciales y poniendo noticias de todo tipo sin ninguna agenda escondida.

      Para tu información, yo NO patrocino un sistema vacío de dinero por la sencilla razón de que el concepto mismo es absurdo. El dinero siempre existirá, sea en papel, moneda, formato electrónico, representado en átomos, energía o información, por la sencilla razón filosófica de que se necesita una unidad de intercambio que represente el esfuerzo (energía) que dedicamos a las cosas que hacemos en la vida.

      Así que por favor, hacia el futuro: Cuando veas que escribo muchos artículos de Software Libre o de empresas capitalistas, no me acuses de ser fan de ninguno de los bandos al menos que yo explicitamente diga que soporto un bando u otro. Lo mismo con cualquier otro tema tratado en eliax.

      Nota aparte pero relacionada: Otro tema es que muchos asumen que lo que dicen otros lectores en los comentarios son palabras que yo endorso. Eliax es un medio libre para información, pero el hecho que alguien diga algo en los comentarios no significa que yo esté de acuerdo con lo diga.

      Eso lo aclaro porque muy frecuentemente en comentarios me acusan de que yo dije algo, o de que yo soy fan de algo, solo porque recuerdan los comentarios de alguna noticia pasada.

      Finalmente, recomiendo leer este artículo:

      http://eliax.com/index.cfm?post_id=7394

      • "El dinero siempre existirá, sea en papel, moneda, formato electrónico, representado en átomos, energía o información, por la sencilla razón filosófica de que se necesita una unidad de intercambio que represente el esfuerzo (energía) que dedicamos a las cosas que hacemos en la vida" - José Elías
        • "El dinero siempre existirá" - la videocasetera, los teléfonos residenciales cableados, las periódicos impresos, el arco, la flecha y el dinero son invenciones del hombre, los ejemplos escritos aquí no son indispensables ya, y están desapareciendo y siendo olvidados hasta que dejen de existir en su totalidad, EL DINERO es tan primitivo como escribir en piel de animal o creer que el mundo es plano. Hablas tan seguro que dé el dinero existirá por siempre que es notable que no deseas terminar con el hambre, o con la pobreza, o con la ambición al poder que el dinero ofrece y obviamente gozas de un estatus social que te da ventaja de miles de hermanos dominicanos y peor aun haitianos. Si amaras la idea de que todos somos iguales, de que el ser humano deberá ser libre de su esclavitud al dinero que es la que genera pobreza, riquezas, poder, imperialismo, control entre miles más, realmente abrazarías estas ideas de libertad y vivir como se supone q seamos, quien nace pobre? o rico? o esclavo? cuando nacemos en este mundo llegamos desnudos y somos simples criaturas mas a este planeta hermoso, cuando nos vamos somos lo mismo que llegamos, humanos desnudos que volvemos a unirnos al planeta en una transformación, pero que hacemos entre el punto cuando nacemos y cuando morimos? somos sometidos a un sistema global de control y esclavitud. No lo entenderás, porque te niegas hacerlo, porque solo pocos tenemos el coraje de sacrificarnos NOSOTROS mismos por los demas hermanos y un bien común.
        • "sea en papel, moneda, formato electrónico" - obviamente refleja que es una invención mas nuestra que nosotros NECESITAMOS ajustar a la tendencia tecnológica, antes que sea notado su irrelevante existencia.
        • "representado en átomos, energía o información" - que ilusa y absurda idea!, como te atreves a hacer una declaración como esa! quien eres tu para decir que el dinero está representado en átomos o energía o inclusive información?! la vida está por encima de TI y de TODOS, y la materia física, átomos, células, fuerzas y demás está por encima de todo sistema estúpido que pueda inventar el hombre, las fuerzas existentes como gravitacional, electromagnética, nuclear etc. existen y ¿tu crees que nos pidieron permiso? tú crees que una basura como el dinero pueda estar REPRESENTADA en partículas? POR FAVOR, júzgate tú y tus actos, no hables de átomos como si tuvieras el derecho de adjudicarles algo. Tristeza y vergüenza les da a las formas inteligentes de vida en nuestro universo, de nuestro comportamiento inmensamente estúpido y errante.
        • "por la sencilla razón filosófica de que se necesita una unidad de intercambio que represente el esfuerzo (energía) que dedicamos a las cosas que hacemos en la vida" - José Elías, sin ofender, pero estos han sido los comentarios más absurdos y poco inteligentes que has escrito en tu vida. ¿Razón filosófica? ¿Las cosas que hacemos en la vida?...dame un momento para poder digerir esto que me ha incomodado bastante. Para comenzar dime si la creación del dinero comprende ALGUNA SOLA BASE FILOSOFICA. Ninguno de los puntos utilizados para la creación del dinero es filosófico o incluso formal ante la naturaleza misma. Para comenzar ningún sistema natural biológico y orgánico comprende un sistema tan ILUSO y TONTO de dinero o INTERCAMBIO, me refiero a TODO lo que está vivo. Los planetas, las fuerzas, las energías, los animales y toda criatura, ninguno de ellos, PERO ABSOLUTAMENTE NINGUNO DE ELLOS, reciben algo llamado dinero, o incluso NINGUNO DE ELLOS INTERACTUAN ATADOS A UN SISTEMA DE INTERCAMBIO ¿dime si me equivoco? La armoniosa interacción de todas las criaturas del universo conocidas y todo lo que existe, habitan sin aplicar una sola poca diminuta parte de un sistema de intercambio que no sea un bien común. La base fundamental de todo ser viviente, el incentivo recibido o la PAGA recibida (como le llamaríamos en el sistema conocido de dinero) ES COMPLETAMENTE ABSTRACTO e INVISIBLE!...explicación, simple, todo el esfuerzo, energía, tiempo y cualquier otra cosa invertida es incentivada por la sencilla razón de QUE ES !NECESARIO! por el bien común de la supervivencia, NO DE UNO SOLO COMO RAZA! sino de todos como ORGANISMO! la paga recibida es la armonía, la garantía de supervivencia, la garantía de vida!!! Nosotros tenemos que recibir ALGO a cambio de lo que hacemos en la vida? y que recibe el planeta a cambio de alojarnos? que recibe el sol a cambio de mantener la vida terrestre? que reciben las criaturas a cambio de ayudar la tierra en su mantenimiento? Entiendo tu comentario, eso explica que aun estamos evolucionando y hay fallas en nuestro conocimiento y entendimiento de vida. Repito aun seguimos evolucionando y nuestro conocimiento seguirá recibiendo cambios, como los hemos estado recibiendo durante miles de años. No hace mucho salimos de los arboles, o las cuevas, y aun la mente sigue primitiva.
        “Estoy presenciando una nueva etapa del ser humano, una evolución en su naturaleza y su comportamiento. Me siento honrado y orgulloso de ser parte de los seres humanos que están evolucionando a un nivel de comprensión y naturaleza más allá de los sistemas actuales. El desarrollo de este nuevo conocimiento nos hace entender de una forma nata desde nuestro nacimiento donde está el valor de la existencia, la importancia NO de nuestro dominio sino de la armonía de todo ser viviente y las fuerzas existentes. La evolución de esta nueva naturaleza radica el vacio permanente que existió en el ser humano durante su desarrollo como forma de vida inteligente, este fue la que impulso al descubrimiento, a la creación, a la invención, y la insaciable sensación de cuestionamiento, fue elemento clave para nuestra evolución como especie, ha estado en la naturaleza del hombre tan necesario como la sensación de hambre que tiene que ser saciada con comida. Pues esta naturaleza ha estado en el hombre ya que somos una herramienta para evolucionar la evolución con su misma inteligencia, pues TODO trabaja en sentido inteligente, pero NOSOTROS somos la inteligencia misma. Esta evolución comprende en conocimiento y naturaleza, el futuro ser humano entenderá su armonía con su alrededor, no tendrá vacio en su interior, asumirá su responsabilidad de evolucionar lo existente, siendo el ser humano poseedor de la inteligencia misma, creado de la inteligencia silenciosa que rige todas las cosas. El frio y el calor, lo ligero y lo pesado, las cantidades de materia, las fuerzas positivas y negativas, toda la ciencia que conocemos existe de una forma silenciosa en nuestro universo, pero somos los primeros en entenderla, no solo eso, tendremos las capacidades para manipularla. Como esa primera base que es conocida por todos los seres humanos “el hombre fue creado a imagen y semejanza de Dios”, pues no muy lejos de esto, las leyes que rigen todo nuestro universo fueron nuestras creadoras, la inteligencia misma fue depositada en nosotros y henos aquí. En otras palabras, somos una fuerza física en el universo con capacidades motoras. Pero aun las fuerzas están sujetas a lo más sublime y perfecto existente y que hace que todo coexista de manera balanceada…ARMONIA. Entendiendo que poseemos una fuerza (sugiero que la inteligencia es la primera fuerza, para un total de 5 fuerzas del universo), somos una fuerza.” Noel Garayúa

        • GarSOUL,

          Tienes un serio problema entendiendo la gramática y semántica del idioma español.

          Te respondo con la parte fundamental del comentario mio:

          "El dinero siempre existirá, sea en papel, moneda, formato electrónico, representado en átomos, energía o información, por la sencilla razón filosófica de que se necesita una unidad de intercambio que represente el esfuerzo (energía) que dedicamos a las cosas que hacemos en la vida."

          Por otro lado, organiza tus ideas, tu forma de expresarte y no mezcles un tema con otro. Por ejemplo, me resaltó gracioso que mezcles este tema con otras al decir cosa como "el hombre fue creado a imagen y semejanza de Dios".

          • Wuao! pensé que entendías muchas más de solo lo que escribes aquí.
            Soy puertorriqueño nacido y criado en Puerto Rico. Vivo en EU hace alrededor de 3 años, también hablo el Ingles a perfección. Créeme que mi español es 100% correcto en su gramática e incluyendo semántica. Si te das cuenta solo traje a colación el escrito de la “creación humana” como lo sugiere el hombre en su mayoría. Nunca mezcle temas diferentes, porque no hable de nada diferente que no me fuera hacer simétricamente en concordancia. Solo lo réferi para explicar cómo se sugiere que nació el hombre de la nada, que envuelve cierto misterio conocido, pero no precisamente el mismo, pero una similitud de historia con la realidad. En vez de ser Dios quien creo en un cerrar y pestañar de ojos, fue la misma fuerza de la inteligencia quien promovió la creación de un ente para depositar en él la inteligencia misma, y llevar a cabo una evolución física más veloz, convirtiendo esta inteligencia en un organismo parte del entorno del todo.
            Capish?!

  • Creo que ya era hora de que una de las tantas compañias grandes que usan esta solucion, dieran algo verdaderamente grande a esta tecnologia para el beneficio no solo de ellos, sino de toda la humanidad.

  • Excelente noticia!!!! Me alegro mucho que una empresa como Facebook trabaje para mejorar PHP.

    Fue el lenguaje con el que aprendí a programar, por muchas críticas que tenga lo quiero mucho :3

  • eliax, disculpa que te pregunte haga otra pregunta , pero es que tu respuesta genero muchas interpretacione diferentes en mi departamento cuando expuse tu respuesta.

    Para ver quien de todos nosotros te entiende mejor, puedes darme un ejemplo de como puedo perder mi integridad de mi informacion cuando trabajo con un pool de conecciones.

    para mi , o desde mi punto de vista no puedo perder mi integridad con esto.

    para mi, mi integridad la manejo con transacciones en la base de datos.

    para mi una transaccion en la base de datos o se hace o no se hace entiendace

    begin transaction;

    --sentencias sql
    --sentencias sql
    --sentencias sql
    --sentencias sql
    --sentencias sql

    commit;

    por favor, un buen ejemplo no iluminaria.

    • Hola Emmiguel,

      En realidad el caso es muy sencillo después que entiendes lo que ocurre tras bastidores.

      En PHP se pueden dar dos casos cuando utilizas conexiones para ejecutar SQL.

      1. Cada usuario obtiene una conexión (que es el caso usual), y con esa conexión hace lo que desea. Esto le permite ejecutar código como el que pones de ejemplo, con transacciones, integridad, etc. Sin embargo, el gran problema con esto es que si tienes una página con demasiados usuarios, eventualmente o (1) se terminarán las conexiones y ocurrirá un error, o (2) la carga será tan alta que la aplicación se pondrá de rodillas.

      2. La otra opción es compartir conexiones. Sin embargo, esto no es lo mismo que Database Pooling, ya que en PHP varios usuarios utilizan la misma conexión *simultaneamente*, lo que significa que no puedes (o mas bien, si puedes, pero no debes) utilizar transacciones en este modelo de uso.

      La razón es el siguiente ejemplo de pseudo-código de dos usuarios A y B que comparten una misma conexión:

      Usuario A: begin transaction;
      Usuario A: sentencia 1 SQL
      Usuario B: begin transaction;
      Usuario B: sentencia 2 SQL
      Usuario B: commit
      Usuario A: sentencia 3 SQL
      Usuario A: Commit

      Como puedes ver, aparenta que todo está bien, pero dado que hablamos de la misma conexión, lo que sucede en realidad es que el usuario B cierra con su Commit no solo la transacción de sí mismo, sino que la de A, por lo que la sentencia 3 de SQL no está ahora bajo ninguna transacción.

      Es decir, bajo este modelo si activas transacciones es imposible controlar transacciones, razón por la cual no solo se recomienda no utilizarlas bajo este modelo, sino que además no *debes* utilizarlas porque puedes introducir todo tipo de problemas de integridad en tu base de datos.

      Obviamente la solución es Database Pooling, que combina lo mejor de ambos: Una conexión "prestada" temporalmente, pero de uso exclusivo para un usuario por determinado tiempo, con la cual se pueden especificar transacciones, y cuando termine de utilizarla, devolverla al sistema para que este la haga disponible a otros usuarios.

      Y nota que la implementación de un Database Pool es extremadamente simple, siguiendo el patrón de programación de un Singleton que presta y recibe de vuelta conexiones basado en como dije anteriormente, un algoritmo Round Robin.

      Una nota adicional, por si preguntas, es que te preguntarás sin una pequeña Database Pool de apenas 10 o 12 conexiones es suficiente para (por ejemplo) cientos de usuarios, y la respuesta es que sí, porque el tiempo que te ahorras en abrir y cerrar conexiones nuevas, así como en mantener recursos para todas esas conexiones, se utiliza ahora para acelerar el uso de estas pocas conexiones.

      Es decir, en realidad lo que sucede es que si mas de 12 personas (para seguir el ejemplo) necesitan acceder a la base de datos, lo que ocurre en realidad tras bastidores es que el resto se pone "en cola" (en un Queue) hasta que hayan conexiones disponibles, y por eso la importancia de establecer un Timeout cuando se implementa un sistema de Database Pooling, o de lo contrario se puede llegar a una condición en donde todas las conexiones están agotadas por demasiado largo tiempo.

      Es todo un arte el tema este, por mas sencillo que aparente (hace mucho tiempo tuve que implementar mi propio sistema de Database Pooling en Java cuando no existía ninguno, por lo que tengo cierta familiaridad con el tema) :)

      • Muchas gracias Elías, realmente desconocía este grave problema con php.
        Siendo asi, no utilizare database pooling de php.
        Ya entiendo por que desarrollaste el tuyo propio :-)

  • y tu respuest es : * HipHop for PHP * http://developers.facebook.com/news.php?tab=blog

Añadir Comentario

tu nombre
tu email
(opcional)
web personal
(opcional)
en respuesta a...
comentario de caracteres máximo
3 + 2 = requerido (control anti-SPAM)
¿De qué color es el cielo?: requerido (control anti-SPAM)
 

"Mi mente va a estallar, esto es EXTRAORDINARIO!!!!!!!!!!"

por "Patricio" en jul 23, 2010


en camino a la singularidad...

©2005-2025 josé c. elías
todos los derechos reservados
como compartir los artículos de eliax