Feb
4

A día de hoy PHP es uno de los lenguajes web más utilizados y que cuenta con una comunidad más grande de desarrolladores, esto es así por varias razones, entre las que se encuentran:

  • OpenSource.
  • Fácil de aprender.
  • Se pueden cumplir (desarrollar) la mayor parte de los caprichos que tenga el desarrollador/cliente para una página web.

Pero, como no es oro todo lo que reluce, PHP es un lenguaje muy poco eficiente si lo comparamos con sus competidores, y esto es así, porque es un lenguaje interpretado, es decir, cada vez que se solicita una página web el servidor tiene que coger el archivo, interpretarlo y después ejecutarlo, lo que hace que la rapidez del script creado merme considerablemente, y esta es la razón de ser de HipHop.

HipHop es un compilador de PHP cuya tarea es realizar la conversión de PHP a C++, un lenguaje mucho más eficiente que el primero, ya que este es compilado.

HipHop ha sido desarrollado por Facebook durante los dos últimos años, y esto es así por una sencilla razón, Facebook es una de las páginas más grandes y con más tráfico que existen en la actualidad y que han sido desarrolladas en PHP (no en su totalidad pero sí la parte web, para más información puedes leer ¿Cómo funciona facebook? ), lo cual les está obligando a invertir grandes cantidades de dinero en servidores que podrían haberse ahorrado, de hecho, según los datos que proporcionan en la página del proyecto en, aproximadamente un 50%, lo cual, siendo claros es una auténtica barbaridad hablando en términos económicos para la empresa.

A mi modo de ver, este es un gran avance para PHP que tenía que ocurrir tarde o temprano, dado que si hasta el momento PHP era el lenguaje idóneo para crear proyectos pequeños e incluso medianos, con este compilador (una vez que funcione perfectamente), podrá ser utilizado, sin grandes problemas para realizar grandes proyectos, eso sí, teniendo siempre en cuenta que ha de haber alguna manera de interactuar con C++ desde PHP sin tener que utilizar aplicaciones como Thrift, así que tiempo al tiempo, habrá que ir viendo como va evolucionando el proyecto.

Por último os dejo un esquema con su funcionamiento:

Fuente: Facebook Developers

Tags:
Categoría PHP, Programación, Programas | 2 Comentarios »
Jul
28

logo_facebookEstoy seguro de que en mayor o menor medida conocerás facebook, la red social que ha revolcionado internet y hecho de Mark Zuckerberg uno de los multimillonarios más jóvenes de la historia, si no el que más.

Para los que anden una poco más apartados del tema Facebook es una red social (la primera y la que más éxito tiene en la actualidad) que nació inicialemente como un sitio exclusivo para los estudiantes de Hardvard, pero que en la acualidad admite la creación de cuentas de todo aquel que disponga de una cuenta de correo electrónico, es decir todo el mundo, ya que éstas son gratuitas.

Pues bien, vamos a ver como algo que nació para un grupo reducido de personas ha ido creciendo poco a poco gracias a los ingenieros que trabajan día a día en la misma.

Antes de nada comentar que los datos que voy a utilizar en este artículo los he sacado de una presentación (que he encontrado en Pensamientos Ágiles) de Aditya Agarwal, el director de ingeniería de facebook.

Facebook está programado principalmente en PHP, MySQL y Memcache (LAMP), esto es así lógicamente porque es el conjunto de herramientas con las que comenzó la aplicación (por aquello de que iba a ser una aplicación y tal, supongo), y aunque hoy en día para grandes aplicaciones suele utilizarse lenguajes como .NET (que es un lenguaje que permite una mayor interacción con los procesos del equipo), los del equipo de desarrollo han sabido ingeniárslas para poder sacar adelante el proyecto, aunque para ello hayan tenido que hechar mano de varios tipos de lenguajes (C++, Java, erlang)…

