DEV Community

Alex Ribeiro
Alex Ribeiro

Posted on • Originally published at Medium on

2

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.


Billboard image

Imagine monitoring that's actually built for developers

Join Vercel, CrowdStrike, and thousands of other teams that trust Checkly to streamline monitor creation and configuration with Monitoring as Code.

Start Monitoring

Top comments (0)

Heroku

This site is powered by Heroku

Heroku was created by developers, for developers. Get started today and find out why Heroku has been the platform of choice for brands like DEV for over a decade.

Sign Up

👋 Kindness is contagious

Explore a sea of insights with this enlightening post, highly esteemed within the nurturing DEV Community. Coders of all stripes are invited to participate and contribute to our shared knowledge.

Expressing gratitude with a simple "thank you" can make a big impact. Leave your thanks in the comments!

On DEV, exchanging ideas smooths our way and strengthens our community bonds. Found this useful? A quick note of thanks to the author can mean a lot.

Okay