ArtigosDestaque

Varnish 3: Acelerador HTTP

Introdução

Este é um artigo sobre um produto que existe para diversos sistemas operativos *nix, que tem como objectivo, tornar uma infraestrutura de páginas Web, mais rápida e utilizando menos recursos do lado dos servidores.

Há pouco tempos saiu a versão 3.0 do Varnish e aproveito esta oportunidade para escrever um artigo sobre o conceito e sobre o programa em si.

O artigo não tem como objectivo ser um tutorial, pois o Varnish é um produto complexo tecnicamente e onde é usada uma linguagem de programação para configurar o produto.
No entanto, vou dar como exemplo, um site a correr em Wordpress e como é feita a integração.
Este exemplo foi escolhido por ser simples de explicar e serve apenas como base. Tendo em conta a complexidade do produto, melhorias podem ser feitas e as mesmas regras provavelmente não servem para outros sites que não usem Wordpress.

Na verdade, o artigo devia ter outro título, com referencia ao Varnish ser na verdade uma “Reverse proxy”, que é o conceito base do produto, mas como é uma “reverse proxy” com apenas um objectivo e muito especializada, penso que é melhor chamar-lhe “Acelerador Http”.

 

O que é uma proxy e reverse proxy?

Para quem não está dentro do assunto, é preciso clarificar que o Varnish não inventou o conceito de “proxy” nem de “reverse proxy”, nem mesmo de “acelerador Http”.

Uma “proxy”, em termos simples, é um computador que está no meio de duas ligações, sendo que é quem gere como essa ligação é feita.
Uma “proxy” pode fazer a ligação de vários tipos de protocolos, mas o mais utilizado regularmente é o protocolo Http, como pode ser visto na imagem.

A “proxy” pode ter vários objectivos para alguém a implementar. Pode ser por uma questão de controlo e segurança, pode ser para tornar o acesso mais rápido a algo, estando a “proxy” a fazer cache dos objectos pretendidos ou para alterar o conteúdo dos pedidos entre o cliente e o servidor.
Outros exemplos são também para assegurar alta disponibilidade ou balanceamento de recursos.

Para se diferenciar o termo “proxy” de “reverse proxy”, normalmente são tidos em conta dois aspectos.
Normalmente uma proxy é um sistema de um para muitos. Isto é, por exemplo, quando alguém acede à Internet numa empresa, pode passar sempre por uma ou mais “proxys”, seja que site vai utilizar.
Também, normalmente, numa proxy os clientes são considerados internos.

Uma “reverse proxy”, costuma ser uma ligação de muitos para um. Isto é, muitos utilizadores que acedem apenas a um destino e em que o sistema de “proxy” tem apenas em conta um destino único.
Numa “reverse proxy” os clientes são considerados externos.

Um sistema de “proxy” ou “reverse proxy”, não é um conceito novo. Por exemplo, em *nix é muito conhecido o Squid que pode fazer tanto de “proxy” como de “reverse proxy”.
Um exemplo de uma proxy, não http, é o Mysql proxy, que serve de proxy entre algo e os pedidos ao servidor Mysql.

 

O que é o Varnish?

Para pessoas menos conhecedoras, este pequeno video, explica bem qual a intenção e objectivos do Varnish.

O Varnish é um produto bastante recente, desenvolvido por um programador que tem 15 anos de experiência com o kernel de FreeBSD.
Este ponto faz toda a diferença, pois sem este “background”, o Varnish seria algo bastante diferente nas suas entranhas.
O nome deste programador é Poul-Henning Kamp.

O projecto começou em 2006, com a versão 1.0, quando um jornal Dinamarquês de seu nome VG, quis trocar o seu sistema de “reverse proxy” composto por 12 servidores com Squid, para algo melhor.
Esse melhor foi o Varnish 1.0, que substituiu os 12 servidores por apenas 3.

Em 2008 foi lançada a versão 2.0, mas mesmo neste mometo, continuava a ser um software usado por poucos.
Na altura onde o Varnish tinha uma maior implementação era nos países nórdicos, mas continuava a ser um software muito pouco conhecido e para quem se recorda do site nesses tempos, parecia quase um projecto abandonado, visto que não havia evolução aparente e o site era pobre a nível de informação.

Tudo mudou com a evolução da versão 2.X. Começaram a aparecer sites conhecidos e grandes a perceber as suas vantagens e a implementarem o Varnish.
Hoje em dia, por exemplo o Facebook e o Slashdot usam Varnish.

Este ano saiu o Varnish 3.0 e este pequeno video, mostra uma pequena apresentação, feita pelo autor, do Varnish 3.0.

Para uma pessoa que não esteja nesta área, pode perguntar porque é necessário uma reverse proxy, quando o site em si devia fazer esse trabalho.
O problema é que nos dias de hoje, a maior parte dos sites usa linguagem dinâmicas, como php ou ASP e não html puro. Além disso os dados costumam estar separados do site em si, normalmente numa base de dados.
Isto trás grandes vantagens aos sites, mas também provoca uma maior carga (load) nos servidores.

O que o Varnish faz está explicado na última imagem. Se puder dar um objecto que esteja em cache, em memória ou disco, dá logo esse objecto, se não, pede ao servidor e se possível torna esse objecto em cache.
Pode parecer simples criar cache, mas é mais complicado do que parece, especialmente nos dias de hoje em que os sites são cada vez mais dinâmicos.
Por isso é que é preciso passar regras, que estejam bem pensadas, ao Varnish, para tentar ganhar a maior performance possível, sem que os utilizadores notem diferença na funcionalidade do site.

Varnish tem algumas características interessantes, que o separam de outros produtos:

– Primeiro o ficheiro de configuração, que não é texto puro, mas sim um ficheiro em que se têm que passar as regras numa linguagem chamada VCL de “Varnish Configuration Language”.
Isto torna a curva de aprendizagem do Varnish um pouco elevada, mas também tem como consequência uma enorme flexibilidade e aumento de performance.
Este aumento de performance deve-se ao VCL ser compilado em C, quando o programa é executado, num objecto que está directamente linkado ao programa em si.

– A aplicação é multi threaded, onde se podem escolher várias pools. Ele escala bastante bem com múltiplos cores e isso pode-se notar mais em sites que tenham regras mais complicadas no seu VCL.

– Outro ponto é como o Varnish faz cache para memória virtual. O autor do software colocou um algoritmo que é dado como certo à dezenas de anos e usou outro.
O algoritmo que é dado como certo é “Binary-Heap” e o que ele usa no Varnish é “B-Heap”.
O que ele mostra é que este segundo algoritmo é melhor quando a memória virtual está sobre pressão constante e que é isso que vê em casos reais.
Os números, entre eles parecem pequenos, mas se um site como o Facebook puder poupar 1 KB ou 10 milisegundos, vai sempre ajudar, porque isso multiplicado por milhões de transacções, dá um ganho enorme.

– Por último, a grande novidade da versão 3.0 é a possibilidade de se inserirem módulos ao programa principal, que possam melhorar e dar novas funcionalidades ao Varnish.
Os módulos chamam-se VMODS e têm que ser escritos em C, com uma API que foi implementada da versão 3.0.

1 2 3Página seguinte

Artigos Relacionados

Botão Voltar ao Topo