Se você opera um gerador de feed personalizado no Bluesky, provavelmente já encontrou limites de taxa ou erros de cota. Essas restrições impedem que um único feed consuma muitos recursos do servidor. O Bluesky usa limites de cota para garantir acesso justo a todos os operadores de feed e proteger a rede contra sobrecarga. Este artigo explica os limites de cota específicos para geradores de feed, como funcionam e como evitar atingi-los.
Principais Conclusões: Limites de Cota do Gerador de Feed do Bluesky
- Endpoints GetFeed e GetFeedSkeleton: Cada gerador de feed tem um limite de 100 requisições por janela de 5 minutos por endereço IP.
- Endpoint SubscriptionRepos: Os limites se aplicam ao número de conexões simultâneas e ao tamanho do lote de eventos, com limite de 100 eventos por lote.
- Redefinição diária de cota: Todos os contadores de cota são redefinidos a cada 24 horas à meia-noite UTC.
Como Funcionam as Cotas do Gerador de Feed do Bluesky
Os geradores de feed do Bluesky são serviços externos que produzem feeds personalizados para os usuários. A rede se comunica com esses geradores por meio de endpoints específicos. Para evitar abusos e garantir estabilidade, o Bluesky impõe limites de cota nesses endpoints. As cotas são baseadas no número de requisições por janela de tempo e no número de conexões simultâneas. Cada gerador de feed tem sua própria alocação de cota, independente de outros geradores. Os limites se aplicam ao endereço IP do servidor do gerador de feed, não a contas de usuário individuais.
Cotas Baseadas em Requisições
As cotas mais comuns são os limites de taxa de requisição. Para os endpoints GetFeed e GetFeedSkeleton, um único endereço IP pode enviar até 100 requisições por janela de 5 minutos. Se o seu gerador de feed exceder essa taxa, o servidor retorna um erro 429 Too Many Requests. A resposta de erro inclui um cabeçalho Retry-After indicando o número de segundos a aguardar antes de tentar novamente. Para o endpoint SubscriptionRepos, o limite é de 10 conexões simultâneas por endereço IP. Abrir mais de 10 conexões simultâneas resultará em rejeição de conexão.
Cotas de Volume de Dados
O Bluesky também limita a quantidade de dados que um gerador de feed pode retornar por resposta. Para GetFeedSkeleton, cada resposta pode conter no máximo 100 itens. Se o seu feed tiver mais de 100 postagens, você deve implementar paginação usando o parâmetro cursor. O endpoint SubscriptionRepos limita cada lote de eventos a 100 eventos. Lotes maiores são truncados automaticamente pelo servidor. Esses limites de volume de dados impedem que um único feed sobrecarregue a rede com grandes cargas de dados.
Como Monitorar e Permanecer Dentro dos Limites de Cota
Para evitar atingir os limites de cota, você precisa implementar limitação de taxa e paginação adequadas no código do seu gerador de feed. As etapas a seguir cobrem as técnicas essenciais.
- Monitore a contagem de requisições por endpoint
Mantenha um contador para cada endpoint que você chama. Use uma abordagem de janela deslizante para verificar se você está dentro do limite de 100 requisições por 5 minutos. Quando o contador atingir 95, pare de enviar novas requisições até que a janela seja redefinida. - Analise o cabeçalho Retry-After em respostas 429
Ao receber um erro 429, leia o valor do cabeçalho Retry-After. Aguarde esse número de segundos antes de fazer a próxima requisição. Não tente novamente imediatamente, pois isso continuará acionando o limite. - Limite conexões simultâneas ao SubscriptionRepos
Abra no máximo 10 conexões simultâneas para o endpoint SubscriptionRepos. Use um gerenciador de pool de conexões para impor esse limite. Se uma tentativa de conexão falhar, tente novamente com backoff exponencial. - Implemente paginação para GetFeedSkeleton
Na lógica do seu gerador de feed, quando o conjunto de resultados exceder 100 itens, inclua o parâmetro cursor na resposta. O cliente usará esse cursor para solicitar a próxima página. Não retorne mais de 100 itens em uma única resposta. - Use a redefinição diária de cota para agendar operações em lote
Se você precisar realizar manutenção ou sincronização de dados que exija muitas requisições, agende-a para começar logo após a meia-noite UTC. Isso lhe dá a janela de cota diária completa para concluir a tarefa.
Problemas Comuns Quando os Limites de Cota São Excedidos
Mesmo com planejamento cuidadoso, você ainda pode encontrar problemas relacionados à cota. Aqui estão os cenários mais comuns e como corrigi-los.
Gerador de Feed Retorna 429 Too Many Requests
Este é o sinal mais direto de que você excedeu o limite de taxa de requisição. Verifique seus logs de requisição para ver qual endpoint está sendo chamado com muita frequência. Reduza a taxa de requisição aumentando o intervalo entre as chamadas. Verifique também se seu código não está enviando requisições duplicadas acidentalmente em paralelo. Use uma fila única para requisições de saída para garantir um processamento ordenado.
Conexões SubscriptionRepos São Rejeitadas
Se você receber consistentemente timeouts de conexão ou rejeições imediatas no endpoint SubscriptionRepos, provavelmente você tem mais de 10 conexões simultâneas. Use um pool de conexões com tamanho máximo de 10. Feche conexões ociosas prontamente. Se precisar lidar com mais streams, considere executar vários geradores de feed em diferentes endereços IP, cada um com sua própria alocação de cota.
Feed Mostra Apenas 100 Postagens Apesar de Ter Mais
Isso ocorre quando seu gerador de feed não implementa paginação corretamente. O endpoint GetFeedSkeleton pode retornar apenas 100 itens por chamada. Verifique se seu gerador inclui o campo cursor na resposta quando há mais itens. O cursor deve ser uma string que aponta para o próximo lote. Teste a paginação chamando o feed com o parâmetro cursor e confirmando que o próximo lote é retornado.
Limites de Cota do Gerador de Feed do Bluesky vs Outras Plataformas
| Item | Gerador de Feed do Bluesky | API do Mastodon |
|---|---|---|
| Limite de taxa de requisição | 100 requisições por 5 minutos por IP | 300 requisições por 5 minutos por token de usuário |
| Limite de conexão | 10 conexões simultâneas por IP | Nenhum limite explícito de conexão |
| Volume de dados por resposta | Máximo de 100 itens | 40 itens padrão, configurável até 80 |
| Período de redefinição de cota | 24 horas à meia-noite UTC | Janela deslizante de 5 minutos |
| Formato da resposta de erro | 429 com cabeçalho Retry-After | 429 com cabeçalho X-RateLimit-Reset |
As cotas do gerador de feed do Bluesky são mais restritivas que os limites da API do Mastodon. A janela de 100 requisições é mais curta, e o limite de conexão é exclusivo do Bluesky. A API do Mastodon não restringe conexões simultâneas, mas impõe uma taxa de requisição por token mais alta. Se você estiver migrando um gerador de feed do Mastodon para o Bluesky, precisará adicionar pool de conexões e reduzir a frequência de requisições.
Agora que você entende os limites de cota, pode ajustar o código do seu gerador de feed para cumpri-los. Monitore os logs do servidor em busca de erros 429 e rejeições de conexão. Implemente paginação e limites de conexão conforme descrito acima. Para otimização avançada, considere armazenar em cache os resultados do feed por alguns segundos para reduzir o número de requisições à rede do Bluesky.