Pular para o conteúdo

Por que meu proxy está lento: diagnóstico e otimização de velocidade

Гайды

A lentidão de um proxy geralmente vem de uma combinação de latência alta causada pela distância geográfica, overhead de protocolo durante o handshake TLS ou congestionamento dentro da rede residencial peer-to-peer. Resolver esses gargalos de desempenho exige uma abordagem de diagnóstico sistemática que separe o tempo de trânsito na rede dos atrasos de processamento do lado do servidor, para garantir a melhor vazão de dados possível.

Entendendo as métricas centrais: latência x vazão

Para diagnosticar um proxy lento, você precisa primeiro distinguir latência de vazão. Essas duas métricas costumam ser confundidas, mas representam desafios técnicos diferentes em um ambiente com proxy.

  • Latência (Ping): O tempo que um único pacote leva para ir do seu cliente até o servidor proxy, depois até o site de destino e voltar. É medida em milissegundos (ms). A latência alta é a principal causa da navegação "arrastada" ou de respostas lentas em scripts automatizados.
  • Vazão (Banda): O volume de dados transferido em um período específico, normalmente medido em Mbps ou MB/s. Você pode ter uma conexão de baixa latência que ainda assim tem vazão ruim, o que é comum quando um nó residencial tem velocidade de upload limitada.
  • Time to First Byte (TTFB): Esta é a métrica mais crítica para web scraping e automação. Ela mede a duração desde a requisição HTTP inicial até o primeiro byte de dados recebido do servidor.

Ao usar um serviço como o GProxy, a latência costuma ser influenciada pelos "saltos" que seus dados percorrem. Em uma conexão padrão, seus dados vão direto ao destino. Com um proxy, você adiciona pelo menos dois trechos extras ao trajeto: Cliente → Gateway do proxy → Nó de saída → Site de destino. Se o nó de saída está em Tóquio enquanto seu cliente está em Londres e o servidor de destino em Nova York, a velocidade da luz vira uma limitação física que nenhuma otimização de software consegue superar por completo.

Causas raiz da degradação de desempenho do proxy

Identificar por que um proxy está com desempenho abaixo do esperado envolve olhar quatro camadas distintas da pilha de conexão: o ambiente local, a infraestrutura do provedor de proxy, a saúde do nó de saída e as limitações do servidor de destino.

1. Incompatibilidade geográfica

A distância física entre o nó de saída do proxy e o servidor de destino é a principal causa de latência alta. Se você está coletando dados de um site de varejo dos EUA usando um proxy residencial localizado no interior da Índia, o round-trip time (RTT) vai naturalmente ultrapassar 300-400ms. Para operações de alta velocidade, sempre selecione nós de saída na mesma região ou país do data center do servidor de destino.

2. Overhead de protocolo (HTTP x SOCKS5)

O protocolo escolhido define como os dados são empacotados. Proxies HTTP são de alto nível e costumam envolver mais processamento no próprio servidor proxy. SOCKS5 é um protocolo de nível mais baixo que lida com qualquer tráfego (TCP/UDP) e em geral oferece desempenho melhor em tarefas de alta concorrência, porque não precisa interpretar os cabeçalhos HTTP no gateway.

3. Estabilidade do nó residencial

Proxies residenciais usam endereços IP atribuídos a residências reais. Diferente dos proxies de datacenter, que ficam em links de fibra de alta velocidade em ambientes controlados, os nós residenciais dependem de conexões domésticas de ISP. Se o "peer" que fornece o IP estiver usando uma rede Wi-Fi congestionada ou tiver banda de upload limitada, sua velocidade de proxy vai sofrer, independentemente da capacidade de backbone do provedor.

4. Throttling do ISP e problemas de peering

Às vezes o gargalo é o seu próprio ISP. Alguns provedores de internet limitam tráfego criptografado ou têm acordos de peering ruins com os data centers onde os gateways de proxy estão hospedados. Isso resulta em "perda de pacotes", o que força o protocolo TCP a retransmitir dados e, na prática, corta pela metade a velocidade percebida.

Metodologia de diagnóstico: como testar a velocidade do seu proxy

