Problema de concorrência de jobs do Sidekiq

Temos um problema com o Sidekiq rodando em múltiplos pods.

Cenário 1:
Em desenvolvimento, temos uma única réplica, o que significa um único pod rodando. Não temos nenhum problema aqui.
Para sua informação,
Verificado: forum_url/sidekiq/busy (1 processo rodando)

Cenário 2:
Em preprodução e produção, temos mais de uma réplica (mais de um pod rodando). Estamos enfrentando um problema de concorrência do Sidekiq (o job está rodando, mas pulando a execução do código).

Para sua informação,
Verificado: forum_url/sidekiq/busy (Mais de 1 processo rodando). Um processo Sidekiq rodando para cada pod.

Corrija-me,
É normal rodar mais de um processo Sidekiq?
Se não for normal, como corrigir o problema de concorrência do job?

Para sua informação, estamos usando o Discourse Docker

Quais são os passos apropriados que devo seguir. Agradeço desde já.

O que você quer dizer exatamente com um problema de “concorrência”? Você pode elaborar? O que está acontecendo fora de ordem exatamente?

Um job do Sidekiq sendo adicionado a uma fila não garante a ordem geral de execução, pois existem filas diferentes com prioridades diferentes, então alguns jobs podem ficar à frente de outros.

Também “pulando a execução do código”. Você pode elaborar? Que código? Quando um job é executado, o código não será pulado. Você verificou seus /logs para ver se nada está quebrando?

E esteja ciente de que você pode estar executando uma instalação não suportada, o que pode ser a raiz dos seus problemas…

4 curtidas

Olá @merefield Obrigado pela resposta

O que você quer dizer exatamente com problema de “concorrência”? Você pode elaborar? O que está acontecendo fora de ordem exatamente?

Como mencionei acima, nos ambientes de pré-produção e produção, mais de um processo sidekiq está em execução.

Não tenho certeza! O job pode ficar confuso ao “tiger” qual processo ele deve pegar por causa do processo multi worker.

Também “pulando a execução do código”. Você pode elaborar? Que código? Quando um job é executado, o código não será pulado. Você verificou seus /logs para ver se nada está quebrando?

Estamos executando alguns jobs sidekiq personalizados que exportam algumas estatísticas personalizadas em um arquivo CSV. O job é executado periodicamente. Às vezes, a exportação do arquivo não acontece. O job é executado sem nenhuma mensagem de erro.

Por exemplo:

Para fins de teste, se eu clicar neste botão de gatilho, o job é executado, mas a exportação do arquivo não acontece às vezes.

Para sua informação, no ambiente de desenvolvimento, o mesmo código está em execução, mas é apenas um processo worker sidekiq. Aqui está funcionando bem. Estou imaginando que o problema é devido a mais de um processo sidekiq em execução na produção/pré-produção.

Você verificou seus /logs para ver se nada está quebrando?

Sim, não obtivemos nenhum erro relacionado ao job.

E esteja ciente de que você pode estar executando uma instalação não suportada

Estamos executando a versão mais recente do discourse.

Obrigado

Você tem que esperar concorrência. É um sistema de lotes multithread.

Algumas pessoas também estão no Kubernetes, mas isso não é suportado aqui.

Acho que você terá que adicionar algum log ao seu job para descobrir o que está acontecendo.

Este é o seu próprio código personalizado, certo?

Já adicionamos o registro em nosso código personalizado. Não há problema em nosso código.

Sim

Sim, estamos usando o cluster Kubernetes.

Apenas uma pergunta!

O sidekiq deve executar apenas um processo? ou rodar mais de um processo sidekiq está bom?

Como qualquer sistema de lotes decente, ele é projetado para executar mais de um trabalho por vez, caso contrário, não escalaria.

Certifique-se de levar isso em consideração ao projetar seus trabalhos.