Gearman — Um breve resumo
Tags: gearman, scheduling
Published: 2019-09-27 12:33:21

---
title: Gearman — Um breve resumo
published: true
tags: gearman,scheduling
canonical_url: https://medium.com/alex-ribeiro/gearman-um-breve-resumo-183896b82152
---

![](https://cdn-images-1.medium.com/max/480/1*Vwt9QsSurFa0BF-Gw0GgjQ.png)

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.

![](https://cdn-images-1.medium.com/max/479/1*AnWo6lxBowRxe5fbDljlGg.png)

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.

![](https://cdn-images-1.medium.com/max/478/1*5rFs1UZt95PLS3l_HVYhlQ.png)

Em outras palavras, é o sistema nervoso de como o processamento distribuído se comunica.

![](https://cdn-images-1.medium.com/max/390/1*GXfGLe0JikBX85G66tAZ9g.png)

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:

![](https://cdn-images-1.medium.com/max/464/1*UoJe8RQnFgZ0JaKKeRF7ZA.png)

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

![](https://cdn-images-1.medium.com/max/366/1*jOTJZxtTg136qfW2eagksw.png)

> 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/](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.

* * *