Varnish – Server Cache
Ricardo Brito do Nascimento
10 de dezembro de 2010
Resumo
O Varnish ´e uma solu¸c˜ao de cache e acelera¸c˜ao de processamento para os mais diversos tipos de aplicativos.
1
Introdu¸
c˜
ao
O Varnish ´e um cache web de alta performance. Ele utiliza os recursos avan¸cados do cerne Linux 2.6, FreeBSD 6/7 e Solaris 10 para atingir seu alto desempenho.
Entre as caracter´ısticas desta ferramenta de cache-proxy, destaca-se: 1. Design moderno;
2. VCL – Varnish Configuration Language – uma linguagem de configura¸c˜ao muito flex´ıvel;
3. O balanceamento de carga com a verifica¸c˜ao de estado dos backends; 4. Suporte parcial a tecnologia ESI;
5. Reescrita de URL;
6. Manipula¸c˜ao elegante para backends inoperantes;
O Varnish trabalha na mem´oria virtual, e ´e o kernel do sistema operacional que decide qual processo, e a quantidade de RAM destinada, ao mapear o espa¸co de endere¸camento virtual dos processos.
Esta ferramenta cache foi desenvolvida para trabalhar em arquitetura de 64 bits, e usar mem´oria virtual; em um sistema de 32 bits, que foge o estilo inicial, poder´a ter problemas para configurar mais de 2 GB de armazenamento.
Embora n˜ao trabalhe nativamente com o protocolo HTTPS, outros recursos funcionam perfeitamente, como m´ultiplos VirtualHosts e o balanceamento de carga com algor´ıtimo round-robin, isto atrav´es da VCL.
1.1
Porque o nome Varnish?
Varnish do inglˆes, significa verniz, e segundo sua hist´oria (1), basicamente o fato instigador do nome, foi um cartaz publicit´ario, com a palavra ”Vernisage”, que foi verificada em um dicion´ario, a qual apresentou trˆes seguintes significados:
r.v. var·nished, var·nish·ing, var·nish·es
1. To cover with varnish. – Para cobrir com verniz.
2. To give a smooth and glossy finish to. – Para dar um acabamento liso e brilhante para
3. To give a deceptively attractive appearance to; gloss over. – Para dar uma aparˆencia atraente para enganosamente; encobrir.
As trˆes descreve o que acontece ao sistema de backend quando colocado atr´as do Varnish.
2
Instala¸
c˜
ao
Com o Varnish tem-se a op¸c˜ao de instala¸c˜ao por bin´arios, reposit´orios ou atrav´es do c´odigo fonte, como na maioria dos programas para Linux.
Os bin´arios, dispon´ıveis para Debian, FreeBSD, RHEL5 e Ubuntu; e o c´odigo fonte pode ser baixado em http://www.varnish-cache.org/releases/
2.1
Requisitos
O Varnish requer um sistema operacional de 64 bits, sendo Linux, FreeBSD ou Solaris.
2.2
Dependˆ
encias
Primeiramente, antes de iniciar a instala¸c˜ao do Varnish as dependˆencias devem estar contempladas no Sistema Operacional.
2.2.1 Ubuntu/Debian • autotools-dev • automake1.9 • libtool • autoconf • libncurses-dev • xsltproc • groff-base • libpcre3-dev • pkg-config 2.2.2 RHELS/CentOS/Fedora • automake • autoconf • libtool • ncurses-devel • libxslt • groff • pcre-devel • pkgconfig
2.3
por Reposit´
orios: Ubuntu/Debian
$ curl http://repo.varnish-cache.org/debian/GPG-key.txt \ | aptkey add
-$ echo "deb http://repo.varnish-cache.org/debian/ \ lenny varnish-2.1" \
>> /etc/apt/sources.list $ aptitude update
2.4
por Reposit´
orios: RHELS/CentOS/Fedora
A intala¸c˜ao do varnish est´a dispon´ıvel atrav´es do reposit´orio EPEL. Infelizmente a vers˜ao mais recente dispon´ıvel ´e o varnish 2.0.6. Isto significa, se a instala¸c˜ao no RH-Like for feita atrav´es do reposit´orio.
$ yum install varnish
2.5
Por bin´
arios: FreeBSD
$ pkg add -r varnish
2.6
Por bin´
arios: Ubuntu/Debian
$ dpkg -ih varnish
2.7
Por bin´
arios: RHELS/CentOS/Fedora
$ rpm - -nosignature -ivh http://repo.varnish-cache.org/redhat/el5/noarch/varnish-release-2.1-2.noarch.rpm
2.8
por fonte FreeBSD
$ cd /usr/ports/varnish make install clean
2.9
por fonte Linux
Para obter o c´odigo fonte do Varnish ´e necess´ario o ‘subversion’. Execute os comandos: $ svn co http://varnish-cache.org/svn/branches/2.1 varnish-cache $ cd varnish-cache $ sh autogen.sh $ sh configure $ make
$ /bin/varnishtest && ./varnishtest tests/*.vtc $ make install
A documenta¸c˜ao oficial, alerta que podem ocorrer falha no teste, e diz ’n˜ao se preocupe de um ou dois testes falharem, alguns dos testes s˜ao demasiadamente longos’.
Se tudo ocorreu corretamente, o Varnish, agora est´a instalado no diret´orio /usr/local, o bin´ario ‘varnishd’ est´a em /usr/local/sbin/varnishd e o arquivo de configura¸c˜ao padr˜ao est´a em /usr/local/etc/verniz/default.vcl.
3
Utilizando o Varnish
Para utilizar o Varnish adequadamente, o administrador de sistemas, deve saber como configurar seu aplicativo ou servidor web e ter conhecimento b´asico do protocolo HTTP, al´em do Varnish funcionando com a configura¸c˜ao padr˜ao.
O Varnish atua com o conceito de servidores “backend” ou “origin”. Um servidor backend ´e o respons´avel por prover conte´udo que ser´a acelerado pelo Varnish. A primeira tarefa ´e configurar onde encontrar este conte´udo.
Isto ´e feito no arquivo de configura¸c˜ao padr˜ao do Varnish, o InstallDir/ varnish/default.vcl, que provavelmente estar´a em /usr/local/etc/varnish/ de-fault.vcl ou /etc/varnish/dede-fault.vcl.
Logo no topo deste arquivo de configura¸c˜ao, haver´a um bloco com a seguinte aparˆencia:
# backend default { # .host = "127.0.0.1"; # .port = "8080"; # }
Este trecho de configura¸c˜ao, comentado por #, escrito na linguagem VCL, define o servidor default (padr˜ao) que hospeda o conte´udo a ser cacheado e acelerado pelo Varnish, ou seja o backend.
Com trechos deste tipo, o Varnish pode ter v´arias infra-estruturas definidas e at´e aglomerados de backends para fins de balanceamento de carga.
Para habilit´a-lo, vamos retirar o coment´ario e apontar para um servidor v´alido na rede, considerando a porta do servi¸co. O trecho dever´a ficar parecido com o trecho abaixo, ap´os retirar os coment´arios e configurar valores v´alidos:
backend default { .host = "192.168.1.1"; .port = "80";
3.1
Iniciando o Varnish
Inicialmente deve-se parar o processo do Varnish, se por ventura estiver rodando, execute:
# pkill varnishd
Com status de super usu´ario (root), execute o seguinte comando para iniciar o Varnish:
# varnishd -f InstallDir/varnish/default.vcl \ -s malloc,1G -T 127.0.0.1:2000 -a 0.0.0.0:8080
-f /usr/local/etc/varnish/default.vcl – indica o arquivo de configura¸c˜ao a ser utilizado.
-s malloc,1G – define o tipo de armazenamento o Varnish utilizar´a para o conte´udo de cache.
-T 127.0.0.1:2000 –
-a 0.0.0.0:8080 – Especifica que Varnish escutar´a a porta 8080, recebendo requisi¸c˜oes HTTP. Em um ambiente de produ¸c˜ao normalmente a porta padr˜ao escutada, ´e a porta 80 (HTTP).
Agora Varnish est´a em execu¸c˜ao. Para testar o funcionamento correto, use o navegador acessar a m´aquina, na qual foi configurado o Varnish, exemplo: http: //192.168.1.2:8080/, dever´a apresentar a aplica¸c˜ao web que esta rodando no servidor http://192.168.1.1:80.
Ap´os estas altera¸c˜oes a ´unica chance do aplicativo n˜ao ter sido acelerado, ´e usa cookies para cada sess˜ao (Varias aplica¸c˜oes em PHP e Java parecem enviar cookies de sess˜ao mesmo que n˜ao seja necess´ario) ou se utiliza sess˜ao autenti-cada, a qual o Varnish n˜ao far´a cache.
Para iniciar o Varnish na porta 80, execute o comando da seguinte forma: # varnishd -f InstallDir/varnish/default.vcl -s malloc,1G -T 127.0.0.1:2000 O que ´e equivalente a: # varnishd -f InstallDir/varnish/default.vcl -s malloc,1G -T 127.0.0.1:2000 -a 0.0.0.0:80 3.1.1 Dimensionamento de Cache
Definir a quantia de mem´oria e/ou disco, e o tipo a ser utilizado, SATA – Serial Advanced Technology Attachment, ISCSI – , FC – Fibre Chanel ou SAS – Serial Attached ISCSI, para montar a infraestrutura o Varnish pode ser uma tarefa complicada. Mas sempre considera-se:
• Qu˜ao grande ´e o volume de acesso de dados, para um portal ou s´ıtio; o tamanho da p´agina com todas as coisas nela contida, e do tamanho de
• Como ´e caro para gerar um objeto? `As vezes faz sentido imagens cache apenas um pouco ou n˜ao cache-los em tudo, se eles s˜ao baratos para servir de back-end e vocˆe tem uma quantidade limitada de mem´oria.
3.2
Registro de Eventos — Logs
Uma das caracter´ısticas realmente interessante ´e como o Varnish trabalha com o gerenciamento de logs. Em vez de gravar os registro em um arquivo mapeado em disco no sistema operacional, ele utiliza um segmento de mem´oria com-partilhado. Quando se esgota o espa¸co deste segmento, o Varnish sobrescreve automaticamente os registros mais antigos.
A vantagem deste processo ´e a agilidade para registrar o evento, evitando o acesso ao sistema de arquivos, que ´e um processo lento, e n˜ao requer espa¸co em disco. Por outro lado se n˜ao tiver um programa para persistir os logs em disco o hist´orico de todos os eventos ir˜ao desaparecer.
O varnish, possui um programa nativo chamado varnishlog, com o qual pode-se acompanhar o registro dos eventos, em tempo real. Este programa ´e executado via linha de comando. Este programa faz parte do processo master do Varnish, e verifica o bom andamento do cache.
Havendo acessos a m´aquina onde varnish, est´a rodando, o resultado ser´a semelhante a este trecho:
11 SessionOpen c 127.0.0.1 58912 0.0.0.0:8080 11 ReqStart c 127.0.0.1 58912 595005213 11 RxRequest c GET
11 RxURL c /
11 RxProtocol c HTTP/1.1
11 RxHeader c Host: localhost:8080 11 RxHeader c Connection: keep-alive
A primeira coluna ´e o numero que identifica a requisi¸c˜ao, todas as linhas que possuem o mesmo numero fazem parte da mesma transa¸c˜ao HTTP.
A segunda coluna ´e a etiqueta da mensagem, todas as entradas s˜ao etique-tadas, e ordenadas no inicio da atividade. As etiquetas ou tags come¸cando com Rx indicam que o Varnish est´a recebendo dados e Tx indica o envio de dados.
A terceira coluna apresenta a origem dos dados, sendo o cliente representado por (c) backend representado por (b).
-b Apenas apresenta as linhas do registo de tr´afego que entram e os servidores de backend. Isso ´e ´util quando se deseja otimizar as taxas de acesso ao cache;
-c Mesmo que -b, mas para o tr´afego do lado do cliente.
-i tag Exibe apenas as linhas com a etiqueta especificada. -I varnishlog Ses-sionOpen”, Nota: s´o vai apresentar as novas sess˜oes; as tags s˜ao case sensitive.
-I Filtrar os dados atrav´es de Express˜ao Regular. Para mostrar todos os cabe¸calhos de cookies provenientes dos clientes: $ varnishlog -c -i RxHeader -I Cookie;
-o Grupo de registro por ID de requisi¸c˜ao.
4
Varnish Configuration Language – VCL
O VCL ´e a linguagem de configura¸c˜ao utilizada no Varnish, desenvolvida pelos autores Dag-Erling Smørgrav, Poul-Henning Kamp, Kristian Lyngstøl e Per Buer.
´
E uma linguagem de pequeno porte, especificamente projetada para ser usada na defini¸c˜ao e na manipula¸c˜ao de pol´ıticas de cache para o acelerador HTTP Varnish.
Quando uma nova configura¸c˜ao ´e carregada, o processo gestor varnishd traduz o c´odigo de VCL para C, o compilando para um objeto que ser´a ent˜ao ligado e compartilhado dinamicamente aos processos do servidor.
4.1
Sintaxe
A linguagem VCL foi deliberadamente criada, similar as linguagens C e Perl. Onde os blocos s˜ao delimitados por chaves, ponto e virgula para fim de senten¸ca, e os coment´arios, podem ser escritos como em C, C++ ou Perl.
Al´em da atribui¸c˜ao do tipo C (=), compara¸c˜ao (==) e os operadores booleano (!, && e ||), o VCL suporta express˜oes regulares e verifica¸c˜ao de ACL atrav´es da utiliza¸c˜ao do operador ∼. No trato com strings, elas podem ser concatenadas apenas em coloc´a-las uma ap´os a outra, sem qualquer operador adicional.
Referˆ
encias
[1] VARNISH. Varnish Cache. nov 2010. Dispon´ıvel em: <http://www.varnish-cache.org/>. Acesso em: 07 dez 2010.
[2] RS compute. Hardware utilizado no armazenamento de backup e recupera¸c˜ao. dez 2010. Hardware utilizado no armazenamento de backup e recupera¸c˜ao.
Dispon´ıvel em: <http://www.compute-rs.com/pt/conselho-1556281.htm>. Acesso em: 10 dez 2010.
[3] AGUIAR, A. S. Varnish: Uma camada de velocidade. mai 2010. Dispon´ıvel em: <http://www.vivaolinux.com.br/artigos/impressora.php?codigo=11480>. Acesso em: 07 dez 2010.
[4] VARNISH. General questions. dez 2010. Dispon´ıvel em:
<http://www.varnish-cache.org/docs/2.1/faq/general.html#what-is-varnish>. Acesso em: 07 dez 2010.
[5] VARNISH. Releases Varnish. mai 2010. Dispon´ıvel em: <http://www.varnish-cache.org/releases>. Acesso em: 07 dez 2010.