Limitação de Taxa de Federação no Mastodon: Como Evitar Picos no Sidekiq
🔍 WiseChecker

Limitação de Taxa de Federação no Mastodon: Como Evitar Picos no Sidekiq

Instâncias do Mastodon trocam postagens e atividades por meio da federação. Quando uma conta popular em uma instância remota publica algo, sua instância precisa processar essa atividade para cada seguidor local. Isso pode causar uma enxurrada repentina de jobs no Sidekiq, o processador de tarefas em segundo plano, levando a alto uso de memória, filas acumuladas e desempenho degradado. A causa raiz é a falta de limites de taxa por conta no tráfego de federação recebido. Este artigo explica como a limitação de taxa de federação funciona e fornece etapas concretas para configurar o Sidekiq e as configurações do Mastodon para evitar picos sem bloquear atividades legítimas.

Principais Conclusões: Limitação de Taxa de Federação no Mastodon

  • Filas do Sidekiq e configurações de concorrência: Ajustar o número de threads do Sidekiq e a ordem das filas evita acúmulos devido ao tráfego de federação.
  • Limite de taxa de entrada por conta nas configurações do Mastodon: Configurar o parâmetro inbound_rate_limit limita quantas atividades uma conta remota pode enviar por segundo.
  • Atraso de federação e lógica de repetição: Ajustar federation_retry_delay e federation_max_backoff reduz falhas repetidas de jobs.

ADVERTISEMENT

Por que o Tráfego de Federação Causa Picos no Sidekiq

O Mastodon usa o Sidekiq para processar todas as tarefas em segundo plano, incluindo atividades de federação recebidas. Quando uma conta remota com muitos seguidores em sua instância publica um status, o Mastodon precisa criar um job para cada seguidor local. Se essa conta remota publicar várias vezes em rápida sucessão, o Sidekiq recebe uma rajada de jobs idênticos.

A configuração padrão do Sidekiq processa jobs em ordem FIFO a partir de uma única fila. Sem limitação de taxa, um pico de federação pode ocupar todas as threads do Sidekiq, atrasando outras tarefas importantes como entrega de e-mails ou processamento de mídia. A instância pode ficar sem responder para usuários locais.

A versão 3.5 do Mastodon introduziu um limite de taxa de entrada por conta. Esse limite se aplica ao número de atividades que uma única conta remota pode entregar por segundo. Quando o limite é excedido, o Mastodon enfileira a atividade para processamento posterior em vez de descartá-la. Isso evita picos enquanto ainda entrega todo o conteúdo.

Passos para Configurar a Limitação de Taxa de Federação no Mastodon

A configuração envolve duas áreas: as configurações do aplicativo Mastodon e a configuração do worker Sidekiq. Ambas devem ser ajustadas em conjunto para obter os melhores resultados.

Passo 1: Definir o Limite de Taxa de Entrada nas Variáveis de Ambiente do Mastodon

  1. Abra o arquivo de ambiente do Mastodon
    Navegue até o diretório de instalação do Mastodon e abra o arquivo .env.production usando um editor de texto como nano ou vim.
  2. Adicione ou modifique a variável INBOUND_RATE_LIMIT
    Defina o valor para o número de atividades por segundo que você deseja permitir de uma única conta remota. Um valor inicial comum é 5. Adicione esta linha: INBOUND_RATE_LIMIT=5. Salve o arquivo.
  3. Reinicie o processo web do Mastodon
    Execute systemctl restart mastodon-web ou o comando de reinicialização equivalente para seu método de implantação. Isso aplica o novo limite de taxa.