Não confie em testes de velocidade baseados em navegador (como o Speedtest.net) enquanto um proxy estiver ativo. Esses testes foram feitos para conexões diretas de ISP e frequentemente entregam resultados enganosos por causa da forma como tratam downloads multithread. Em vez disso, use ferramentas de linha de comando e scripts próprios para obter dados brutos.

Usando cURL para medição precisa

O comando curl é o padrão ouro para diagnosticar velocidade de proxy porque consegue exibir variáveis de tempo específicas. Use o comando a seguir para ver onde ocorre o atraso:


# Este é um comando de shell, formatado para maior clareza
curl -x "http://username:[email protected]:8000" \
     -o /dev/null -s -w \
     "Connect: %{time_connect}\nTTFB: %{time_starttransfer}\nTotal: %{time_total}\n" \
     "https://api.target-website.com/v1/data"

Nesta saída:

  • time_connect: Tempo gasto para estabelecer a conexão TCP com o gateway do proxy.
  • time_starttransfer: O tempo até a chegada do primeiro byte (inclui o trajeto do proxy até o destino).
  • time_total: A duração total da requisição.
Se time_connect estiver alto, o problema está entre você e o GProxy. Se time_starttransfer estiver alto mas time_connect estiver baixo, o gargalo está entre o proxy e o site de destino.

Benchmark automatizado com Python

Para quem gerencia grandes pools de proxies, um único teste não basta. Você precisa medir a média estatística entre vários nós. O script Python a seguir usa aiohttp para medir o desempenho de vários proxies simultaneamente.


import asyncio
import time
import aiohttp

async def test_proxy(session, proxy_url):
    start = time.perf_counter()
    try:
        async with session.get('https://httpbin.org/ip', proxy=proxy_url, timeout=10) as resp:
            status = resp.status
            await resp.text()
            end = time.perf_counter()
            return end - start, status
    except Exception as e:
        return None, str(e)

async def main():
    proxies = [
        "http://user:[email protected]:8000",
        "http://user:[email protected]:8000",
        # Adicione mais proxies aqui
    ]

    async with aiohttp.ClientSession() as session:
        tasks = [test_proxy(session, p) for p in proxies]
        results = await asyncio.gather(*tasks)

        for i, (duration, status) in enumerate(results):
            if duration:
                print(f"Proxy {i}: {duration:.2f}s (Status: {status})")
            else:
                print(f"Proxy {i}: Failed ({status})")

if __name__ == "__main__":
    asyncio.run(main())

Estratégias de otimização para proxy de alto desempenho

Depois de diagnosticar a origem da lentidão, você pode aplicar mudanças arquiteturais específicas para recuperar velocidade. Otimizar raramente é questão de um "ajuste mágico"; é mais sobre reduzir o overhead acumulado da conexão.

1. Implemente pool de conexões (Keep-Alive)

Uma das partes mais caras de uma requisição via proxy é o handshake inicial. Ele envolve resolução DNS, estabelecimento da conexão TCP e o handshake TLS (SSL). Se você abre uma nova conexão a cada requisição, está desperdiçando de 200 a 500ms todas as vezes.

Usando HTTP Keep-Alive, você reaproveita a mesma conexão TCP subjacente para várias requisições. Na biblioteca requests do Python, isso é feito automaticamente ao usar um objeto Session(). Em ambientes de alta concorrência, garanta que seu pool de conexões seja grande o bastante para suportar a carga sem forçar novos handshakes.

2. Segmentação geográfica e roteamento

O GProxy permite segmentação granular. Se seu servidor de destino está hospedado na AWS us-east-1 (Norte da Virgínia), você deve solicitar especificamente proxies na Virgínia ou em estados vizinhos. Isso reduz a latência de "backhaul".

Tipo de proxy Latência média Vazão média Melhor caso de uso
Datacenter 10-50ms 1Gbps+ Scraping de alta velocidade em sites sem proteção
Residencial 150-400ms 5-50Mbps Contornar detecção de bots sofisticada
Móvel (4G/5G) 200-600ms 2-20Mbps Gestão de contas de redes sociais
Proxies ISP 40-100ms 100Mbps+ Tarefas de alta velocidade e alto anonimato

