performance_optimization.md•3.58 kB
# Otimizações de Performance
Este documento descreve as otimizações de performance implementadas no MCP Server para melhorar a velocidade e eficiência, especialmente no ambiente free tier do Render.
## 1. Sistema de Cache
### Cache em Múltiplos Níveis
Implementamos um sistema de cache em múltiplos níveis para reduzir o número de operações custosas:
1. **Cache de Resultados de Busca**
- Armazena resultados de buscas na web para evitar chamadas repetidas à API do DuckDuckGo
- Chave de cache: `query_max_results_language`
2. **Cache de Scraping**
- Armazena resultados de scraping com Puppeteer e BeautifulSoup
- Chaves de cache: `puppeteer_url` e `basic_url_language`
3. **Cache de MCP**
- Armazena MCPs completos gerados para tópicos específicos
- Chave de cache: `topic_max_resources_num_nodes_language`
### Gerenciamento de Tamanho do Cache
Para evitar problemas de memória, implementamos limites de tamanho para todos os caches:
- Limite máximo de entradas no cache (configurável via `MAX_CACHE_SIZE`)
- Remoção automática das entradas mais antigas quando o limite é atingido
- Estratégia de remoção: primeiros 10% das entradas mais antigas
## 2. Otimizações de Puppeteer
Puppeteer é uma ferramenta poderosa para scraping, mas consome muitos recursos. Implementamos as seguintes otimizações:
1. **Limitação de Instâncias Concorrentes**
- Redução do número máximo de instâncias concorrentes de Puppeteer (configurável via `MAX_PUPPETEER_INSTANCES`)
- Valor padrão reduzido para 2 instâncias para compatibilidade com o free tier do Render
2. **Timeouts Agressivos**
- Redução do timeout para carregamento de páginas (de 30s para 8s)
- Continuação com conteúdo parcial em caso de timeout
3. **Fechamento Rápido de Browsers**
- Fechamento imediato do browser após obter os dados necessários
- Verificação de cache antes de iniciar o browser para evitar instâncias desnecessárias
## 3. Otimizações de Rede
1. **Redução de Requisições**
- Uso de cache para evitar requisições repetidas
- Limitação do número de recursos processados
2. **Delays Adaptativos**
- Redução do delay entre requisições (de 0.1s para 0.05s)
- Balanceamento entre velocidade e evitar sobrecarga do servidor
3. **Headers Otimizados**
- Adição de headers de idioma para melhorar a relevância dos resultados
- Uso de regiões específicas para cada idioma nas buscas
## 4. Otimizações de Processamento
1. **Processamento Paralelo Limitado**
- Uso de `asyncio.gather()` para processamento paralelo, mas com limites
- Balanceamento entre paralelismo e uso de recursos
2. **Validação Antecipada**
- Verificação de parâmetros antes de iniciar operações custosas
- Retorno rápido de erros para requisições inválidas
3. **Geração Eficiente de Nós**
- Ajuste dos parâmetros de geração de nós para equilibrar qualidade e performance
- Validação de número mínimo de nós configurável
## Resultados
Estas otimizações resultaram em:
- Redução significativa no tempo de resposta para tópicos já consultados (via cache)
- Menor consumo de memória, especialmente importante no free tier do Render
- Maior estabilidade do servidor sob carga
- Melhor experiência do usuário com respostas mais rápidas
## Configurações Recomendadas
Para o ambiente free tier do Render, recomendamos:
- `MAX_PUPPETEER_INSTANCES = 2`
- `MAX_CACHE_SIZE = 100`
- Timeout de Puppeteer: 8 segundos
- Delay entre requisições: 0.05 segundos