O que é Varnish Cache ?

Varnish é um acelerador de requisições HTTP deixa seu site até 300x mais rápido!

Um serviço que fica entre o usuário e o servidor web, fazendo uma analise dos conteúdos mais acessados, armazenando um cache e efetuando gerência das páginas acessadas.

Características do Varnish

Alta performance

  • O Varnish foi desenvolvido especificamente para servir de proxy reverso para sistemas de gerenciamento de conteúdo ( CMS ) lentos. Não foram incluídas no Varnish funcionalidade extras normalmente encontradas em outros servidores de proxy, com suporte a diversos protocolos.
  • Foco 100% em performance, Kamp utilizou todo o seu conhecimento sobre o funcionamento do Kernel para fazer com que o Varnish trabalhe sempre junto com o Kernel, aproveitando suas qualidade de gerenciamento de memória ao máximo.
  • Capacidade de trabalhar em 32 ou 64 bits aproveitando ao máximo cada operação do processador. Kamp [12] contabiliza que o Varnish é capaz de responder a uma requisição Web utilizando aproximadamente 11 syscalls e 7 locks.
  • Multi-cpu e multi-core escalonando pools de threads por todos os núcleos, aproveitando toda a capacidade de processamento.
  • Os arquivos de configuração do Varnish são compilados e executados juntamente com a aplicação.
  • Execução em dois processos para garantir o reinício automático da aplicação em caso de falha.

Controle sobre cada passo na resposta às requisições

  • Possibilidade de sobrescrever o TTL dos pacotes, adicionar ou remover cabeçalhos, remover cookies, reescrever urls e invalidar objetos no cache.
  • Possui uma linguagem de configuração VCL, específica para configurações de domínio, possibilitando a intervenção em praticamente todas as fases do tratamento da requisição.
  • Permite a inserção de códigos C dentro de seus arquivos de configuração, de forma transparente. No site do sistema, inclusive, é possível se encontrar um método para interligar, através deste recurso, o sistema de proxy Varnish com a ferramenta de localização de IP’s GeoIP(1) para criar desta forma um balanceamento de carga geo referenciado.
  • Capacidade de trabalhar com múltiplos arquivos de configuração VCL, podendo inclusive carregar novos arquivos ou alternar entre diversas configurações em tempo de execução.
  • Suporte a balanceamento de carga inclusive com checagem da saúde dos servidores.
  • Mesmo após vencido o tempo de vida de um objeto em memória, o sistema permite se configurar um tempo de vida extra (grace) a objetos para que, caso o servidor Web não responda, este possa continuar atendendo as requisições sem paradas no serviço.

(1) – O GeoIP é uma API e banco de dados em GPL oferecidos pela empresa MaxMind e que possibilita a identificação do Pais e Cidade de um determinado IP com uma precisão de 99,5%.

Controle sobre o que deverá ser cacheado

  • Implementa parcialmente a tecnologia ESI, a qual permite se definir, no código da aplicação, como deverá funcionar o cache para as diversas partes de uma página Web. Com o uso desta tecnologia, é possível se definir propriedades de cache diferentes para partes diferentes de uma mesma página Web.

Diversas ferramentas de apoio e controle para o sistema de cache

  • Possui um conjunto de ferramentas em modo texto muito completo possibilitando uma fácil administração e monitoria do serviço.
  • Oferece uma interface telnet para um fácil gerenciamento da aplicação

Diversos módulos de gerenciamento Web

  • O Varnish possui um módulo próprio para gerenciamento de seu sistema Online bem como módulos para integração dele com o Webmin, Nagios e Munin.

Log centralizado em memória

  • A fim de evitar chamadas para gravação em disco desnecessárias, todo o gerenciamento do log é feito em memória.
  • O sistema oferece ferramentas completas para visualização do log de formas variadas permitindo uma análise profunda do seu funcionamento.
  • Serviço para armazenamento do log em disco em um formato compatível com o Apache / NCSA para integração com outras ferramentas como o Awstats2.

Linguagem VCL

  • Uma das características mais importantes do Varnish é a flexibilidade no tratamento das requisições através de uma linguagem específica para tratamento de domínios VCL (Linguagem de Configuração do Varnish).

Exemplo de configuração para um blog WordPress.

backend default {
.host = “127.0.0.1”; # Ip e porta do servidor Web
.port = “80”;
}

# Apagar todos os cookies que o cliente enviar para o servidor quando a url contiver wp-login ou wp-admin
sub vcl_recv {
if (!(req.url ~ “wp-(login|admin)”)) {
unset req.http.cookie;
}
}

# Apagar todos os cookies que servidor tentar enviar para o cliente nas mesmas condições
sub vcl_fetch {
if (!(req.url ~ “wp-(login|admin)”)) {
unset obj.http.set-cookie;
}
}

