Archivo | noviembre, 2007

Tuenti tiene eventos!

22 Nov

Hemos lanzado por fin los eventos en tuenti. Ahora se puede crear un evento e invitar a tus amigos para que asistan. De esa manera podrás quedar con ellos sin tener que estar llamándoles, mandándoles mensajes de teléfono…

Además, puedes añadir descripción, página web, teléfono e incluso comentarios al respecto. Hay tres listas diferentes de personas en un evento:

  • Personas que confirman asistencia
  • Personas que a lo mejor van
  • Personas que aún no han contestado

Gracias a este modelo de eventos, podremos estar al día todos de las reuniones con nuestros amigos, quedadas, partidos, fiestas, etc…

Por  si fuera poco, además hemos añadido la posibilidad de que aquellos que no conseguís invitación para entrar podáis dejarnos vuestro correo para que podamos enviarte cuando podamos una invitación.

Espero que os gusten todas estas cosas, el equipo está muy contento por estas cosas.

Cómo usar Memcached en nuestro código PHP

18 Nov

Memcached es un sistema que se ejecuta en modo servicio que almacena en memoria RAM cualquier dato que se le pida. Las llamadas se hacen por medio de sus librerías en los diferentes lenguajes de programación que soporta y el almacenamiento lo realiza por medio de asociaciones de series de cadenas hash. De esta manera, si yo tengo en mi código por ejemplo un listado completo de provincias que voy a mostrar a los usuarios en una página, en vez de estar todas las veces sacándolas de la Base de Datos, las saco una sola vez -la primera vez que se pidan- y las guardo posteriormente en Memcache. La siguiente vez que me las pidan, miro primero si las tengo en Memcached y las muestro directamente desde él.Para poder usarlo, suponemos que tenemos ya un servicio memcached instalado y que queremos asociar nuestro código a él. Esto lo realizamos cargando primero las librerías memcached dentro de nuestro PHP:

$ pecl install memcache

En nuestro fichero de php.ini insertamos la línea -si no lo ha hecho ya pecl:

extension=memcache.so

Una vez instaladas las librerías, podemos llamar a la clase Memcache desde dentro del código. Lo primero que tenemos que hacer es declarar la clase:


$memcache = new Memcache();
$memcache->pconnect('localhost',11211);

Aqui supongo que el servicio Memcache está situado en el mismo servidor. Según la documentación de Memcache, el puerto por defecto es el 11211, por lo que usaremos el mismo.

Ahora que estamos conectados, sólo queda usarlo. Por ejemplo, aquí tengo una función que me devuelve las provincias de España:


function get_provincias($pais) {
$prov = $memcache->get("PROV_".$pais);
if ( $prov === false) {
// No está en memcache, así que las traigo de la BBDD y las meto en
// memcache para la siguiente vez...
$prov = coge_de_base_datos_provincias($pais);
$memcache->set("PROV_".$pais,$prov,0,0);
}
return $prov;
}

Todos los hilos de PHP que corran podrán acceder a la información que otros hilos han dejado dentro del servicio. Por lo que hay que tener cuidado con los accesos y la información que se pueda introducir.

Como podéis observar, es cuestión de mantener una lógica lo sufientemente sencilla como para no confundirse a la hora de manejar los datos. Otro detalle que habréis notado es que he usado dos métodos de la clase Memcache. En realidad los que suelo usar son estos dos nada más. Existen otros muy útiles también como set(), replace(), invalidate().

Este último existe porque tú también puedes definir a Memcache el tiempo máximo que quieres que esa entrada se encuentre en la memoria. Así se pueden mantener datos temporales en memcache como información de la sesión de un usuario. Este valor está definido en segundos por el cuarto parámetro de la función set(). Pero os remito a la documentación que hay aquí para profundizar más en este aspecto.

Memcached es una herramienta muy útil que hará que nuestras aplicaciones web no tengan que esperar esos 10ms a la base de datos ya que este servicio tiene tiempos de respuesta por debajo del milisegundo en muchas ocasiones.

PHP programado en Objetos o sin Objetos

17 Nov

Hoy mismo hemos levantado el nuevo código a producción. Este nuevo código trae novedades que los usuarios no ven, pero que harán que sus páginas vayan más rápido y que dejen de haber errores extraños por la página -alguno quedará seguro, pero al menos la gran mayoría ya no!.

Este nuevo código está en gran parte ya orientado a objetos. Cosas como el tratamiento de las imágenes y las etiquetas están en objetos, así como los usuarios. Esto hace que la lógica en el código sea más rubusta y que por ello hayan menos errores. Así mismo deja la puerta abierta a los programadores del front-end para que les sea más sencillo programar y no tengan que vérselas con las odiosas SQLs y menos con lógicas del PHP profundo que no deberían tocar.

¡Pero no todo son maravillas en el paraíso de la orientación a objetos! Al subir el código y reabrir el portal nos hemos dado cuenta de que nuestros frontales, de estar completamente ociosos (de media un 5% de uso de CPU en dias de pico) han empezado a trabajar. Básicamente donde ayer teníamos un uso en los frontales de un 4% hoy lo tenemos de un 20%. Es decir, que ahora esta programación por objetos se nos ha comido ciclos de los procesadores de nuestros frontales.

Cierto es que hemos añadido lógica más tediosa a los objetos en sí, que hacen llamadas a los byte-coded cachés -APC en concreto- y luego al Memcached. Por lo que puede que todo en conjunto sea el aglutinante de este vertiginoso crecimiento. Pero os puedo decir que es impresionante el crecimiento de uso de CPU que se ha experimentado en tan sólo 4 horas!

Definitivamente puedo decir que la programación por Objetos en PHP tiene muchas ventajas de cara a la producción de código, pero tiene muchas desventajas de cara a los servidores que lo tienen que soportar… Estando en un entorno de alto uso -no voy a decir números- puedo hablar con datos y pruebas sobre ello.

Si quieres una programación limpia y un código sostenible, programa bien. Y si además quieres que ese código sea reusable y que tus programadores de front puedan desarrollar más rápido, programa Objetos! Pero eso sí, ten unos cuantos servidores de reserva preparados, porque los vas a necesitar.

Mi primer post

17 Nov

Ya tenía un blog en su día que programé yo mismo sobre ASP que he decidido dejar de lado. En cambio, voy a empezar a escribir aquí.

En primer lugar me voy a presentar.

Me llamo Joaquín. Tengo 26 años y trabajo en el equipo de tuenti.com, un portal de internet que tiene como misión:

«tuenti.com es la herramienta que te ayuda a tener cerca a la gente que conoces»

Espero poder escribir más posts y que os sean interesantes. Los próximos posts que escriba serán sobre -y así adelanto la temática de este blog:

  • Replicación en alta disponibilidad de MySQL
  • Clústeres en alta disponibilidad de servidores web
  • Optimizaciones de PHP sobre MySQL y Memcache -algo también de APC.
  • Anécdotas divertidas dentro de la tecnología de tuenti.com

Algunos de los posts irán en inglés ya que es el idioma oficial que tenemos en el equipo de tuenti al ser mitad españoles y mitad no españoles -tuenti es 100% español, pero para tecnología y otros menesteres hemos tenido que contar con la inestimable ayuda de compañeros extranjeros.