Estadísticas de facebook:

  • Más de 120 millones de usuarios activos.
  • Más de 5 billones de páginas vistas (50 billones del sistema ingles).
  • Más de 1 billón de fotos subidas a sus servidores (10 billones en el sistema inglés).
  • Más de 1.000 millones de conexiones.
  • Más de 50.000 aplicaciones hechas para Facebook.
  • Cuenta con el apoyo de más de 400.000 desarrolladores.

PHP (impresiones varias, antes y después):php

  • Definen inicialmente PHP como un lenguaje rápido, bueno y que cuenta con una gran comunidad de desarrolladores y de librerías.
  • Es un lenguaje no tipado lo que dificulta el entendimiento del código y de la pila de ejecución.
  • Es un lenguaje con malas opciones de escalabilidad y optimización.
  • Cada archivo incluido aumenta la complejidad de manera lineal.

MySQL:mysql_logo

  • Una de sus mayores impresiones con el sistema es que es “realmente rápido”.
  • Utilizan pares <key, value> (clave, valor) para almacenar los datos en las bases de datos.
  • No realizan ningún join en producción, ya que al tratarse de una base de datos distribuida, consume recursos innecesariamente.
  • Los datos más antiguos se archivan, ya que éstos son los que menos probabilidades tienen de ser accedidos.
  • A pesar de que la mayor parte de d los datos tienen consistencia, éste no es un hecho que les preocupe mucho, ya que no hace falta ningún tipo de inconsistencia para la maoyoría de los datos.
  • Hay una base de datos que contiene un grafo de los usuarios del sitio, para así poder acceder fácilmente a los datos de cada usuario.
  • Las modificaciones que han hecho en MySQL son prácticamente nulos.

Memcache:

  • Este sistema dota a Facebook de la velocidad que lo caracteriza.
  • Dota a facebook con una latencia < 200 ms.
  • Cuentan con 25TB (1TB = 1024GB) de memoria.
  • Hacen uso de multi-gets.
  • Han cambiado el protocolo de comunicación, que pasa de ser TCP a UDP para reducir al máximo el cosumo de memoria por los buffers.
  • Han modificado el núcleo de Linux (sistema operativo sobre el que corre facebook) para permitir que Memcache trabaje con equipos de más de un núcleo.

Inconvenientes de PHP y otras cuestiones:

PHP no es precisamente el lenguaje más rápido que existe, ya que se trata de un lenguaje interpretado y si a eso le sumamos que hay ciertas tareas que no se pueden llevar a cabo sólo con el uso de PHP, llegamos a la conclusión de que quizá no haya sido una buena elección para este tipo de aplicación, lo que les ha llevado a intentar migrar el núcleo de facebook a python vaias veces, pero ninguna de ellas llegó a tener el resultado esperado.

Por este motivo, el equipo de facebook creó Thrift, un sistema que permite (de forma más eficiente que otros similares) hacer que PHP interactue con otros lenguajes de programación, como Java, C++,…

Otra característica importante es que si ya existe una librería en Java y no en PHP no se preocupan en migrarla, directamente hacen uso de ella, como por ejemplo la librería para realizar el envío de SMS.

Todo este rollo ha venido inspirado por una serie de conversaciones que tengo con gente de mi entorno en las que discutimos si PHP merece o no la pena, lo que me ha hecho investigar un poco, y si bien no he cambiado de opinión tras averiguar algo más sobre Facebook, he de reconocer que puede llegar a ser un fastidio tener que recurrir a otros lenguajes de programación en determinadas ocasiones, así como que se trata de un lenguaje interpretado y no es el más rápido ni mucho menos o que simplemente se trata de un lenguaje no tipado, lo que puede dificultar un poco la interpretación de código, de manera que a la hora de enfrentarnos con proyectos con un prebisible importante crecimiento, tengamos que plantearnos otras tecnologías, como son .NET y Java.

Tags: , , ,
Categoría Web | 16 Comentarios »