612 Views
Varnish é um acelerador HTTP que funciona como cache de conteúdo estático, posicionado na porta 80 à frente do servidor web (Apache/Nginx). Quando recebe uma requisição, serve o conteúdo diretamente do cache se disponível, caso contrário busca do backend e armazena. Isso economiza recursos do servidor (CPU, memória, I/O de disco) e melhora drasticamente a performance.
Ideal para sites com muitas requisições de arquivos estáticos e boa disponibilidade de memória.
Esse material é de 2015. Algumas características do serviço podem ter mudado desde então.
Abaixo segue o vídeo da palestra que apresentei na Locaweb em março de 2015.
Overview sobre Varnish
Material da apresentação:
Transcrição do material:
Autor
- Nome: @wili4m
- LinkedIn: https://www.linkedin.com/in/wiliamjf
Agenda
- O que é Varnish
- Como funciona
- Onde o utilizamos
- Instalação e Configuração
- Utilitários
- Macetes
O que é Varnish Cache
- Varnish é um acelerador HTTP
- Funcionalidade principal: cache de conteúdo estático
- Em alguns cenários, provê ganhos vertiginosos de performance para sites e servidores
Como funciona o Varnish
Arquitetura
- Roda na porta 80, à frente do Apache
- Ao receber uma requisição, verifica se o conteúdo está no cache
- Se sim: fornece o conteúdo diretamente para o cliente
- Se não: busca o conteúdo no servidor web, armazena no cache e fornece para o cliente
Fluxo de trabalho
- Client ? Varnish Cache ? Web Server ? Database
- Se houver cache hit: resposta direta do Varnish
- Se não houver cache: Varnish busca do HTTP Server (Apache, Nginx, IIS, etc.)
Benefícios
- Economiza recursos preciosos no servidor web:
- Sockets no webserver
- I/O de disco
- CPU
- Memória
Quando usar Varnish
Cenários ideais de instalação
- Muita leitura de disco
- Muitas requisições a arquivos estáticos
- Disponibilidade de memória
Onde NÃO se aplica
- Alta demanda de processamento por conteúdo dinâmico
Soluções tradicionais vs Varnish
Problemas de sobrecarga (soluções tradicionais):
- Upgrade de recursos (Memória, Disco, etc.)
- Servidores mais robustos
- Otimização de aplicação
Com Varnish:
- Alguns problemas de performance podem ser resolvidos com a instalação do Varnish
- Economia financeira
- TI Verde (menos servidores necessários)
Uso na Locaweb
- Instalado em milhares de servidores shared e dedicated
- Usado no próprio site da Locaweb
- Configuração com balanceamento com 2 backends rodando Apache2
- Suporta múltiplos backends para balanceamento de carga
- Nota: Balanceamento é recurso complementar, não o foco principal
- Para balanceamento dedicado, a Locaweb usa: LVS + Heartbeat e Big IP F5
Instalação
Comandos simples
# yum install varnish # apt-get install varnish
- Pacote ‘varnish’ e dependências estão presentes nos melhores repositórios
Configuração
Arquivos principais (configuração Locaweb)
1. backend.vcl – Configuração dos backends
backend default {
.host = "192.168.0.100";
.port = "81";
.connect_timeout = 90s;
.first_byte_timeout = 90s;
.between_bytes_timeout = 90s;
}
2. locaweb.vcl – Regras de controle do cache
- VCL = Varnish Cache Language
- Contém subroutines para tratar requisições e determinar comportamento do servidor
Exemplo de subroutine vcl_recv:
sub 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);
}
}
Exemplo de subroutine vcl_fetch:
sub 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;
}
}
3. Arquivo de configuração do daemon
- CentOS: /etc/sysconfig/varnish
- Debian: /etc/default/varnish
NFILES=131072 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"
Utilitários
varnishstat
- Fornece informações em tempo real
- Analisa a efetividade do cache
- Métricas principais:
- Client connections accepted: conexões aceitas
- Client requests received: requisições recebidas
- Cache hits: arquivos servidos do Varnish
- Cache misses: Varnish buscou do backend
- Cache hits for pass: conteúdo que não pode ser cacheado
varnishhist
- Visão em histograma de cache de acessos
- Lado esquerdo (|): atendido pelo cache do Varnish
- Lado direito (#): atendido pelo disco do servidor (backend)
varnishlog
- Informações detalhadas sobre as requisições
- Hosts mais acessados:
varnishlog -i RxHeader | grep 'Host' - URLs mais acessadas:
varnishlog -c | grep RxURL
varnishtop
- Lê a memória compartilhada do varnishd
- Apresenta entradas de registro mais comuns
- Hosts mais acessados:
varnishtop -i RxHeader -I '^Host' - URLs mais acessadas:
varnishtop -i RxURL
varnishadm
- Prompt de administração do Varnish
- Pode ser utilizado para recarregar VCLs e URLs
Problemas conhecidos
Error 503 Service Unavailable
Causas comuns:
- Não há memória livre para o Varnish
- Erro na configuração de algum arquivo VCL
Exemplo de erro de compilação VCL:
Expected ';' got '}' VCL compilation failed
Próximos passos / Recursos
- Documentação oficial: https://www.varnish-cache.org/docs/trunk/index.html
- Mailing List: https://www.varnish-cache.org/trac/wiki/MailingLists
- LinkedIn Group: https://www.linkedin.com/groups/Varnish-Cache-855677

