Lar Programas Verniz: prepare-se para ser pontilhado!

Verniz: prepare-se para ser pontilhado!

Índice:

Anonim

Quando se trata de desempenho do site, o Varnish é uma tecnologia quente. Com uma instalação e configuração simples, é possível aumentar o desempenho de qualquer site e servir até um milhão de páginas com apenas um pequeno servidor privado virtual., Mostrarei quatro configurações possíveis que ajudarão a melhorar o tempo de resposta do seu site, independentemente de você servir centenas, milhares ou milhões de páginas.

Uma Introdução ao Verniz

O Varnish-Cache é um acelerador da Web com o objetivo de armazenar em cache o conteúdo do site. É um projeto de código aberto que visa otimizar e acelerar o acesso a sites de forma não invasiva - sem alterar o código - e permitir que você coloque suas mãos em seu site.


Foram os criadores do Varnish Cache que o chamaram de acelerador da Web, porque seu objetivo principal é melhorar e acelerar o front-end de um site. O Varnish consegue isso armazenando cópias das páginas servidas pelo servidor Web em seu cache. Na próxima vez que a mesma página for solicitada, o Varnish enviará a cópia em vez de solicitar a página do servidor da Web, resultando em um tremendo aumento de desempenho.


Outro dos principais recursos do Varnish Cache, além de seu desempenho, é a flexibilidade de sua linguagem de configuração, a VCL. O VCL torna possível escrever políticas sobre como as solicitações recebidas devem ser tratadas. Nessa política, você pode decidir qual conteúdo deseja veicular, de onde deseja obtê-lo e como a solicitação ou resposta deve ser alterada.


Nos exemplos de configuração a seguir, mostrarei quais regras da VCL usar para atingir alguns objetivos, desde um simples armazenamento em cache de imagens e objetos estáticos, até o Varnish em um ambiente distribuído ou para que ele atue como um balanceador de carga.


Todos os exemplos a seguir são para o verniz 3.x. Observe que o Varnish 2.x usa sintaxe e regras diferentes; portanto, esses exemplos não são compatíveis com essa versão.


A seguir, estão os principais estados do Varnish, que usaremos no arquivo de configuração da VCL:


recv

Esta é a primeira função que é chamada ao receber uma solicitação. Aqui, podemos manipular a solicitação antes de verificar se ela está presente no cache. Se uma solicitação não puder ser colocada em um cache, o servidor backend ao qual a solicitação será enviada também poderá ser escolhido nesta fase.


passar

Podemos usar essa função quando queremos passar a solicitação ao servidor da Web e armazenar em cache a resposta.


tubo

Esta função ignora o Varnish e envia a solicitação ao servidor da Web.


olho para cima

Com uma pesquisa, o Varnish pede para verificar se a resposta está presente e válida no cache.


buscar

Essa função é chamada após a recuperação do conteúdo do back-end ser invocada por um passe ou uma falha.

Noções básicas: imagens de cache

Então, vamos ver um exemplo de configuração. Neste primeiro exemplo, apenas armazenaremos em cache as imagens e os arquivos estáticos, como arquivos CSS. Essa configuração é realmente útil quando você não conhece o site que deseja impulsionar, para poder decidir que todas as imagens, CSS e JavaScript são iguais para todos os usuários. Para distinguir os usuários, o protocolo HTTP usa cookies; portanto, temos que eliminá-los nesse tipo de solicitação para que sejam todos iguais para o Varnish:

sub vcl_recv{


if(req.url ~ " * \.(png|gif|jpg|swf|css|js)"{

unset req.http.cookie;


unset req.http.Vary;

return(lookup);

}


# strip the cookie before the image is inserted into cache.

sub vcl_fetch {

if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") {

unset beresp.http.set-cookie;

}

E é isso. Com este arquivo VCL, você pode armazenar em cache facilmente o conteúdo estático.

O padrão: imagens e páginas de cache

Normalmente, você não deseja apenas armazenar em cache o conteúdo estático do seu site, mas também deseja armazenar em cache algumas páginas dinâmicas geradas pelo servidor da Web, mas que são iguais para todos os usuários - ou pelo menos para todos os seus usuários anônimos. Comercial. Nesta fase, você deve saber escolher quais páginas podem ser armazenadas em cache e quais não.


Um bom exemplo é o Wordpress, um dos sistemas de gerenciamento de conteúdo mais usados. O Wordpress gera páginas de sites dinamicamente com PHP e consultas a um banco de dados MySQL. Isso é bom porque você pode atualizar facilmente seu site a partir da interface de administração com apenas alguns cliques, mas também é caro em termos de recursos utilizados. Por que executar o mesmo script PHP e consulta MySQL toda vez que um usuário entra na página inicial? Podemos usar o Varnish para armazenar em cache as páginas mais visitadas e obter resultados incríveis.


Estas são algumas regras que podem ser úteis em uma instalação do Wordpress:

sub vcl_recv{

# Let's make sure we aren't compressing already compressed formats.

if (req.http.Accept-Encoding) {

if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|mp3|mp4|m4v)(\?. * |)$") {

remove req.http.Accept-Encoding;

} elsif (req.http.Accept-Encoding ~ "gzip") {

set req.http.Accept-Encoding = "gzip";

} elsif (req.http.Accept-Encoding ~ "deflate") {

set req.http.Accept-Encoding = "deflate";

} else {

remove req.http.Accept-Encoding;

}

}


if (req.url ~ "^/$") {

unset req.http.cookie;

}


# Unset all cookies if not Wordpress admin - otherwise login will fail


if (!(req.url ~ "wp-(login| admin )")) {

unset req.http.cookie;

return(lookup);

}


# If you request the special pages go directly to them


if (req.url ~ "wp-(login| admin )") {

return (pipe);

}


}


sub vcl_miss {

if (!(req.url ~ "wp-(login| admin )")) {

unset req.http.cookie;

}

if (req.url ~ "^/+.(jpeg|jpg|png|gif|ico|js|css|txt|gz|zip|lzma|bz2|tgz|tbz|html|htm)(\?.|)$") {

unset req.http.cookie;

set req.url = regsub(req.url, "\?.$", "");

}

if (req.url ~ "^/$") {

unset req.http.cookie;

}

}

sub vcl_fetch {

if (req.url ~ "^/$") {

unset beresp.http.set-cookie;

}

# Unset all cookies if not Wordpress admin - otherwise login will fail

if (!(req.url ~ "wp-(login| admin )")) {

unset beresp.http.set-cookie;

}

}

Você pode ver que, neste exemplo, armazenamos em cache todas as páginas do nosso site, mas para aquelas que possuem "wp-admin" ou "wp-login" no URL, as strings são locais "especiais" usados ​​para efetuar login no Wordpress como administrador. Como tal, queremos conversar diretamente com o servidor da Web e ignorar o cache do Varnish.


Naturalmente, se você usa o Drupal, o Joomla ou um site personalizado, é necessário alterar essas regras, mas o objetivo é sempre o mesmo: enviar todas as páginas dinâmicas e cache possível para o seu back-end.

O padrão ++: aumentar a resiliência do servidor

Em algum momento, os servidores Web ficam lentos porque têm uma carga alta. O verniz também pode ajudar. Podemos usar algumas diretivas especiais para dizer ao Varnish que evite conversar com o back-end se estiver inativo ou se estiver respondendo muito lentamente. Para esses casos, o Varnish usa a diretiva "graça".


Graça no escopo do verniz significa entregar objetos vencidos quando as circunstâncias o exigirem. Isso pode acontecer porque:

  • O diretor de back-end selecionado está desativado
  • Um encadeamento diferente já fez uma solicitação ao back-end que ainda não foi concluída.