Como pode se perceber no exemplo acima, a configuração do Varnish é bastante simples e efetiva. Uma descrição completa da linguagem VCL fugiria do escopo deste trabalho, mas, de forma resumida, ela pode ser descrita como a declaração de um ou mais serviços Web “backend” e a configuração das funcionalidades utilizando para isto um modelo de ganchos “hooks”, em que é possível se inserir códigos configurando diversas etapas no atendimento às requisições. Schofmann [10] destaca dentre os ganchos principais da linguagem VCL:

  • vcl_recv – Recebe a requisição do cliente e decide o que fazer.
  • vcl_fetch – Chamado após um documento ser recebido com sucesso do servidor Web.
  • vcl_deliver – Chamado antes de enviar um objeto do cache para o cliente.
  • vcl_hash – Calcula a chave de hash para identificar os objetos no cache, o padrão é a URL.
  • vcl_miss e vcl_hit – Chamados quando o Varnish identifica “hit” ou não “miss” uma requisição com um objeto em cache.
  • vcl_error – Chamado quando é identificado um erro na resposta à requisição
  • vcl_discard – Chamado quando um objeto esta prestas a ser descartado.
  • vcl_timeout – Chamado quando um documento em memória expira.
  • vcl_pipe ou vlc_pass – Chamados quando o proxy deve ignorar as comunicações entre o servidor Web e o cliente em uma determinada condição.

Edge Side Includes – ESI

Para cada requisição de página html, sistemas de proxy reverso devem decidir entre obter o documento do servidor Web ou entregar algum objeto de seu cache. Não existia porém uma forma de diferenciar partes diferentes de uma mesma página e dar tratamento diferenciado a certas regiões da página. Para resolver este problema, um grupo de empresas desenvolveu um padrão de instruções que permitisse realizar esta diferenciação chamado ESI(Edge Side Includes).

Em 2001, o padrão ESI foi submetido ao World Web Consotion (W3C) para sua aprovação. O instituto tomou conhecimento do padrão, porém não a aceitou a proposta enviada. Atualmente diversas empresas como a Akamai, o Oracle e a IBM, entre outras, aceitam e reconhecem este padrão.

O Varnish implementa somente a parte desta linguagem responsável pelo gerenciamento de políticas de cache. Segundo a página do projeto, ele implementa a tag <esi:include>. Esta permite que sejam inseridos trechos de uma página dentro de outra, para que este trecho seja incluído no momento em que a página for tratada pelo proxy.

Abaixo pode se observar o exemplo de aplicação ESI encontrado no site do projeto.

Um script cgi para mostrar um relógio – /cgi-bin/data.cgi

#!/bin/sh
echo ‘Content-type: text/html’
echo ”
date “+%Y-%m-%d %H:%M”

Um documento html – texto.html

<HTML>
<BODY>
A hora neste momento é: <esi:include src=”/cgi-bin/data.cgi”/>.
</BODY>
</HTML>

Uma regra para tratamento do arquivo ESI:

sub vcl_fetch {
if (req.url == “/texto.html”) {
esi;  /* Fazer processamento ESI */
set obj.ttl = 24 h;
} elseif (req.url == “/cgi-bin/data.cgi”) {
set obj.ttl = 1m;
}
}

Ferramentas do Varnish

O Varnish possui um conjunto completo de ferramentas em modo texto para o gerenciamento e monitoração da qualidade de seu serviço. Dentre as ferramentas oferecidas destacamos:

VarnishHist – Este utilitário cria um gráfico, em tempo real, mostrando o fluxo de requisições atendidas pelo Varnish. As requisições respondidas com objetos do cache são representadas com um “|” e as repassadas para o servidor Web com um “#”. Na linha inferior do gráfico é possível ver uma régua de tempo possibilitando uma visualização imediata das requisições atendidas e seu tempo de resposta.

Gráfico gerado pelo VarnishHist

VarnishStat – Um poderoso aplicativo que apresenta, em tempo real, em uma única tela, a visualização completa de todas as estatísticas do Varnish. Sua utilização permite o monitoramento, de forma dinâmica, do funcionamento do Varnish em seus diversos aspectos.

Interface de administração Web

Além de todas as ferramentas em modo shell e do ambiente telnet para gerenciamento da ferramenta, o Varnish ainda oferece um módulo completo de interface Web. Dentre os recursos desta interface destacamos:

  • O sistema oferece gráficos em tempo real das estatísticas de cache do proxy.
  • Gerenciamento de múltiplos servidores Varnish.
  • Edição e carga e arquivos de configuração VCL.
  • Acesso ao modo console telnet através de uma página do sistema.

Tela principal da interface de administração Web

Fonte oficial: http://www.vivaolinux.com.br

Vídeo interativo, como funciona o Varnish

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s