Acelere o seu Squid com squid-prefetch - baixe as páginas antes dos seus usuários!

Este é um artigo que versa sobre a perfumaria de uma rede rodando 100% e você não sabe mais o que fazer para melhorá-la. Squid-prefetch pode ser uma ótima idéia.

[ Hits: 71.184 ]

Por: julio henrique maschio em 28/11/2005


O que é



Baixar páginas em tempo real, antes que os seus usuários as vejam, pode ser uma interessante maneira de usar a banda de rede excedente no intervalo de espera entre um link e outro, para "ler" a página corrente que o usuário está lendo atrás de links e ir baixando estes links. Quando o usuário terminar de ler a página e clicar em outro link, a página a ser carregada já estará em cache, ou seja, para o usuário, a velocidade da rede aumentou e você não comprou um único mega a mais de link.

O squid-prefetch é um script em Perl que age em paralelo ao Squid, verificando o conteúdo das páginas baixadas e com isso, procurando por links "baixáveis" de acordo com a configuração.

Há um tempo atrás existia um software que fazia isso, mas era para Windows e não era para servidor e sim na sua própria máquina. A navegação com ele era assustadoramente rápida. Nem sei se ainda existe ou se existe outro similar nos dias de hoje, mas esta solução é na camada do servidor. Então ao invés de instalar um programa de "autofetch" em cada estação, porque não fazemos isto no servidor?

    Próxima página

Páginas do artigo
   1. O que é
   2. Como funciona
   3. Instalação e configuração
   4. Conclusões e comentários by mim mesmo
Outros artigos deste autor

Bloqueio de repetidas tentativas de login ao seu Linux

Leitura recomendada

Como configurar uma rádio virtual no Linux (Fedora Core 4)

Montando e desvendando redes no Linux

aMSN com fontes bonitas

Instalar, configurar e navegar com softmodem no Slackware

O protocolo DHCP: evolução, características e seu funcionamento

  
Comentários
[1] Comentário enviado por reimassupilami em 28/11/2005 - 14:54h

cara, que boa dica hein... não conhecia esse esquema, achei muito interessante... mas meu servidor é mandrake, e não encontrei pacotes pra ele, dae não sei como proceder, a principio...

de qualquer forma vou procurar melhor, derepente tem algum esquema...

nao tem source pra compilar, ou algo assim?

[2] Comentário enviado por dupotter em 28/11/2005 - 15:15h

Bom, o pacote pra debian ta ai no link abaixo, ta hospedado no rapidshare, o esquema lá eh vc clicar em free (canto inferior esquerdo), carregará outra página, ai vc espera um pouco e clica em Download: squid-prefetch_1.0-1_all.deb (parte inferior central da página). Se você é como eu e não utiliza debian, converta o pacote utilizando o alien:

http://rapidshare.de/files/8290217/squid-prefetch_1.0-1_all.deb.html

[3] Comentário enviado por marcio.itpro em 28/11/2005 - 18:20h

legal pela contribuição, mas sinceramente...

[4] Comentário enviado por jmhenrique em 28/11/2005 - 18:31h

Complete o comentário, Sr. Márcio. Estou curioso para saber o resto! rs

[ ]s, Henry

[5] Comentário enviado por paulinholinux em 28/11/2005 - 21:39h

Ai cara blzzzz

curti o artigo, agora me fala uma coisa, estou com squid funcionando e ele nao ta fazendo cache do winupdade ... vc ja testou esse seu sistema com as atualizações do winupdade??

porqe ja tentei de tdo pra tentar resolver o problema de nao estar fazendo cache do winupdade e de atualizações de NAV2005 e AVG e demias páginas e programas a cache é realizada perfeitamente....

mas vc ja testou com winupdade?? funcionou certinho.....??

Abraço e parabéns pelo artigo

PaulinhoLinux
<<-_->>

[6] Comentário enviado por jmhenrique em 28/11/2005 - 22:20h

Prezado, essa dica é apenas para o pre-cache de arquivos texto, esse é o propósito. Para cache de arquivos binários e de updates, vai depender da sua configuração do squid mesmo.

