Apresentação Varnish Cache em ambiente de Produção

Guia completo sobre Varnish Cache: acelerador HTTP para otimização de performance web. Tutorial de instalação, configuração VCL, utilitários e melhores práticas para cache de conteúdo estático em servidores.

611 Views
Tempo de Leitura: 4.15 minutos

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

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:

  1. Não há memória livre para o Varnish
  2. Erro na configuração de algum arquivo VCL

Exemplo de erro de compilação VCL:

Expected ';' got '}'
VCL compilation failed

Próximos passos / Recursos

0 - 0

Thank You For Your Vote!

Sorry You have Already Voted!

Rolar para cima