Gearman — Um breve resumo
Gearman fornece um framework/aplicação genérica para explorar o trabalho de outras máquinas ou processos de forma mais adequada para um determinado cenário.
Permite que você trabalhe em paralelo, equilibrar processamento e chamar funções entre linguagens distintas.
Ele pode ser utilizado em uma variedades de aplicações, desde sites de alta disponibilidade até o transporte de eventos de replicação de banco de dados.
Em outras palavras, é o sistema nervoso de como o processamento distribuído se comunica.
Alguns pontos fortes sobre Gearman:
Open Source
Multi-linguagem
Flexível
Rápido
Incorporável
Nenhum ponto de falha
Sem limites no tamanho dos dados
Escalável
Instalação
Esta instalação tem como foco a possibilidade de executar scripts com PHP. Caso não seja necessário o uso do PHP, seguir somente até o segundo passo e retirar referências ao PHP.
1. Instalar e atualizar o Gearman PPA
apt-get install software-properties-common
add-apt-repository ppa:gearman-developers/ppa
apt-get update
2. Instalar Gearman e outros componentes e ferramentas
apt-get install gearman gearman-tools gearman-job-server libgearman-dev php7.0-dev php-pear wget unzip re2c
apt-get upgrade
3. Baixar, compilar o gearman pecl module e adicionar ao php.ini
cd /tmp/
wget https://github.com/wcgallego/pecl-gearman/archive/master.zip
unzip master.zip
cd pecl-gearman-master
phpize
./configure
make
make install
echo "extension=gearman.so" > /etc/php/7.0/mods-available/gearman.ini
phpenmod -v ALL -s ALL gearman
4. Reiniciar o Apache2 ou PHP FPM
service php7.0-fpm restart
service apache2 restart
Execução
Executar o servidor Gearman com o seguindo comando:
gearmand -d
Verificar o status do servidor:
gearadmin --status
Resultado esperado: worker 0 1 2
Na linha de resposta do status, respectivamente, temos o nome da função (worker), o número de tasks na fila (0), o número de jobs rodando (1) e o número de workers capazes (2).
Ferramentas de linha de comando
Gearman
Com o Gearman, você pode executar funções de clients e workers por linha de comando.
$ gearman -H
Common options
-f
Function name to use for jobs (can give many)
-h
Job server host
-H
Print this help menu
-p
Gearman server port
-t
Timeout in milliseconds
-i
Create a pidfile for the process
-n
In client mode run one job per line, in worker mode send data packet for each line
-N
Same as -n, but strip off the newline
Client options
-b
Run jobs in the background
-I
Run jobs as high priority
-L
Run jobs as low priority
-P
Prefix all output lines with functions names
-s
Send job without reading from standard input
-u
Unique key to use for job
Worker options*
-c
Number of jobs for worker to run before exiting
-w
Run in worker mode
Gearmand
Gearmand é utilizado para iniciar e parametrizar o servidor via linha de comando.
$ gearmand -h
General options
-b [ --backlog ] arg (=32)
Number of backlog connections for listen.
--check-args
Check command line and configuration file argments and then exit.
-d [ --daemon ]
Daemon, detach and run in the background.
-f [ --file-descriptors ] arg
Number of file descriptors to allow for the process (total connections will be slightly less). Default is max allowed for user.
-h [ --help ]
Print this help menu.
-j [ --job-retries ] arg (=0)
Number of attempts to run the job before the job server removes it. This is helpful to ensure a bad job does not crash all available workers. Default is no limit.
-l [ --log-file ] arg
Log file to write errors and information to. Turning this option on also forces the first verbose level to be enabled.
-L [ --listen ] arg
Address the server should listen on. Default is INADDR_ANY.
-p [ --port ] arg (=4730)
Port the server should listen on.
-P [ --pid-file ] arg
File to write process ID out to.
-r [ --protocol ] arg
Load protocol module.
-R [ --round-robin ]
Assign work in round-robin order per worker connection. The default is to assign work in the order of functions added by the worker.
-q [ --queue-type ] arg
Persistent queue type to use.
-t [ --threads ] arg (=4)
Number of I/O threads to use. Default=4.
-u [ --user ] arg
Switch to given user after startup.
-v [ --verbose ] arg (=v)
Increase verbosity level by one.
-V [ --version ]
Display the version of gearmand and exit.
-w [ --worker-wakeup ] arg (=0)
Number of workers to wakeup for each job received. The default is to wakeup all available workers.
HTTP:
--http-port arg (=8080)
Port to listen on.
sqlite
--libsqlite3-db arg
Database file to use.
--libsqlite3-table arg (=gearman_queue)
Table to use.
Memcached(libmemcached)
--libmemcached-servers arg
List of Memcached servers to use.
Drizzle/MySQL(libdrizzle)
-host arg
Host of server.
-port arg
Port of server. (by default Drizzle)
-uds arg
Unix domain socket for server.
-user arg
User name for authentication.
-password arg
Password for authentication.
-db arg
Schema/Database to use.
-table arg
Table to use.
-mysql arg
Use MySQL protocol.
Postgres
--libpq-conninfo arg
PostgreSQL connection information string.
--libpq-table arg (=queue)
Table to use.
Gearadmin
Gearadmin é uma ferramenta de linha de comando para manipular os servidores do Gearman.
$ gearadmin --help
--help
Provice help about the program.
--create-function
Create a function from the server.
-h [ --host ] arg (=localhost)i
Connect to the host
-p [ --port ] arg (=4730)
Port number or service to use for connection
--drop-function
Drop a function from the server.
--server-version
Fetch the version number for the server.
--server-verbose
Fetch the verbose setting for the server.
--status
Status for the server.
--workers
Workers for the server.
--shutdown
Shutdown server.
Exemplo
Vamos criar dois scripts PHP, um será para o client e o outro para o worker.
Client:
<?php
$client = new GearmanClient();
$client->addServer();
print $client->do("reverse_string", "Hello World!");
Worker:
<?php
$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction("reverse_string", function ($job) {
return strrev($job->workload()) . "\n";
});
while ($worker->work());
Execução do Worker:
Foi executado o script worker.php em segundo plano.
Ao verificar o status do servidor, pode-se notar que foi registrado a função reverse_string com um worker registrado como capaz.
Caso seja executado uma segunda vez o mesmo worker, a quantidade de workers capazes irá mudar.
Execução do Client
Ao executar o client.php, já obtivemos o retorno programado no worker. Com isso, validamos que o mesmo está funcionando.
Conclusão
Esta aplicação é ótima para diversas situações onde se encontra a necessidade de controlar processos específicos, aliviando o uso acumulado dos recursos do servidor.
Referências
- Gearman — http://gearman.org/
Obrigado e até mais!
Se você gostou do texto, me acompanhe e terá mais informações em breve.
Quer saber mais sobre o assunto ou tem alguma dúvida? Deixe um comentário. Ah, estou aberto a críticas também.