Entendendo o uso do gearman com o memcached como armazenamento persistente

0

Configurei o Gearman no meu ambiente Centos com o cliente e os trabalhadores em execução na mesma máquina. Corre bem.

Estou tentando usar o gearman com armazenamento persistente do memcached. Eu compilei e instalei gearman com o libmemcached. Então, eu apenas inicio meu serviço memcached e, em seguida, executo

gearmand 
PARAMS="-q
libmemcached
--libmemcached-servers=127.0.0.1:11211"

Agora eu inicio novos trabalhos sem nenhum funcionário, posso ver o trabalho enfileirado na Ui Gearman

Eu agora tento verificar os trabalhos por telnet no memcached e não consigo encontrar nada. Em seguida, parei o serviço do memcached e, em seguida, executei

gearmand 
PARAMS="-q
libmemcached
--libmemcached-servers=127.0.0.1:11211"

Ainda funciona bem, sem erros nos logs. Ainda posso ter clientes e trabalhadores em funcionamento. Eu não estou conseguindo entender se o gearman está usando o memcached.

Temos muitos trabalhos de codificação de vídeo para fazer. Meu objetivo final é ter o memcached na AWS e depois armazenar minha fila lá. Essa é uma boa ideia? E eu estou me aproximando disso corretamente?

EDITAR

Como sugerido na resposta, eu mudei os trabalhos em primeiro plano para trabalhos em segundo plano e também tentei usar o mysql como a fila do Gearman. Eu fiz o seguinte:

Eu criei o gearman com libmysql.

 * CPP Flags:                  -fvisibility=hidden
   * LIBS:
   * LDFLAGS Flags:
   * Assertions enabled:        no
   * Debug enabled:             no
   * Warnings as failure:       no
   * Building with libsqlite3   no
   * Building with libdrizzle   yes
   * Building with libmemcached yes
   * Building with libpq        no
   * Building with tokyocabinet no
   * Building with libmysql     yes

Dentro do meu arquivo gearmand.conf, adicionei o seguinte, referindo-me a outra documentação:

PARAMS="--queue-type=mysql \
--mysql-host=localhost \
--mysql-port=3306 \
--mysql-user=root \
--mysql-db=deliver \
--mysql-table=gearman"

Eu posso conectar ao meu mysql local com root e há um banco de dados chamado "deliver". Quando executo o servidor de comando e adiciono novos trabalhos e trabalhadores, não vejo a tabela "gearman" criada.

Os processos parecem funcionar bem. Eu tentei o modo detalhado de log e verificação de arquivo gearmand.log, mas não há nada relacionado ao mysql. Onde devo estar olhando?

    
por user3288346 25.10.2015 / 07:29

1 resposta

1

Há algumas coisas a serem notadas sobre as filas persistentes no Gearman. Primeiro, as filas persistentes são usadas apenas para trabalhos em segundo plano. Isso significa que se o job tiver um cliente conectado (ou seja, bloquear), a fila persistente não será usada (, portanto, se você estiver testando isso em um exemplo típico de hello-world / reverse-string diretamente, você ganhou) Não vejo nada na fila ).

Do manual do técnico de equipe ( mencionado acima ).

The persistent queue is only enabled for background jobs because foreground jobs have an attached client. If a job server goes away, the client can detect this and restart the foreground job somewhere else (or report an error back to the original caller). Background jobs on the other hand have no attached client and are simply expected to be run when submitted.

Em segundo lugar, o gearman mantém uma fila na memória nativamente, mas retornos de chamada são usados para encaminhar / remover tarefas da fila persistente conforme necessário (caso o servidor de tarefas fique inativo), portanto existe a possibilidade de o trabalho ser concluído antes de você poderia buscar qualquer coisa do servidor do memcached?

Você poderia testar isso mais concretamente executando um trabalho de teste com, digamos, sleep(100) ou algo semelhante, e é possível que você consiga verificar o memcached dessa maneira enquanto o trabalho ainda está em execução.

Note também que existem alguns bugs conhecidos no gearmand com o tipo-de-libmemcached em algumas distros como Debian (pelo menos que eu saiba) onde ele tem algumas condições de corrida. Você pode tentar executar o comando gearmand com --verbose DEBUG para esses.

    
por 25.10.2015 / 07:49

Tags