O Gearman(www.gearman.org) é um framework genérico para realizar e distribuir tarefas em um ou mais servidores em cluster, multilinguagem, altamente escalável.

Ele permite que seu aplicativo execute tarefas em paralelo, balancear a carga do processamento e até mesmo chamar códigos escritos em outras linguagens. Partindo do princípio que um servidor web(servir páginas) não pode executar tarefas, mesmo por pouco tempo. Com isso você economiza recursos da máquina, você deve ter máquinas para execução de tarefas.

A arquitetura Gearman

Uma arquitetura baseada no Gearman tem três tipos de elementos:

Servidores

Servidores são instâncias do programa gerenciador. Comportam-se como proxies, encaminhando solicitações de serviço a workers que estejam disponíveis.

Clientes

Os clientes conversam com os servidores para solicitar a execução de funções de trabalho.

Workers

Workers são processos que encaminham solicitações de trabalho através da execução de funções codificadas. Cada worker disponibiliza um conjunto de funções codificadas registrando-as em um servidor.

Essa arquitetura pode ser tolerante a falhas através da execução de mais de uma tarefa de trabalho do servidor por máquina gerenciando muitos workers.

Outra característica interessante do Gearman é que suas funções workers podem ser escritas em muitas linguagens de programação diferentes, tais como C, PHP e outras bastante conhecidas. Dessa forma, você pode escolher a melhor linguagem de programação para o trabalho.

Você pode por exemplo escrever um programa em C ou em C++ para executar uma tarefa pesada, e fazer com que ela se auto-registre como daemon worker. Dessa forma, bibliotecas C/C++ podem ser chamadas do PHP, sem a necessidade de transformá-las em extensões PHP, evitando lidar com problemas de segurança.

Tarefas sincronizadas

São tarefas que serão executadas e o cliente aguardará sua conclusão, para poder continuar qualquer outra execução.

Você pode utilizar, por exemplo, para geração de arquivos, consumo de APIs ou processamento de imagens.

Adicionalmente, um worker pode lidar com muitas solicitações síncronas, uma depois da outra. Uma execução subsequente de trabalho de um worker pode reusar recursos computados durante a execução prévia do mesmo trabalho. Isso pode economizar tempo precioso quando da execução de solicitações repetidas que precisam dos mesmos recursos.

Essa possibilidade pode ser usada para criar pools de conexão de bancos de dados. A primeira execução de um processo worker pode abrir uma conexão com o banco de dados e executar algumas queries.

Uma segunda execução do mesmo trabalho worker não precisa lidar com a sobrecarga da abertura da conexão do banco de dados, uma vez que ela já foi aberta no primeiro processamento.

Tarefas assíncronas

São tarefas em que serão executadas e o cliente que há requisitou não irá esperar a resposta do termino da tarefa.

O Gearman mantém uma fila interna de jobs e delega trabalhos pendentes para workers assim que sejam liberados.

Isso pode ser útil em tarefas de longa duração, como o envio de notificações de e-mail, postagem de mensagens no Twitter etc.

Pode também ser útil na implementação de uma abordagem map/reduce, dividindo grandes tarefas e muitas pequenas sub-tarefas. Um bom exemplo dessa abordagem é um sistema de log descentralizado.

Distribuindo trabalho entre servidores múltiplos

Você pode implantar múltiplos servidores de trabalho em diferentes máquinas, de forma a fazer a arquitetura mais tolerante a falhas. Evitando falhas ou um servidor mais sobrecarregado que o outro.

Quando um cliente faz uma requisição ao servidor, se ele estiver ocupado, automaticamente será escolhido outro.

Filas de job persistentes

Por padrão, o Gearman mantém todas as filas de job armazenadas na memória. Isso significa que se um servidor de trabalho para ou reinicia sem terminar todas as filas de jobs, esses trabalhos nunca serão executados.
Por outro lado, o Gearman pode usar filas persistentes para gerenciar solicitações de trabalho assíncronas para resolver o problema.

Isso é importante porque um trabalho assíncrono não é ligado a nenhum client. Assim, não seria possível para o client que iniciou o processo detectar uma falha e solicitar o trabalho novamente.

O módulo de fila persistente do Gearman salva os detalhes da solicitação de trabalho em um armazenador persistente, usualmente um banco de dados.

O servidor de trabalho espera por workers livres que possam executar os trabalhos requisitados na fila. Quando o trabalho é finalizado, ele é removido da fila.

Se um servidor de job falha, quando ele reinicia, a fila persistente é usada para recarregar a fila interna com os jobs pendentes, para serem executados.

Veja mais em: http://gearman.org/documentation

Exemplos: http://gearman.org/use_cases

Compartilhar:

Deixe uma resposta

Fechar Menu