3. Use SOCKS5 para tráfego que não seja web

Se você usa proxies para protocolos diferentes de HTTP/HTTPS (como FTP, SMTP ou ferramentas próprias baseadas em sockets), SOCKS5 é obrigatório. SOCKS5 é mais eficiente porque não reescreve cabeçalhos de pacote na camada de aplicação. Mesmo para tráfego web, alguns desenvolvedores percebem que o SOCKS5 reduz a carga de CPU no lado do cliente ao gerenciar milhares de threads simultâneas.

4. Minimize a transferência de dados

Muitas vezes, "proxies lentos" são na verdade apenas "páginas grandes". Se você faz scraping, acelere o desempenho percebido assim:

  • Desative o carregamento de imagens em navegadores headless (Puppeteer/Selenium).
  • Bloqueie arquivos CSS e de fontes.
  • Use cabeçalhos Accept-Encoding: gzip, deflate para comprimir o payload de dados.
  • Requisite apenas os endpoints de API específicos em vez de renderizar a página HTML completa.

Correções técnicas avançadas: ajuste de TCP e concorrência

Em implantações de nível corporativo, o gargalo pode estar na forma como seu sistema operacional lida com sockets de rede. Por padrão, muitas distribuições Linux não estão otimizadas para as dezenas de milhares de conexões simultâneas exigidas por operações de proxy em larga escala.

Aumentando os file descriptors

Cada conexão de proxy é um "arquivo" aos olhos do Linux. Se seu limite estiver no padrão de 1024, seu script vai travar ou ficar lento enquanto espera os sockets fecharem. Aumente esses limites em /etc/security/limits.conf:


* soft nofile 100000
* hard nofile 100000

Otimização de DNS

Às vezes a "lentidão" é apenas uma resolução DNS lenta. Se você informa um hostname para o seu proxy (por exemplo, proxy.gproxy.com), seu sistema precisa resolver esse IP antes de cada conexão. Fixar o endereço IP do gateway no código ou usar um cache DNS local como o dnsmasq pode economizar de 20 a 50ms em cada nova tentativa de conexão.

Concorrência x rate limiting

Existe um ponto ideal de concorrência. Se você envia requisições demais por um único nó residencial, o roteador local desse nó pode começar a descartar pacotes (Bufferbloat). Se precisa de mais velocidade, não empurre mais dados por um único IP; em vez disso, aumente sua frequência de rotação. Ao distribuir a carga entre 500 IPs residenciais do GProxy simultaneamente, você alcança uma vazão agregada muito maior do que tentando forçar um IP a se comportar como um link de datacenter.

Principais conclusões

Diagnosticar velocidade de proxy é um processo de eliminação. Testando sistematicamente cada segmento da conexão, você sai de "está lento" para "há um atraso de 300ms no nó de saída". Otimizar é reduzir distância física, reutilizar conexões e escolher a ferramenta certa para cada trabalho.

  • Alinhe a geografia: Sempre selecione nós de saída de proxy na mesma região do servidor de destino para minimizar a distância física que os dados precisam percorrer.
  • Reutilize conexões: Implemente HTTP Keep-Alive com objetos de sessão no seu código para evitar o demorado handshake TCP/TLS em cada requisição.
  • Monitore o TTFB: Concentre-se no Time to First Byte como métrica principal de desempenho, em vez da velocidade total de download, especialmente para scraping e automação.

Dica prática 1: Se velocidade é sua prioridade absoluta e você não enfrenta detecção de bots agressiva, troque proxies residenciais por proxies de datacenter ou ISP do GProxy para um aumento de 5x a 10x na vazão bruta.

Dica prática 2: Use o comando de diagnóstico cURL semanalmente para avaliar a saúde do seu pool de proxies. Picos repentinos em time_connect normalmente indicam problemas de rede local ou throttling do ISP, enquanto picos em time_starttransfer sugerem que a rede do provedor de proxy ou o site de destino está congestionado.

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.