[ ]s, Henry

[7] Comentário enviado por ndalinux em 28/11/2005 - 22:55h

Link para pacote tar.gz

http://ftp.debian.org/debian/pool/main/s/squid-prefetch/squid-prefetch_1.0-1.tar.gz

[8] Comentário enviado por reimassupilami em 29/11/2005 - 08:16h

yabadabadooo, o meu tb nao fazia cache do windows update, dae percebi que o problema era o tamanho maximo dos arquivos armazenados... verifique isso, pois geralmente os arquivos são bem grandes...

[9] Comentário enviado por mzoel em 29/11/2005 - 14:18h

Olá Henrique, fiz alguns testes. O meu squid utiliza autenticação via LDAP e o squid-prefetch acusou o seguinte warning quando analisei pelo strace: fetch "http://www.ibm.com/br/: 407 (Proxy Authentication Required)" e simplesmente não está fazendo prefetch de site algum. Pelo que entendi, o sistema utiliza o próprio squid para popular o cache e por isso não tenho como bypassá-lo. Acredito também que não tenho como informar um usuario/senha para que o squid-prefetch autentique no proxy, estou certo? existe alguma forma de fazê-lo?

[10] Comentário enviado por removido em 29/11/2005 - 22:47h

Cara muito boa essa dica, valeu.

[11] Comentário enviado por jmhenrique em 30/11/2005 - 07:59h

mzoel, na sua configuração do squid, apenas diga para localhost não ser autenticado.
aqui eu não uso ldap, mas eu fiz assim: dansguardian na porta 3128, squid na porta 1000. Quem não quiser ser autenticado, rode na 3128, mas também esteja sujeito as restrições do dansguardian. Quem se conectar na porta 1000 pede login/senha. Mas ai faz o controle so do squid. Ou seja, requisições vindas de localhost (dansguardian,squid-prefetch) não são autenticadas.
Ou seja, perfeitamente possível de ser implementado no seu cenário.
[ ]s, Henry

[12] Comentário enviado por mzoel em 30/11/2005 - 14:59h

Henry, show de bola!!!

Segui sua dica e funcionou perfeitamente. Agora vou fazer mais alguns testes para ver se apresenta mais algum problema. Muito Obrigado.
Marcelo

[13] Comentário enviado por firefiery em 01/12/2005 - 11:57h

Ae galera, instalei mais sempre aparece essa mensagem:

fetch: http://www.vivaolinux.com.br/:">http://www.vivaolinux.com.br/: 403 (Forbidden)
Server -> squid/2.5.STABLE9
Proxy-Connection -> close
X-Cache-Lookup -> NONE from sky.meudominio.net:3128
X-Squid-Error -> ERR_ACCESS_DENIED 0
Date -> Thu, 01 Dec 2005 11:57:21 GMT
Content-Length -> 1096
Mime-Version -> 1.0
Content-Type -> text/html
X-Cache -> MISS from sky.meudominio.net
Expires -> Thu, 01 Dec 2005 11:57:21 GMT
Warning: fetch returned code 403 (Forbidden) for http://www.vivaolinux.com.br/


É normal ou hpa algum erro?

Obrigado.

[14] Comentário enviado por jmhenrique em 01/12/2005 - 13:42h

Provavelmente vc tem uma acl proibindo acessos originados de localhost. Libere localhost para não ser autenticado e poder acessar a net pelo squid.

[ ]s, Henry


[15] Comentário enviado por luiz humberto em 30/12/2005 - 10:27h

Estou com receio de usar e com isso acabar consumindo toda a banda, o que preciso atentar para que isso não ocorra ? Precisa configuarar algo no squid.conf ?
Estou usando o debian após instalar pelo apt-get, como posso fazer testes para saber que está funcionando corretamente ? Tipo um comando.
Obrigado

[16] Comentário enviado por jmhenrique em 30/12/2005 - 11:40h