Passo 2: Ajustar a Concorrência e as Filas do Sidekiq

  1. Edite o arquivo de configuração do Sidekiq
    Abra config/sidekiq.yml em seu editor.
  2. Defina o valor de concorrência
    Reduza a concorrência para um valor que corresponda aos núcleos de CPU do seu servidor. Para uma instância pequena com 2 núcleos de CPU, defina concurrency: 5. Para uma instância maior com 8 núcleos, defina concurrency: 15. Isso impede que o Sidekiq consuma toda a memória durante picos.
  3. Reordene as filas por prioridade
    Coloque as filas push e pull após default e mailers. Exemplo: queues: [default, mailers, push, pull, scheduler]. Isso garante que ações de usuários locais e e-mails sejam processados antes do tráfego de federação.
  4. Reinicie o serviço Sidekiq
    Execute systemctl restart mastodon-sidekiq para aplicar as alterações.

Passo 3: Ajustar as Configurações de Repetição e Backoff da Federação

  1. Adicione variáveis de atraso de repetição ao .env.production
    Adicione estas linhas: FEDERATION_RETRY_DELAY=30 e FEDERATION_MAX_BACKOFF=3600. A primeira define o atraso inicial de repetição em segundos. A segunda define o backoff máximo em segundos. Esses valores reduzem o número de repetições para jobs de federação com falha.
  2. Reinicie o processo web do Mastodon
    Execute systemctl restart mastodon-web novamente para carregar as novas variáveis.

ADVERTISEMENT

Erros Comuns de Configuração e Suas Correções

O Uso de Memória do Sidekiq Ainda Aumenta Após Definir os Limites de Taxa

Se a memória do Sidekiq permanecer alta, o valor de concorrência ainda pode estar muito alto para seu servidor. Reduza ainda mais a concurrency, por exemplo para 3 em um servidor de 2 núcleos. Verifique também se o processo Sidekiq não está sendo executado com a flag -t que desativa o timeout. Remova -t se presente no arquivo de serviço systemd.

O Limite de Taxa de Entrada Impede Toda a Atividade de Federação

Definir o INBOUND_RATE_LIMIT muito baixo, como 1, pode causar atrasos para todas as contas remotas. Aumente o valor para 10 ou 20 se você notar que postagens remotas aparecem com horas de atraso. Monitore o tamanho da fila do Sidekiq usando Sidekiq::Queue.new.size em um console Rails para encontrar um valor equilibrado.

Jobs de Federação São Descartados em Vez de Enfileirados

Se jobs desaparecem antes do processamento, o processo Sidekiq pode estar reiniciando com muita frequência. Aumente o timeout Sidekiq::Config::DEFAULT_JOB_OPTIONS no inicializador do Sidekiq. Alternativamente, defina Sidekiq.default_worker_options = { 'backtrace' => true, 'retry' => 5 } em config/initializers/sidekiq.rb para garantir repetições.

Limitação de Taxa de Federação do Mastodon vs Ajuste de Filas do Sidekiq

Item Limite de Taxa de Entrada Ajuste de Filas do Sidekiq
Propósito Limita atividades de uma única conta remota por segundo Controla quantas threads processam jobs e em qual ordem
Local da configuração .env.production config/sidekiq.yml
Efeito sobre picos Reduz o número de jobs que entram na fila Limita quantos jobs são executados simultaneamente
Risco Pode atrasar a entrega se definido muito baixo Pode causar acúmulos se a concorrência for muito baixa
Melhor usados juntos Sim Sim

A limitação de taxa de federação do Mastodon e o ajuste de filas do Sidekiq se complementam. O limite de taxa de entrada reduz o volume de jobs, enquanto o ajuste do Sidekiq garante que o servidor possa processar os jobs restantes sem exaustão de memória. Use ambos para máxima estabilidade.

Agora você pode configurar o Mastodon para lidar com picos de federação sem travar o Sidekiq. Comece definindo INBOUND_RATE_LIMIT para 5 e a concorrência do Sidekiq de acordo com seus núcleos de CPU. Monitore o painel do Sidekiq para ver o tamanho da fila e o uso de memória após as alterações. Para ajustes avançados, considere adicionar um processo Sidekiq separado dedicado à fila pull para isolar o tráfego de federação de outros jobs.

ADVERTISEMENT