Usando el Demonio de Colas

Colas y Demonios

Algunas actividades que GNU social necesita hacer, como el broadcast OStatus, SMS, mensajes XMPP y operaciones de TwitterBridge, pueden ponerse en cola y hacer que los hagan bots off-line.

Hay dos mecanismos disponibles para hacer las operaciones offline:

  • Nuevo plugin OpportunisticQM embebido, que está activo por defecto
  • Script retro-compatible del demonio de cola, que puede activarse mediante el archivo de configuración.

Plugin OpoortunisticQM

Este plugin está activo por defecto. Intenta lo mejor posible hacer las peticiones HTTP en segundo plano, como la API o las paginas HTML.

Ya que el sistema de encolamiento está activo por defecto, las publicaciones que emiten se guardaran, por defecto, en la tabla queue_item de la base de datos.

Cada vez que tenga tiempo, OpportunisticQM intentará encargarse de algunas de ellas.

Esta es una buena solución si:

  • no se tiene acceso a la terminal (hosting compartido)
  • no se quiere meter con procesos PHP de larga ejecución
  • ejecuta una instancia GNU social con poco tráfico

Para cualquier otro caso, se deberia considerar activar el demonio para tener mejor rendimiento.

Demonio de cola

Si se quiere usar el script retrocompatible, se tiene que ser capaz de ejecutar scripts de ejecución muy larga, ya sea con el servidor principal o otro. (Si se hace en otro seguirá haciendo falta todos los prerequesitos excepto el servidor web.) Usar un segundo servidor probablemente sea buena idea para las páginas con mucho volúmen.

  1. Se necesitará tener la version «CLI» (command line interface) de PHP instalada en el servidor.

En algunos sistemas operativos, las versiones PHP modernas tienen desactivadas algunas funciones (debido al forking) que son necesarias para que el demonio funcione. Para hacerlo funcionar, hay que asegurarse de que la configuración de php-cli (/etc/php5/cli/php.ini) NO tenga estas funciones debajo de la lista “disable_functions”:

  • pcntl_fork, pcntl_wait, pcntl_wifexited, pcntl_wexitstatus, pcntl_wifsignaled, pcntl_wtermsig

Otras configuraciones recomendadas para mejor rendimiento son:

  • mysqli.allow_persistent = On
  • mysqli.reconnect = On
  1. Si se usa un servidor separado para las colas, hay que instalar GNU social en algún sitio del servidor. Como no se usará un servidor web, puede ser en cualquier sitio y no hay que preocuparse por el archivo .htaccess, pero hay que tener el archivo config.php similar, o mejor aún igual, al del servidor web.

  2. En los config.php (el del servidor y el del demonio de cola), hay que establecer la siguiente variable:

    $config['queue']['daemon'] = true;
    
  3. En el servidor de cola, hay que ejecutar el script scripts/startdaemons.sh.

Esto ejecutará el manejador de colas:

queuedaemon.php
las peticiones para el procesamiento y empuje a OStatus, SMS, XMPP, etc. de los elementos en cola
imdaemon.php
si un plugin de MI está activo (como XMPP)
(plugins)
otros demonios, como los de TwitterBridge, que puede que se haya activado

Estos demonios se reiniciarán automaticamente en caso de fallo, incluyendo fugas de memoria (si se establece memory_limit), pero aún así puede que mueran o se comporten de manera extraña si se pierde la conexión al servidor XMPP o a los servidores de cola.

Por ello, puede ser buena idea usar un servicio de monitor de demonios, como “monit”, para que compruebe su estado y los mantenga en funcionamiento.

Todos los demonios escriben sus ID de proceso (pids) en /var/run/ por defecto. Esto puede ser útil para iniciar, parar y monitorizar los demonios. Si se ejecutan distintas páginas en la misma máquina, para evitar colisiones será necesario cambiar los PID estableciendo directorios específicospara cada página en config.php:

$config['daemon']['piddir'] = __DIR__ . '/../run/';

También es posible usar un servidor STOMP en vez de este pequeño hack para las colas de la BD. Esto se recomienda para un mejor rendimiento, sobretodo si se usa XMPP.