quinta-feira, 10 de novembro de 2011

Codeigniter 2 + Background Job + Gearman


O Gearman distribui o processamento de tarefas em vários workers, permite executar tarefas em paralelo e até mesmo tarefas em hosts separados.  É possível trabalhar com tarefas síncronas ou assíncronas usando uma fila de jobs que pode ser persistente ou armazenada em memória.



Instalando Gearman no Ubuntu
Instalar o pacote via apt-get
$ sudo apt-get install gearman-job-server
Incluir as linhas no arquivo /etc/default/gearman-job-server para persistir a fila de tarefas.
# Parameters to pass to gearmand.
PARAMS="--listen=127.0.0.1 -q libsqlite3 --libsqlite3-db=/tmp/gearman.sqlite"
Reiniciar o serviço com as novas configurações:
$ sudo /etc/init.d/gearman-job-server restart
Para consultar a lista de tarefas pendentes na fila:
$ sqlite3 /tmp/gearman.sqlite
sqlite> select * from gearman_queue;

Configurando o Gearman-Monitor
Baixar os arquivos do projeto em https://github.com/yugene/Gearman-Monitor no  diretório público do servidor http.  As configurações podem ser modificadas no arquivo /var/www/gearman-monitor/_config.php

É possivel monitorar os servidores disponíveis, a quantidade de workers registrados a quantidade de jobs rodando e aguardando na fila.


Configurando extensão PHP
Instalar o pacote pelo pecl http://pecl.php.net/package/gearman
$ sudo pecl install gearman

Configurando a Lib Gearman no Codeigniter

Basta copiar os arquivos e configurar conforme as instruções do link http://codeigniter.com/wiki/Gearman


Criando o Worker
A idéia é que o redimensionamento das imagens não trave a navegação do cliente.  De maneira assíncrona o worker redimensiona a  imagem para todos os tamanhos necessários e quando concluído envia um email para o cliente ou até poderia atualizar as imagens em real-time com o uso de alguma tecnologia de pushing com websockets.

Criar o arquivo application/workers/resize_worker.php com o conteúdo abaixo.  Este é o worker que recebe e realizar o trabalho de redimensionar as imagens em background.

Para iniciar o worker basta executar o script php.  Depois é possível observar no Gearman-Monitor este worker registrado e aguardando a solicitação dos clientes.
$ sudo php <app>/application/workers/resize_worker.php

Continuação:
Nos próximos posts continuarei com a configuração dos serviços de monitoramento e scripts para administração do Gearman usando o Monit e também como integrar melhor os workers com a stack do Codeigniter para reutilizar as bibliotecas padrões do framework.

Referências:
http://gearman.org/
http://www.phpclasses.org/blog/post/108-Distributing-PHP-processing-with-Gearman.html
http://imasters.com.br/artigo/21385/php/processamento-distribuido-em-php-utilizando-gearman-parte-1
http://pecl.php.net/package/gearman


Nenhum comentário:

Postar um comentário