Como Configurar Filas do Sidekiq para um Mastodon Auto-hospedado
🔍 WiseChecker

Como Configurar Filas do Sidekiq para um Mastodon Auto-hospedado

Ao administrar seu próprio servidor Mastodon, tarefas em segundo plano como envio de e-mails, processamento de mídia e entrega de postagens para outras instâncias são gerenciadas pelo Sidekiq. Se as filas do Sidekiq não estiverem configuradas corretamente, sua instância pode ficar lenta, sem resposta ou falhar ao entregar mensagens. Este artigo explica como a configuração de filas do Sidekiq funciona no Mastodon e fornece instruções passo a passo para configurar vários processos Sidekiq em uma instância auto-hospedada. Ao final, você entenderá como alocar recursos para cada fila e evitar problemas comuns de desempenho.

Principais Conclusões: Configuração de Filas do Sidekiq para Mastodon

  • Arquivos de serviço systemd para Sidekiq: Defina unidades de serviço separadas para cada grupo de filas para controlar concorrência e uso de recursos.
  • Variável de ambiente QUEUE: Especifica quais filas um processo Sidekiq manipula, como default, push, mailers e scheduler.
  • Configuração de concorrência do Sidekiq: Limita o número de threads que um único processo Sidekiq usa, evitando esgotamento de CPU e memória.

O Que São Filas do Sidekiq no Mastodon e Por Que Elas São Importantes

O Mastodon usa o Sidekiq para processar tarefas em segundo plano de forma assíncrona. Cada tarefa pertence a uma fila com base em seu tipo. A configuração padrão de filas do Mastodon inclui cinco filas principais: default, push, mailers, pull e scheduler. A fila default lida com processamento de mídia, geração de pré-visualizações de links e atualizações da timeline local. A fila push entrega postagens para instâncias remotas. A fila mailers envia e-mails de confirmação e notificação. A fila pull busca dados de instâncias remotas. A fila scheduler executa tarefas periódicas como limpeza de registros expirados.

Sem processos Sidekiq dedicados para cada fila, um único processo precisa lidar com todos os tipos de tarefas. Se a fila push estiver sobrecarregada, a entrega de e-mails pode ser atrasada. Se o processamento de mídia estiver pesado, a federação pode ficar lenta. Atribuir processos Sidekiq separados a diferentes grupos de filas evita que um tipo de tarefa prejudique os outros. Essa configuração é essencial para instâncias com mais de algumas centenas de usuários ativos ou para aquelas que priorizam baixa latência na federação.

Pré-requisitos

Antes de começar, verifique se sua instalação do Mastodon está rodando em um servidor Linux com systemd. Você precisa de acesso root ou sudo para modificar arquivos de serviço. Sua implantação do Mastodon deve usar a estrutura de diretórios padrão, geralmente localizada em /home/mastodon/live. Você também precisa saber o número de núcleos de CPU e a quantidade de RAM disponível no servidor, pois esses valores determinam as configurações de concorrência que você definirá.

Passos para Configurar Filas do Sidekiq no Mastodon

Siga estes passos para criar processos Sidekiq dedicados para cada grupo de filas. Este exemplo assume que você deseja quatro processos Sidekiq: um para default e push, um para pull, um para mailers e um para scheduler. Ajuste os grupos de filas com base na carga de trabalho da sua instância.

  1. Pare o serviço Sidekiq existente
    Execute sudo systemctl stop mastodon-sidekiq para parar o processo Sidekiq único padrão. Em seguida, desabilite-o com sudo systemctl disable mastodon-sidekiq para evitar que ele inicie na inicialização.
  2. Crie um arquivo de serviço Sidekiq para as filas default e push
    Crie um arquivo em /etc/systemd/system/mastodon-sidekiq-default.service com o seguinte conteúdo. Substitua youruser pelo usuário do sistema Mastodon, geralmente mastodon. Defina o valor de concorrência com base no número de núcleos de CPU; um ponto de partida comum é 10 threads por núcleo.

[Unit]
Description=mastodon-sidekiq default+push
After=network.target

[Service]
Type=simple
User=mastodon
WorkingDirectory=/home/mastodon/live
Environment="RAILS_ENV=production"
Environment="DB_POOL=25"
Environment="QUEUES=default,push"
ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -c 15 -q default -q push
TimeoutSec=300
Restart=always

