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_limitlimita quantas atividades uma conta remota pode enviar por segundo. - Atraso de federação e lógica de repetição: Ajustar
federation_retry_delayefederation_max_backoffreduz falhas repetidas de jobs.
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
- Abra o arquivo de ambiente do Mastodon
Navegue até o diretório de instalação do Mastodon e abra o arquivo.env.productionusando um editor de texto como nano ou vim. - 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. - Reinicie o processo web do Mastodon
Executesystemctl restart mastodon-webou 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
- Edite o arquivo de configuração do Sidekiq
Abraconfig/sidekiq.ymlem seu editor. - 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, definaconcurrency: 5. Para uma instância maior com 8 núcleos, definaconcurrency: 15. Isso impede que o Sidekiq consuma toda a memória durante picos. - Reordene as filas por prioridade
Coloque as filaspushepullapósdefaultemailers. 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. - Reinicie o serviço Sidekiq
Executesystemctl restart mastodon-sidekiqpara aplicar as alterações.
Passo 3: Ajustar as Configurações de Repetição e Backoff da Federação
- Adicione variáveis de atraso de repetição ao
.env.production
Adicione estas linhas:FEDERATION_RETRY_DELAY=30eFEDERATION_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. - Reinicie o processo web do Mastodon
Executesystemctl restart mastodon-webnovamente para carregar as novas variáveis.
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.