DEV Community

Alex Ribeiro
Alex Ribeiro

Posted on • Originally published at Medium on

Gearman — Um breve resumo

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

4. Reiniciar o Apache2 ou PHP FPM

$ service php7.0-fpm restart
$ service apache2 restart
Enter fullscreen mode Exit fullscreen mode

Execução

Executar o servidor Gearman com o seguindo comando:

$ gearmand -d
Enter fullscreen mode Exit fullscreen mode

Verificar o status do servidor:

$ gearadmin --status
worker 0 1 2
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen 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.
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

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!");
Enter fullscreen mode Exit fullscreen mode

Worker:

\<?php
$worker = new GearmanWorker();
$worker-\>addServer();
$worker-\>addFunction("reverse\_string", function ($job) {
 return strrev($job-\>workload()) . "\n";
});
while ($worker-\>work());
Enter fullscreen mode Exit fullscreen mode

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

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.


Top comments (0)