[Install]
WantedBy=multi-user.target

  1. Crie um arquivo de serviço Sidekiq para a fila pull
    Crie /etc/systemd/system/mastodon-sidekiq-pull.service com a mesma estrutura, mas altere a variável de ambiente QUEUES e a linha ExecStart para usar a fila pull. Por exemplo: ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -c 10 -q pull.
  2. Crie um arquivo de serviço Sidekiq para a fila mailers
    Crie /etc/systemd/system/mastodon-sidekiq-mailers.service. Defina a concorrência mais baixa, como 5, porque a entrega de e-mail é limitada por I/O e não precisa de muitas threads. Use ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -c 5 -q mailers.
  3. Crie um arquivo de serviço Sidekiq para a fila scheduler
    Crie /etc/systemd/system/mastodon-sidekiq-scheduler.service. A fila scheduler executa tarefas periódicas e deve ter concorrência de 1 ou 2. Use ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -c 2 -q scheduler.
  4. Recarregue o systemd e habilite os novos serviços
    Execute sudo systemctl daemon-reload. Em seguida, habilite cada serviço: sudo systemctl enable mastodon-sidekiq-default, sudo systemctl enable mastodon-sidekiq-pull, sudo systemctl enable mastodon-sidekiq-mailers e sudo systemctl enable mastodon-sidekiq-scheduler.
  5. Inicie todos os serviços Sidekiq
    Execute sudo systemctl start mastodon-sidekiq-default, depois inicie os outros três serviços da mesma forma. Verifique se cada um está rodando com sudo systemctl status mastodon-sidekiq-default.
  6. Monitore o desempenho das filas
    Use a interface web do Sidekiq em https://seudominio/sidekiq para visualizar o tamanho das filas e a latência de processamento. Ajuste os valores de concorrência se alguma fila acumular consistentemente mais de 100 tarefas.

Erros Comuns e O Que Evitar ao Configurar Filas do Sidekiq

Definir Concorrência Muito Alta

Um erro comum é definir o valor de concorrência igual ao número total de threads de CPU sem considerar a memória. Cada thread do Sidekiq consome aproximadamente 50 MB de RAM. Se você definir concorrência para 25 e executar quatro processos, precisará de pelo menos 5 GB de RAM apenas para o Sidekiq. Monitore o uso de memória com htop ou free -m e reduza a concorrência se o servidor começar a usar swap.

Executar Todas as Filas em um Único Processo

Alguns administradores mantêm o processo Sidekiq único padrão e apenas aumentam a concorrência. Essa abordagem faz com que todos os tipos de tarefas disputem o mesmo pool de threads. Se a fila push estiver ocupada entregando para milhares de instâncias remotas, a fila mailers terá que esperar. Processos separados evitam essa contenção e melhoram a confiabilidade da entrega.

Ignorar a Variável de Ambiente DB_POOL

Os processos Sidekiq precisam de conexões com o banco de dados. A variável de ambiente DB_POOL no arquivo de serviço deve ser pelo menos tão alta quanto a configuração de concorrência. Se DB_POOL for menor que a concorrência, as threads do Sidekiq ficarão bloqueadas aguardando uma conexão com o banco, causando timeouts e falhas nas tarefas. Defina DB_POOL para um valor 10 a 20 por cento maior que a concorrência para acomodar a sobrecarga.

Configuração de Filas do Sidekiq: Processo Único vs Múltiplos Processos

Item Processo Sidekiq Único Múltiplos Processos Sidekiq
Manipulação de filas Todas as filas em um worker Cada grupo de filas em um worker dedicado
Uso de recursos Menor memória total, mas todas as tarefas competem Maior memória total, mas sem fome de filas
Ajuste de concorrência Valor único alto deve atender a todos os tipos de tarefa Ajuste por fila com base na carga de trabalho
Latência da federação Atrasada se outras filas estiverem ocupadas Baixa latência consistente para push e pull
Velocidade de entrega de e-mail Atrasada se o processamento de mídia estiver pesado Processamento de e-mail independente e rápido
Complexidade Simples, um arquivo de serviço Requer vários arquivos de serviço e monitoramento

Configurar múltiplos processos Sidekiq é a abordagem recomendada para qualquer instância Mastodon com mais de 500 usuários ativos ou para administradores que precisam de federação e entrega de e-mail confiáveis. O pequeno aumento na complexidade da configuração é compensado por melhorias significativas na velocidade de processamento de tarefas e na estabilidade do sistema.