LinuxParty
Distribuye la carga de tus aplicaciones PHP con Gearman 🛠️
Gearman es una solución muy efectiva para descargar carga de las operaciones web y procesar tareas de manera eficiente y escalable. Con herramientas como GearmanManager, puedes gestionar tu infraestructura de procesamiento en segundo plano de forma sencilla y organizada.
Gearman es un framework open‑source para distribuir tareas de cómputo en varios procesos o servidores. Permite a tu aplicación web delegar tareas costosas a procesos en segundo plano, mejorando el rendimiento y la capacidad de respuesta (sitepoint.com, en.wikipedia.org).
¿Qué es Gearman?
Gearman centraliza el envío ("client"), distribución ("job server") y ejecución ("worker") de tareas. Fue originalmente creado por Brad Fitzpatrick en Perl y reescrito en C por Brian Aker y Eric Day (en.wikipedia.org). Usado por plataformas como Digg y Yahoo, puede procesar miles de tareas por segundo (sitepoint.com). Beneficios clave
- Paralelización: varias tareas simultáneas.
- Equilibrio de carga: se distribuyen entre múltiples workers.
- Multilenguaje: clientes y workers pueden estar en PHP, Python, Perl, etc. (en.wikipedia.org).
- Desacople: tareas pesadas (procesado de imágenes, envíos masivos de emails...) no bloquean peticiones web.
Instalación de Gearman
1. Servidor Gearman
En Debian/Ubuntu:
sudo apt-get install gearman-job-server libgearman-dev
O compílalo desde fuente:
wget https://launchpad.net/gearmand/trunk/0.8/+download/gearmand-0.8.tar.gz tar xzf … ./configure && make && sudo make install sudo ldconfig
2. Extensión PHP
En Ubuntu:
sudo apt-get install php‑gearman
O vía PECL:
pecl install gearman
# luego añade "extension=gearman.so" en php.ini
Verifica instalación:
<?php var_dump(gearman_version()); ?>
Ejemplo básico: cliente y worker
Worker (worker.php)
<?php $worker = new GearmanWorker(); $worker->addServer('127.0.0.1', 4730); $worker->addFunction('reversa', function($job) { return strrev($job->workload()); }); while ($worker->work()); Cliente (client.php) <?php $client = new GearmanClient(); $client->addServer('127.0.0.1', 4730); echo $client->do('reversa', 'LinuxParty'), "\n";
Al ejecutar estos scripts, el output será:
yatniP xuniL
Este ejemplo demuestra cómo externalizar tareas sin bloquear el flujo web.
Casos reales y buenas prácticas
Procesado de imágenes
Un sistema web que genera miniaturas descompone el flujo así:
- Usuario sube imagen.
- Web App envía tarea "resize" al servidor Gearman.
- Worker procesa la imagen y la almacena.
- Página web puede notificar o refrescar gracias a una cola de trabajo.
Emails y notificaciones
Enviar emails en segundo plano reduce la latencia. El cliente envía la tarea y sigue atendiendo peticiones mientras los workers gestionan los envíos. GearmanManager: gestión avanzada de workers
GearmanManager es un proyecto PHP que:
- Gestiona múltiples procesos worker.
- Permite configuración mediante ini (número de workers, reinicios auto…).
- Soporta PECL y PEAR.
- Monitoriza cambios en el directorio de workers para reinicios dinámicos (brian.moonspot.net, github.com).
Configuración típica en manager.ini:
[GearmanManager] worker_dir=./workers count=5 max_worker_lifetime=3600 auto_update=1 [resize] count=3 [email] count=2
Flujo de trabajo resumido
Componente | Acción principal |
---|---|
Cliente PHP | Envía tarea al servidor Gearman |
Servidor Gearman | Distribuye tarea entre workers |
Worker PHP | Ejecuta la tarea y devuelve resultados |
Cliente PHP | Recupera el resultado según necesidad |

-
Documentación
- Cómo calcular la distancia con el Horizonte.
- La paradoja de la escalera en el granero
- Biblioteca de Alejandría, Collection Manager.
- La Armada Invencible, Agosto de 1588
- Recorridos del Terror en Edimburgo.
- Los proyectos de digitalización de las grandes bibliotecas públicas se financian
- ¿Nos sobrevivirán nuestras creaciones digitales?
- El Manual de Linux, TutorialLinux, supera las 10.000 descargas.
- Adn.es - cesa sus actividades por no tener perspectivas de futuro
- Comparativa Alfresco vs Nuxeo (gestión documental libre)
- Gestiona fácil los documentos, con LogicalDoc (DMS).
- ¿Es lo mismo un Tutorial que un Manual?