Gearman - Gearman
Autor (es) original (is) | Brad Fitzpatrick |
---|---|
Desenvolvedor (s) | Brian Aker , Eric Day |
lançamento inicial | 8 de janeiro de 2009 |
Versão estável | 1.1.19.1 / 18 de fevereiro de 2020
|
Repositório | github |
Escrito em | C ++ , C , M4 , script Shell |
Sistema operacional | Linux , Windows (sem servidor), OpenVMS |
Disponível em | inglês |
Licença | Licença BSD |
Local na rede Internet | gearman |
Gearman é uma estrutura de aplicativo de código aberto projetada para distribuir tarefas de computador apropriadas para vários computadores, para que tarefas grandes possam ser realizadas mais rapidamente. Em alguns casos, o balanceamento de carga , em vez da velocidade bruta, pode ser o objetivo principal; um servidor da Web, por exemplo, pode usar o Gearman para enviar tarefas para as quais não está otimizado para outro computador (que pode estar sendo executado em uma arquitetura diferente , usando outro sistema operacional ou carregado com uma linguagem de computador mais adequada para uma operação específica) .
Foi originalmente escrito em Perl por Brad Fitzpatrick . Brian Aker e Dia Eric reescreveu o quadro em C .
Como funciona o Gearman
O Gearman atribui a cada computador envolvido uma função como cliente , servidor de trabalho ou trabalhador. Uma máquina de trabalho pode ser atribuída a várias instâncias da função de trabalho, o que permite que computadores mais poderosos concluam mais partes de uma determinada tarefa. As tarefas se originam em um cliente, são transmitidas do cliente para o servidor de tarefas e executadas em um ou mais funcionários. A saída da tarefa concluída é então retornada, novamente por meio do servidor de trabalho, para o cliente onde a tarefa foi originada. Gearman está conceitualmente relacionado ao MapReduce ; Gearman lida com MapReduce permitindo que os nós de trabalho mapeiem o trabalho para outros trabalhadores, com o trabalhador original atuando como o redutor.
O Gearman realiza a coalescência no trabalho enviado por um cliente. Se dois ou mais clientes solicitarem que o trabalho seja concluído no mesmo corpo de trabalho, seja vendo que os mesmos blocos estão sendo enviados ou usando o valor único enviado pelo cliente, ele unirá o trabalho para que apenas um trabalhador seja usado. Ele faz isso especificamente para evitar problemas de rebanho trovejantes que são comuns a falhas de acerto de cache.
Para mitigar o dano que seria feito se um servidor de trabalho (ou sua conexão de rede) falhasse, os clientes podem ser configurados com mais de um servidor de trabalho atribuído; se o primeiro servidor de trabalho atribuído falhar, outro pode ser substituído de forma transparente.
Gearman implementa um protocolo que consiste em pacotes binários contendo solicitações e respostas; este protocolo define a estrutura das mensagens que passam entre as três partes de uma implementação do Gearman. Por padrão, o protocolo Gearman usa a porta TCP 4730. Anteriormente, ele operava na porta 7003, mas isso entrava em conflito com o intervalo de portas AFS e a nova porta (4730) foi atribuída pela IANA .
O nome "Gearman" foi escolhido como anagrama para "Manager", "uma vez que despacha trabalhos a serem executados, mas não faz nada de útil por si mesmo."
Recursos
- Novas tentativas de trabalho
- Programação round robin
- Coalescência
- Armazenamento de persistência por meio de:
- libmemcached
- libdrizzle
- SQLite
- MySQL
- Postgres
- tokyocabinet
- Redis (não lançado - atualmente em desenvolvimento)
- MongoDB (não lançado - atualmente em desenvolvimento)
Implementações
- Gearmand, até a versão 1.1.12
- Gearmand, da versão 1.1.13
- java-gearman-service
- Gearman :: Server
- TclGearman
Clientes
Atualmente, existem bibliotecas de cliente para C, Perl, Node.js, Python, PHP, Ruby, Java, .NET, JMS, MySQL, PostgreSQL e Drizzle .
Software semelhante
links externos
- http://danga.com/words/2007_06_usenix/usenix.pdf
- http://gearman.org/documentation/
- http://gearman.org/download/
- http://lists.danga.com/pipermail/gearman/2008-April/000076.html
- https://web.archive.org/web/20081209012837/http://krow.livejournal.com/628025.html
- GearmanBundle para projetos Symfony2