Upload
locaweb
View
925
Download
2
Embed Size (px)
Citation preview
Varnish Cache
Varnish é um acelerador HTTP. Dentre suas funcionalidades, a principal delas é o cache de conteúdo estático.
Em alguns cenários sua efetividade provê ganhos vertiginosos de performance à sites e servidores.
Varnish Cache
A forma mais utilizada consiste em deixá-lo rodando na porta 80, à frente do Apache. Ao receber uma requisição, o Varnish verifica se o conteúdo requisitado está presente em seu cache. Se sim, fornece esse conteúdo diretamente para o cliente. Se não, busca esse conteúdo no servidor web, o armazena no cache e o fornece para o cliente.
Quando uma requisição é atendida pelo cache do Varnish, recursos preciosos são poupados no servidor web, como por exemplo sockets no webserver, I/O de disco, CPU e memória.
Varnish Cache
Servidor de cliente com problema de sobrecarga
● Upgrade de recursos (Memória, Disco, etc);
● Servidores mais robustos;
● Otimização de aplicação.
Cenário de instalação do Varnish:
● Muita leitura de disco;● Muitas requisições à arquivos estáticos;● Disponibilidade de memória.
Varnish Cache
Varnish Cache
Além de tê-lo instalado em milhares de servidores shared e dedicated, temos Varnish no próprio site da Locaweb onde o utilizamos com balanceamento com 2 backends rodando Apache2.
Varnish Cache
Como já mencionado, o Varnish suporta múltiplos backends, o que nos permite criar balanceamento de carga entre os servidores web.
Varnish Cache
O balanceamento de carga, contudo, é um recurso complementar ao cache feito pelo Varnish.
Não utilizamos Varnish para fins de balanceamento. Para isso temos clusters com LVS + Heartbeat e Big IP F5.
Ao melhorar a performance de websites
com Varnish, demandamos menos
servidores, o que na prática
significa economia financeira e
TI Verde.
Varnish Cache
Instalação do Varnish CacheA instalação do Varnish é simples:
# yum install varnish
# apt-get install varnish
Pacote ‘varnish’ e suas dependências estão presentes nos melhores repositórios.
Varnish Cache
Na Locaweb utilizamos 2 arquivos “vcl”:
● /etc/varnish/backend.vcl = configuramos o(s) backend(s).● /etc/varnish/locaweb.vcl = configuramos as regras de controle do cache● Centos: /etc/sysconfig/varnish = configurações para o daemon● Debian: /etc/default/varnish = configurações para o daemon
O arquivo default.vcl é padrão de configuração do Varnish, mas nós não o utilizamos.
Varnish Cache
backend.vcl:
backend default {
.host = "192.168.0.100";
.port = "81";
.connect_timeout = 90s;
.first_byte_timeout = 90s;
.between_bytes_timeout = 90s;
}
Varnish Cache
O arquivo “locaweb.vcl” contém configurações de cache do Varnish.
A configuração de VCLs deve possuir ao menos um subroutine para tratar requisições entrantes e um segundo subroutine determinando o comportamento do servidor.
Varnish Cachesub vcl_recv {
if (req.http.host == "myserver.localhost" && req.url ~ "^/myserver/.*$") {
return(pass);
}
if (req.request == "GET" && req.url ~ "\.(js)") {
return(lookup);
}
if (req.request == "GET" && req.url ~ "\.(gif|jpg|jpeg|bmp|png|tiff|tif|ico|img|tga|wmf)$") {
unset req.http.Cookie;
return(lookup);
}
Varnish Cachesub vcl_fetch {
set beresp.ttl = 300s;
set beresp.grace = 300s;
if (beresp.status == 404) {
set beresp.ttl = 0s;
}
if (beresp.status == 500) {
set beresp.ttl = 0s;
}
if (req.request == "GET" && req.url ~ "\.(gif|jpg|jpeg|bmp|png|tiff|tif|ico|img|tga|wmf)$") {
unset beresp.http.Set-Cookie;
set beresp.ttl = 600s;
}
Varnish Cache# Maximum number of open files (for ulimit -n)
NFILES=131072
# Maximum locked memory size (for ulimit -l)
# Used for locking the shared memory log in memory. If you increase log size,
# you need to increase this number as well
MEMLOCK=82000
DAEMON_OPTS="-a :80 -f /etc/varnish/locaweb.vcl -u varnish -g varnish -s malloc,4G -T 127.0.0.1:6082 -S /etc/varnish/secret"
Varnish Cache
● varnishstat : Fornece, em tempo real, toda a informação que você precisa para analisar a efetividade do cache.
● varnishhist : Fornece uma visão histograma de cache de acessos.
Varnish Cache
● varnishlog : Fornece informações detalhadas sobre as requisições.
● varnishtop : Lê a memória compartilhada que varnishd registra e apresenta uma entrada de registro que ocorrem mais comumente.
Varnish Cache
● varnishadm : Prompt de administração do varnish. Pode ser utilizado para recarregar vcls e urls.
Varnish Cache- Client connections accepted: Incrementado quando é feita uma nova conexão.
- Client requests received: Este é incrementado sempre que as conexões são aceitas.
1039 Cache hits
0 Cache hits for pass
369 Cache misses
Aqui observamos "Cache hits" e "Cache misses". "Cache hits" significa que o arquivo foi servido a partir Varnish, "cache misses" significa que Varnish teve de buscar o arquivo do backend. O exemplo acima é algo como 1/3 do conteúdo, o que não é muito bom. "Cache hits for pass" é quando o Varnish recebe uma resposta do backend e descobre que não pode armazenar esse conteúdo em cache. Ele criará um objeto em cache que registra essa instrução de modo que o próximo pedido vai receber bypass.
Varnish Cache
O gráfico histograma é dividido em duas áreas. Do lado esquerdo, representado por caractere "pipe", está tudo aquilo que é atendido pelo cache do Varnish. Do lado direito, representado pelo caractere "sustenido", está tudo aquilo que é atendido pelo disco do servidor. Ou seja, o Varnish foi buscar no backend.
Varnish CacheHosts mais acessados
varnishlog -i RxHeader | grep 'Host'
Urls mais acessadas
varnishlog -c | grep RxURL
Varnish CacheHosts mais acessados
varnishtop -i RxHeader -I '^Host'
Urls mais acessadas
varnishtop -i RxURL
Varnish Cache
O serviço Varnish não sobe:
1. Não há memória livre para o Varnish;
2. Erro na configuração de algum arquivo VCL.
Varnish Cache[root@l50dnn0557][varnish]# /etc/init.d/varnish start
Starting Varnish Cache: [FAILED]
[root@l50dnn0557][varnish]# varnishd -a :80 -f /etc/varnish/locaweb.vcl -u varnish -g varnish -s malloc,4G -T 127.0.0.1:6082 -p send_timeout=3600 -S /etc/varnish/secret
Message from VCC-compiler:
Expected ';' got '}'
(program line 174), at
('input' Line 7 Pos 5)
}
----#
Running VCC-compiler failed, exit 1
VCL compilation failed
Varnish Cache
Próximos passos
● RTFM (Varnish Administrator Documentation):
https://www.varnish-cache.org/docs/trunk/index.html
● Varnish Mail Listing:
https://www.varnish-cache.org/trac/wiki/MailingLists
● Varnish Group in LinkedIn:
https://www.linkedin.com/groups/Varnish-Cache-855677?home=&gid=855677&trk=my_groups-tile-grp