A idéia não é economia de banda... e sim aproveitamento da banda ociosa para baixar páginas. O que eu noto é que nas primeiras horas do dia se usa 80 a 99% da banda, e no decorrer do dia, cai bastante.
A idéia de consumo de 100% de banda te assusta? que adianta ter um link de 200MBps e só usar 100kbps?
o problema maior que eu vejo é uso de banda com inutilidades.
a menos que vc use o seu link para outras coisas, como vpn.

você pode fazer um pool no squid, e especificar o quanto da banda vc quer usar.

[17] Comentário enviado por luiz humberto em 30/12/2005 - 16:08h

Não posso consumir toda a banda, pois tenho um Terminal Server rodando, então precisa configurar algo no squid.conf, e como saber se funcionou corretamente, teria algum comando, ou somente fazendo os testes ?

[18] Comentário enviado por jmhenrique em 30/12/2005 - 21:12h

sinto muito lhe informar, mas não existe "comando milagroso" para este caso.
como disse anteriormente, use delays pools no squid para definir a banda de rede utilizada, deve haver tutoriais no vol sobre implementação de delay pools.
se quiser fazer um teste para saber se squid-prefetch esta funcionando, em um horário que ninguem estiver acessando, de uma máquina qualquer da sua rede acesse apenas a página inicial de um determinado site. E veja depois nos logs se localhost baixou outros links mais que a página inicial do site. Uma boa página para se fazer isso, na minha opinião, é o site da Unicamp.

[ ]s,Henry



[19] Comentário enviado por balani em 20/07/2006 - 14:27h

Cara, gostei do artigo, achei interessante e estou interessado em usar, vc sabe se há algum problema com o dansguardian, pois uso o squid com dansguardian.

[20] Comentário enviado por gumedina em 20/09/2006 - 11:07h

Cara seguinte..baixei o arquivo .tar.gz, descompaquitei e dou o comando ./squid-preftch ai da esse erro...

Can't locate URI.pm in @INC (@INC contains: /usr/lib/perl5/5.8.7/i486-linux /usr/lib/perl5/5.8.7 /usr/lib/perl5/site_perl/5.8.7/i486-linux /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl .) at ./squid-prefetch line 11.
BEGIN failed--compilation aborted at ./squid-prefetch line 11.

ai comento a linha 11 e a 12 que sao essas
use:URI;
use Net: :HTTP;

ai roda sem da erro...mas sera q esta funcionando 100%...essa é minha duvida.
agradeço a atençao...meu email é gumedina1@hotmail.com
abraços...

[21] Comentário enviado por cytron em 26/11/2006 - 20:14h

Cara! Minha preocupação é o seguinte:

Se eu ativar pra conteúdo dinâmico, que usa ? na url, a questão não é bem o desperdício de banda, mas a decisão antecipada, veja:

O cara entra num site onde ele tem um termo para conteúno inapropriado:

O conteúdo deste site... Declaro que sou de maior - Sou de menor

Daí o squid-prefetch vai abrir ativar os dois links fazendo com que o servidor remoto pense que o usuário clicou na opção, valendo a que chegar primeiro. Daí quando o usuário tentar clicar o sistema vai avisar que ele já fez a escolha dele.

Agora imagina isso em sites de empresas, bancos, concursos, no dia-a-dia de trabalho de pessoas que usam muito a net para preencher formulários e tal.

Vira bagunça mesmo ou o squid-prefetch já prevê esse tipo de coisa?

[22] Comentário enviado por jmhenrique em 26/11/2006 - 22:45h

Interessante a sua pergunta, e mais interessante ainda a resposta: Essa "tomada de decisão" é na camada do cliente, e gerenciada por cookies no navegador do cliente final. Ou seja... ele(o squid-prefetch) não pode prever algo que nem está em sua competência gerenciar. Apenas como exemplo de prova, imagine 2 usuários acessando o webmail do yahoo e usando o squid como proxy. Como será que o squid gerencia isso? A resposta é simples: NÂO GERENCIA. Isso quem gerencia é o modelo cliente-servidor da aplicação web. E zilhares de pessoas acessam normalmente seus emais, bancos e etc, usando squid e até mesmo outros proxies, e nunca deu problema... (não por causa do squid, e nem por causa do squid-prefetch).
[ ]s, Henry.

