Gearman es un Job  Manager open source, originalmente escrito en Perl, y reescrito posteriormente en C. También solemos conocer estas aplicaciones como “gestores de colas”, y en el mercado existen soluciones similares a Gearman tales como Apache ActiveMQ, zeromq, OpenAMQ

Componentes

Gearman es increíblemente sencillo y rápido de usar, es un proceso liviano y permite también la comunicación entre distintos lenguajes. En un breve resumen, consta de los siguientes elementos:

  • Client:  Proporciona una API para crear tareas (jobs) y enviarlas al Job Server.
  • Job Server: Hace la magia. Es el encargado de gestionar las tareas recibidas y intentar encontrar un Worker disponible que las realice.
  • Worker: Es el proceso encargado de obtener la información enviada por el cliente a través de la API al Job Server, realizar la tarea encomendada, y en el caso de mensajería sincronía, devuelve una respuesta al cliente a tambien a través del Job Server.

Fuente: gearman.org

La comunicación entre los elementos puede ser tanto síncrona (foreground jobs) como asíncrona (background jobs). Evidentemente, podemos crear tantos clientes como queramos, así como enviar los mensajes a distintos Job Servers, que se encargarán de enviar las tareas a todos los Workers que se encuentren disponibles en ese momento. Es recomendable tener más de un Job Server activo en tu arquitectura para tener una mayor disponibilidad en caso de fallo, aunque a nivel de gestión de mensajes, uno solo suele aguantar un gran volumen de carga.

Ventajas y usos

Tras su sencilla definición se esconden evidentes ventajas de las que podemos aprovechar de Gearman:

  • Permite la ejecución de tareas en paralelo.
  • Balanceo de carga: puedes delegar tareas de mayor procesamiento o memoria a Workers en otros servidores.
  • Llamadas a funciones entre otros lenguajes: Evidentemente se puede hacer de otras maneras, pero a través de Gearman se abstrae gran parte de la lógica de comunicación.
  • Escalabilidad: Increíblemente sencillo añadir nuevos Job Servers o Workers en distintos servidores.
  • No bloquea los procesos de Apache.

Éstos podrían ser algunos casos reales de uso de un gestor de colas:

  • Envío de mails: ¿Realmente el usuario debe esperar al procesamiento de envío de un correo? Mejor delegar la tarea al Job Server para que la realice lo más pronto posible sin afectar la carga de la página.
  • Inserciones en Base de Datos: Probablemente haya páginas en las que recolecciones información en una base de datos. Optimizaremos el tiempo de carga de la página si se realiza esta tarea en paralelo.
  • Procesamiento de imágenes: Las funciones de procesamiento de imágenes son pesadas y consumen muchos recursos y tiempo. Ejecutarlas en paralelo en otro servidor podría mejorar el rendimiento de tu sitio notablemente.
  • Indexamiento: Un elemento de tu modelo ha cambiado su información. Posiblemente desees notificar a tu motor de búsqueda para que indexe dichos cambios.

Colas persistentes

A todo esto, cabe a decir que Gearman almacena toda la gestión de mensajes en memoria, por lo que una caída del sistema podría causar la pérdida de tareas pendientes de realizar. Si las tareas que vas a delegar son críticas o bien transaccionales, probablemente necesites emplear colas persistentes (persistent queues).

En la versión probada (Version 0.22, 2011-06-20), se permite el almacenamiento de mensajes en Mysql, Drizzle o Memcached para mensajes asíncronos.

Instalación

Primeramente necesitaremos instalar el demonio de Gearman que hace de Job Server, llamado gearmand, así como la librería en C (libgearman), que podemos descargar desde su site:

  % tar -xvzf  gearmand-version.tar.gz
  % cd gearmand
  % ./configure
  % make
  % make install

Luego instalamos el módulo PHP:

  % tar -xvfz gearman-php-ext.tar.gz
  % cd gearman-php-ext
  % phpize
  % ./configure
  % make
  % make install

y en vuestro fichero de configuración php.ini activamos el módulo.

  extension=gearman.so

podéis combrobar que el módulo está cargado en la configuración mediante:

  $ php -m | grep gearman
  gearman

Si retorna el nombre del módulo significará que está instalado. También podéis comprobarlo mediante un phpinfo() en vuestro código:

Ejemplo de módulo gearman en phpinfo()

 

 

Una vez instalado y contada una buena parte de la teoría (Gearman proporciona también una más detallada documentación en su site), podemos empezar a jugar con un caso sencillo, que explicaremos en un siguiente post :-) .

Referencias

Gearman:
http://gearman.org/

The Gearman CookBook:
http://www.oscon.com/oscon2010/public/schedule/detail/13813

Getting started with Gearman for MySQL:
http://en.oreilly.com/mysql2010/public/schedule/detail/13309

Gearman, build your own distributed platform in 3 hours:
http://www.oscon.com/oscon2009/public/schedule/detail/8206

High gear PHP with Gearman:
http://www.slideshare.net/felixdv/high-gear-php-with-gearman

 

Leave a reply

 

Your email address will not be published.