Gearman — Um breve resumo
Alex Ribeiro
Posted on September 27, 2019
Gearman fornece um framework/aplicação genérica para explorar o trabalho de outras máquinas ou processos mais adequados para um determinado trabalho.
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](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
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\>
Function name to use for jobs (can give many)
-h \<host\>
Job server host
-H
Print this help menu
-p \<port\>
Gearman server port
-t \<timeout\>
Timeout in milliseconds
-i \<pidfile\>
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\>
Unique key to use for job
Worker options\*
-c \<count\>
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.
Posted on September 27, 2019
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.