Ambos os casos são tratados da mesma forma na VCL:

sub vcl_recv {

if (req.backend.healthy) {

set req.grace = 30s;

} else {

set req.grace = 1h;

}

}


sub vcl_fetch {

set beresp.grace = 1h;

}

Essa configuração instrui o Varnish a testar o backend e aumentar o período de carência, se houver algum problema. O exemplo acima também apresenta a diretiva "req.backend.healthy", usada para verificar um back-end. Isso é realmente útil quando você tem vários back-ends, então vamos dar uma olhada em um exemplo mais avançado.

Uso avançado: criar um servidor Web resiliente em um ambiente distribuído

Este é o nosso arquivo de configuração final com todas as opções que vimos até agora e a definição de dois back-ends com alguma diretiva especial para o probe. É assim que o Varnish determina se um servidor da Web está ativo ou não.


.url

O Varnish fará solicitações para o back-end com este URL.


.tempo esgotado

Determina a rapidez com que a sonda deve terminar. Você deve especificar uma unidade de tempo com um número, como "0, 1 s", "1230 ms" ou até "1 h".


.intervalo

Quanto tempo de espera entre as pesquisas. Você deve especificar uma unidade de tempo aqui também. Observe que isso não é uma "taxa", mas um "intervalo". A taxa mais baixa de pesquisa é (.timeout + .interval).


.janela

Quantas das pesquisas mais recentes a serem consideradas ao determinar se o back-end é íntegro.


.limite

Quantas das últimas pesquisas do Windows devem ser boas para que o back-end seja declarado íntegro.


Agora podemos usar a diretiva "req.backend.healthy" e obter um resultado booleano que nos informa se os back-end estão ativos ou não.

#

# Customized VCL file for serving up a Wordpress site with multiple back-ends.

#


# Define the internal network subnet.

# These are used below to allow internal access to certain files while not

# allowing access from the public internet .

acl internal {

"10.100.0.0"/24;

}


# Define the list of our backends (web servers), they Listen on port 8080


backend web1 { .host = "10.100.0.1"; .port = "8080"; .probe = { .url = "/status.php"; .interval = 5s; .timeout = 1s; .window = 5;.threshold = 3; }}

backend web2 { .host = "10.100.0.2"; .port = "8080"; .probe = { .url = "/status.php"; .interval = 5s; .timeout = 1s; .window = 5;.threshold = 3; }}


# Define the director that determines how to distribute incoming requests.

director default_director round-robin {

{ .backend = web1; }

{ .backend = web2; }

}


# Respond to incoming requests.

sub vcl_recv {


set req.backend = default_director;

# Use anonymous, cached pages if all backends are down.

if (!req.backend.healthy) {

unset req.http.Cookie;

set req.grace = 6h;

} else {

set req.grace = 30s;

}

# Unset all cookies if not Wordpress admin - otherwise login will fail


if (!(req.url ~ "wp-(login| admin )")) {

unset req.http.cookie;

return(lookup);

}


# If you request the special pages go directly to them


if (req.url ~ "wp-(login| admin )") {

return (pipe);

}


# Always cache the following file types for all users.

if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?+)?$") {

unset req.http.Cookie;

}


}


# Code determining what to do when serving items from the web servers.

sub vcl_fetch {

# Don't allow static files to set cookies.

if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?+)?$") {

# beresp == Back-end response from the web server.

unset beresp.http.set-cookie;

}


# Allow items to be stale if needed.

set beresp.grace = 6h;

}

Uma ferramenta poderosa

Estes são apenas alguns exemplos que podem ajudá-lo a começar a usar o Varnish. Essa ferramenta é realmente poderosa e pode ajudá-lo a obter um excelente aumento de desempenho sem comprar mais hardware ou máquinas virtuais. Para muitos administradores de sites, esse é um benefício real.

Verniz: prepare-se para ser pontilhado!