[23] Comentário enviado por cytron em 04/12/2006 - 00:51h

legal, eu não tinha pensado nisso. Estava esperando esta resposta pra implantar esse prefetch.

[24] Comentário enviado por tntmidia em 07/12/2006 - 20:47h

gostei do artigo, fiz tudinho mas como sei que esta funcionando certo ?

[25] Comentário enviado por jmhenrique em 07/12/2006 - 21:51h

abaixo uma linha de log do meu squid. (para ter essa saida monstruosa, eu habilitei "log_mime_hdrs on" no meu squid.conf)
perceba os trechos "User-Agent: Squid-Prefetch" e "TCP_HIT/200" . Se você ver isso, parabéns.

1165535156.244 1 127.0.0.1 TCP_HIT/200 16377 GET http://www.unicamp.br/unicamp/ensino_pesquisa/ensino.html - NONE/- text/html [Connection: close\r\nHost: www.unicamp.br:1000\r\nAccept: text/html\r\nCache-Control: only-if-cached\r\nUser-Agent: Squid-Prefetch\r\n] [HTTP/1.1 200 OK\r\nDate: Thu, 07 Dec 2006 23:45:39 GMT\r\nServer: Apache/2.0.59 (Unix) mod_ssl/2.0.59 OpenSSL/0.9.8d PHP/4.4.4\r\nLast-Modified: Thu, 13 May 2004 12:55:13 GMT\r\nAccept-Ranges: bytes\r\nContent-Length: 15923\r\nKeep-Alive: timeout=15, max=1000\r\nConnection: Keep-Alive\r\nContent-Type: text/html\r\n\r]

[26] Comentário enviado por tntmidia em 08/12/2006 - 02:17h

olha, pode esta faltando alguma coisa na compilaçao ou na configuraçao? Precisa alguma coisa a mais, uso squid transparente...
Nao foi dessa vez o parabens, pra mim... :)

1165540038.848 163 23.0.0.3 TCP_MISS/200 6128 GET http://www.unicamp.br/cgi-bin/unicamp/rot_foto.cgi - DIRECT/143.106.10.30 image/jpeg [Accept: */*\r\nReferer: http://www.unicamp.br/unicamp/ensino_pesquisa/ensino.html\r\nAccept-Language: pt-br\r\nProxy-Connection: Keep-Alive\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\nHost: www.unicamp.br\r\n] [HTTP/1.0 200 OK\r\nDate: Fri, 08 Dec 2006 04:06:31 GMT\r\nServer: Apache/2.0.59 (Unix) mod_ssl/2.0.59 OpenSSL/0.9.8d PHP/4.4.4\r\nExpires: Friday, 30-Sep-94 12:00:00 GMT\r\nContent-Type: image/jpeg\r\nX-Cache: MISS from cp0.squid.com.br\r\nVia: 1.0 cp0.squid.com.br:3128 (squid/2.6.STABLE4)\r\nConnection: close\r\n\r]

[27] Comentário enviado por tntmidia em 08/12/2006 - 03:31h

consegui...o problema estava aqui (libwww-perl) reinstalei ficou no grau, agora sim, parabens pra mim, valeu...

[28] Comentário enviado por wppitp em 26/04/2007 - 22:56h

segui seu .conf, ele roda na boa, mas fica durante uns 30 sec., depois ele cai sozinho, sem explicacao, alguem ja passou por isso??

nao tenho proxu autenticado nem nd..

[29] Comentário enviado por brunosalmito em 25/06/2007 - 17:13h

Amigo, gostei da dica, seguinte gostaria de saber se ele tb armazena as páginas da caixa sem dar problema ?

[30] Comentário enviado por aroldobossoni em 04/07/2007 - 20:07h

Quando a conexão esta momentaneamente saturada o Squid-Prefetch ainda sim continua a fazer pedidos ou ele tem algum tipo de monitoramento que impede isso?

Em casos que ah pouco espaço de armazenamento ou a banda já esta em um nível de utilização alto, você desaconselha o uso do Squid-Prefetch?

Tem mais algum caso que você desaconselha o uso do Squid-Prefetch?

