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;
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