[31] Comentário enviado por jmhenrique em 05/07/2007 - 10:21h

Aroldobossoni,

para a sua primeira pergunta, vide C2. :D

para a sua segunda pergunta, vide C2 E C3. :D

para a sua terceira pergunta, sim. Desaconselho o uso em caso da sua rede não estar estável, você não ter o pleno controle sobre ela mentalmente e você não souber de cabeça quantos bits passam por segundo por ela, quais os sites que os seus usuários acessam e quanto cada um utiliza, bem como o estilo do site. Squid-prefetch é uma perfumaria. Não uma necessidade. (se bem que estão pensando em colocar prefetcherismo embutido no squid)

[ ] s, Henry.

[32] Comentário enviado por removido em 13/09/2007 - 16:02h

Boa tarde Jmhenrique, achei muito bom este artigo.
Gostaria de saber onde encontrar o pacote fonte ou tgz para Slackware?

Obrigado.

[33] Comentário enviado por cytron em 09/12/2007 - 20:37h

Após muito tempo resolvi pegar novamente no squid-prefetch, mas agora fiz diferente:

Fiz algumas alterações, meu servidor utiliza um link principal para as máquinas navegarem na internet, então coloquei uma ADSL de 8 MB para o squid-prefetch ficar baixando as páginas e alimentando o cache do proxy.

Resultado:

A internet mais ignorante que já ví!!!

Estou rindo para as parendes, coloquei o prefetch para abusar mesmo, pois tem 8 MB só pra ele, claro que o espaço em disco aumenta rapidamente, mas chega uma hora que estabiliza e o prefetch fica apenas atualizando o cache. Pois os usuários tem um perfil de navegação e pouca coisa nova é baixada depois que se baixa tudo que ele já viu e o que ainda vai ver, ehehehehe.

[34] Comentário enviado por jdnva em 21/02/2008 - 19:24h

muito bacana
gostei dessa parada ai

adhuashduahsudhausdhas
esse cara aki di cima dos 8MB eh esperto^^
isso ficaria legal pra akeles cara que tem provedor de internet sem fio
que usa o microtik ^^
que sao 12MB pra 400 usuarios ~^^
^

shalom

[35] Comentário enviado por minelli em 24/06/2014 - 16:43h

Estranho aqui que aparece isso em 90% dos sites abertos sempre esse mesmo erro, mas no navegador abre normal e pelo lynx também:

perl /usr/sbin/squid-prefetch 2>&1

fetch: http://educacao.uol.com.br/:">http://educacao.uol.com.br/: 504 (Gateway Time-out)
Content-Type -> text/html
Via -> 1.0 lusca-cache:5129 (Lusca)
Content-Length -> 1204
Server -> Lusca
Date -> Tue, 24 Jun 2014 19:40:29 GMT
X-Cache -> MISS from lusca-cache
X-Cache-Lookup -> MISS from lusca-cache:5129
X-Squid-Error -> ERR_ONLY_IF_CACHED_MISS 0
Connection -> close
Warning: fetch returned code 504 (Gateway Time-out) for http://educacao.uol.com.br/

fetch: http://www.globo.com/:">http://www.globo.com/: 504 (Gateway Time-out)
Content-Length -> 1192
Via -> 1.0 lusca-cache:5129 (Lusca)
Content-Type -> text/html
Date -> Tue, 24 Jun 2014 19:40:45 GMT
Server -> Lusca
X-Cache -> MISS from lusca-cache
Connection -> close
X-Squid-Error -> ERR_ONLY_IF_CACHED_MISS 0
X-Cache-Lookup -> MISS from lusca-cache:5129
Warning: fetch returned code 504 (Gateway Time-out) for http://www.globo.com/

Alguma idéia?

[36] Comentário enviado por marcoscg72 em 30/06/2015 - 17:45h

Júlio,

Meus parabéns pelo artigo.

Ao tentar executar o service squid-prefetch start ou ao tentar executá-lo diretamente retorna o erro:
squid-prefetch Error: could not read access log /var/log/squid3/access.log squid (No such file or directory)

O que pode ser?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts