varnish cache

45
Varnish Cache Implementação no clicRBS

Upload: lincolm-aguiar

Post on 03-Aug-2015

25 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: Varnish cache

Varnish CacheImplementação no clicRBS

Page 2: Varnish cache

Agenda

O projeto Varnish Cache

A implementação no clicRBS

Configuração

Alta disponibilidade e performance

Monitoramento

Logs

Extensões via VMODs

Page 3: Varnish cache

O Projeto Varnish Cache

Page 4: Varnish cache

O Projeto Varnish Cache

Iniciado por Poul-Henning Kamp, desenvolvedor líder no tabloide norueguês Verdens Gang. Teve a primeira versão publicada em 2006.

Criado na linguagem C sob a licença BSD (Bekerley Software Distribution).

Está na versão 4.0, no clicRBS usamos a versão 3.0.4 (em Maio/2014).

Utilizado por grandes empresas de conteúdo, dentre elas BBC e Globo.com

Tem versão open source (via varnish-cache.org) e comercial via a empresa Varnish Cache (varnish-cache.com)

Page 5: Varnish cache

Por que o Varnish?

1. Open Source

1. Iniciativas de tornar o clicRBS viável com produtos open source;

2. Confiabilidade

1. Precisava ter a confiabilidade conquistada pelo Oracle WebCache;

3. Fácil configuração

1. A equipe de infra não poderia ter que seguir processos para implementar modificações no cache

4. Otimizado para sistemas Linux

1. Os servidores do clicRBS são Linux, a implementação do HTTP Cache teria que ter aderência primária para essa plataforma de sistema operacional.

Page 6: Varnish cache

Implementação no clicRBS

Page 7: Varnish cache

Requisitos para o clicRBS

Oracle WebCache como servidor de cache primário, o Varnish precisa “comportar-se” como WebCache para os mecanismos de entrega e invalidação.

Por mecanismos de entrega, entenda Caixa Cisco.

Por mecanismos de invalidação, entenda Vinas.

As aplicações usam recursos direcionados para o WebCache, como o suporte a tags ESI, o Varnish precisa usar o mesmo dialeto para processar as mesmas tags ESI.

Page 8: Varnish cache

Requisitos do Varnish no clicRBS

Vinas

Page 9: Varnish cache

Persistência de sessão

Page 10: Varnish cache

HTTPS

O VARNISH NÃOSUPORTA SSL

Page 11: Varnish cache

Invalidações de conteúdo

O Varnish suporta dois tipos de invalidação:

Por parão de URL

Por URL completa

Invalidar o quê?

Page 12: Varnish cache

Invalidações de conteúdo

Quando você invalida um conteúdo em um HTTP Cache, o que você espera atingir?

Como você notifica aos milhares, ou milhões, de usuários navegando em seu site que o conteúdo foi expirado no cache?

Seu site tem uma política de cache de conteúdo alinhada com o que fica no cliente e o que não pode ficar?

Para o conteúdo que fica no cliente, quando fazer “conditional get”?

Você pensa no consumo de banda do usuário do seu site quando você usa “don´t cache” no servidor de HTTP Cache?

Page 13: Varnish cache

Invalidações....

Dados...

Os sites do clicRBS passaram a ser servidos por apenas servidores Varnish em 17 de Abril de 2014. Desde essa data não havia nenhuma entrega por Oracle WebCache;

De 17 de Abril de 2014 a 29 de Abril de 2014 o clicRBS ficou sem NENHUM mecanismo de invalidação de cache ativo. O mecanismo existia, mas não estava configurado.

O mecanismo de invalidação de cache foi configurado no clicRBS em 29 de Abril de 2014, mas continua ate hoje desligado o mecanismo de invalidações automáticas para conteúdos. O mecanismo automático não mais será ativado!

Page 14: Varnish cache

Log de requisições

O Varnish precisava ter suporte a log de requisições usando o formato Apache Common Format.

Usamos os logs de acesso nos sites para envio para o IVC.

Page 15: Varnish cache

Configuração

Page 16: Varnish cache

Configuração

Usamos a versão 3.0.4 do Varnish compilando a partir do fonte.

A compilação permite a customização de diretórios de instalação e configuração.

Linguagem de configuração do Varnish: VCL – Varnish Configuration Language

Page 17: Varnish cache

Configuração - VCL

Page 18: Varnish cache

VCL

O Varnish é configurado via sua linguagem de descrição de configuração;

A sintaxe parece com uma estrutura json com definição de rotinas;

Há uma ordem de execução das rotinas, como mostrado no slide anterior;

A configuração é sobre-escrita apenas no ponto de modificação.

A linguagem trabalha com tipos próprios e não contém estruturas completas de uma linguagem de programação (por isso é de configuração!).

Page 19: Varnish cache

VCL

A solicitação inicia na rotina vcl_recv.

O documento pode ser lido do cache (lookup) ou diretamente do servidor (pass ou miss).

Quando a estratégia lookup é selecionada, a rotina vcl_hash cria o identificador único da URL para que o Varnish possa localizar o conteúdo no cache.

O documento retornado do servidor pode “informar” ao varnish para não reter aquela cópia em cache.

O Varnish trata a solicitação via a rotina vcl_deliver antes de entregar a resposta ao cliente.

Page 20: Varnish cache

Definições de VCL

- Um backend é, para o Varnish, o servidor de origem que contém a página.

- Sendo o Varnish um proxy reverso, ele irá buscar o conteúdo em um servidor, caso o conteúdo não esteja com ele.

- Um backend tem as propriedades:

- Host: identificação de rede do backend

- Port: qual porta atende o serviço

- Probe: como validar se o serviço no backend está funcionando.

- Múltiplos backends podem agir com um só em uma configuração denominada director.

BACKEND

Page 21: Varnish cache

Definições de VCL

- ACL é Access Control List. O Varnish permite criar restrições de acesso para recursos, seja por qual informação for.

- Usamos ACL no Varnish para que ele aceite invalidações pelos servidores do CMS.

- Podemos implementar ACLs para restringir um conteúdo a apenas acessos internos, por exemplo.

- A verificação é feita por VCL, logo é possível usar qualquer atributo da solicitação, da URL à cabeçalhos HTTP, por exemplo.

ACL

Page 22: Varnish cache

Definições de VCL

- Probe é um atributo de um backend.

- O Varnish não “deixa” o usuário saber que um servidor está com problemas. Ele usa as definições de probe, para de forma pró-ativa, verificar os backends. Os backends inaptos não recebem solicitações dos usuários.

PROBE

Page 23: Varnish cache

Definições de VCL

- O Varnish usa três escopos de cache:

- LOOKUP: o documento deverá ser lido do cache, caso não exista, será lido no servidor e armazenado no cache. O tempo de armazenado é definido pelo cabeçalho Cache-Control, ou na sua ausência, pela diretiva de DEFAULT_TTL.

- PASS: o documento será entregue do cache, mas será antes buscado no servidor de aplicações. O cache age como um buffer.

- PIPE: o documento será entregue diretamente do servidor, sem usar a estrutura de cache e fail over.

ESCOPO DE CACHE

Page 24: Varnish cache

Definições de VCL

- Rotina responsável por iniciar o processamento da solicitação.

- Nela são tomadas as decisões para:

- Diferenciação mobile;

- Seleção de backend;

- Estratégia de cache;

- Redefinição de informações de solicitação etc.

vcl_req

Page 25: Varnish cache

Definições de VCL

- Rotina responsável por criar o identificador único da URL para o cache.

- Utilizamos vcl_hash para distinguir documentos com e sem paywall no clicRBS. vcl_hash

Page 26: Varnish cache

Definições de VCL

- Rotina responsável por buscar, por isso fetch, o documento no servidor de aplicações.

- Permite a customização da solicitação para o servidor de aplicações, bem como permite a configuração de como o varnish irá servir o documento (se do cache ou não, com gzip ou não, com esi ou não).

- Usamos vcl_fetch no clic para habilitar o suporte a ESI através do cabeçalho Surrogate-Control

- Também usamos no vcl_fetch a instrução de ignore cache no Varnish de acordo com o cabeçalho Surrogate-Control.

vcl_fetch

Page 27: Varnish cache

Definições de VCL

- Rotina responsável por tratar a resposta para o usuário removendo informações que julgamos desnecessárias, dentre elas temos os cabeçalhos:

- Surrogate-Control: contém dialeto Oracle WebCache

- Server: exposição desnecessária da implementação do servidor de aplicações;

- Content-Location: exposição desnecessária da localização de recursos no servidor abaixo das URLs amigáveis.

- Cabeçalhos de controle de cache: usamos três cabeçalhos de controle de cache que permitem a invalidação pelo vinas.

vcl_deliver

Page 28: Varnish cache

Definições de VCL

- O Varnish permite definir rotinas customizadas. Usamos isso para implementar a identificação de mobile. Hoje identificamos os dispositivos:

- iPhone, iPad, tablet Android, phone Android, Firefoxos, bots, mobile smartphone (que não seja Android nem iOS) e mobile genéric (telefone com WAP).

rbs_mobile

Page 29: Varnish cache

Tempo de vida em cache

O Varnish usa o cabeçalho Cache-Control, enviado pelo servidor de aplicações, para controlar o tempo de vida do documento em cache.

O header Age é gerado pelo Varnish para que o navegador possa calcular corretamente o tempo que o objeto pode ser considerado válido.

O Varnish NÃO modifica cabeçalhos da requisição SENÃO por definição no VCL. Usamos no clic a inclusão do cabeçalho Cache-Control via VCL para SOMENTE as páginas que não o definem e, com isso, caem na regra de DEFAULT_TTL.

Page 30: Varnish cache

Alta disponibilidade

Page 31: Varnish cache

Alta disponibilidade

A alta disponibilidade de entrega no Varnish é feita via três mecanismos de garantia de entrega:

1. Probe: o mecanismo principal para garantir que o Varnish não encaminhe a solicitação para um servidor que não está apto a fazer entregas;

2. Director: um director é uma composição de backends, tal que o Varnish lida com todos como se fossem um só. Via Director é possível implementar mecanismos de seleção sendo round-robin, round, random, fallback, cliente e dns.

3. Saint-mode: O mecanismo saint-mode apenas está disponível na configuração do tipo Director. Nela o Varnish valida a resposta do servidor, se for inadequada, o varnish repete a solicitação em outro servidor, sem interação com o usuário.

Page 32: Varnish cache

Probe

probe hc_it_80 {.request = "HEAD /rs/jsp/probe.jspx HTTP/1.1“

"Host: zerohora.clicrbs.com.br“"User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64;

rv:21.0) Gecko/20100101 Firefox/21.0“"Connection: close";

.interval = 10s;

.timeout = 0.5s;

.window = 9;

.threshold = 3;}

Page 33: Varnish cache

Director

backend enzo_7779 {

.host = "enzo.rbs.com.br";

.port = “7779";

.probe = hc_it_80;

}

director it_80 round-robin {

{ .backend = enzo_7779; }

{ .backend = jaguar_7779; }

{ .backend = lincolm_7779; }

{ .backend = bentley_7779; }

}

Page 34: Varnish cache

Saint-mode

sub vcl_fetch {

(...)

//Saint Mode for 10 seconds

if (beresp.status >= 500) {

set beresp.saintmode = 10s;

return(restart);

}

return(deliver);

}

Page 35: Varnish cache

Monitoramento

Page 36: Varnish cache

Monitoramento

O Varnish usa monitoramento ativo e tão efetivo que é possível assumir um comportamento reativo antes mesmo que os usuários no site comecem a perceber algum erro.

Via a api varnishadm o Varnish exporta dados de execução do runtime para que possam ser analisadas por mecanismos de acompanhamento de disponibilidade como Zabbix, por exemplo.

A api Varnishlog expõe com nível de detalhamento de mensagem de rede, como foi a verificação de disponibilidade do servidor de backend.

Page 37: Varnish cache

varnishlog

0 Backend_health - wp_clicrbs_com_br_80[1] Still sick 4--X-R- 0 3 9 0.640206 0.000000 HTTP/1.1 404 Not Found

0 Backend_health - www_clicrbs_com_br_80[0] Still healthy 4--X-RH 9 3 9 0.004539 0.004548 HTTP/1.1 301 Moved Permanent

Page 38: Varnish cache

Extensões do Varnish

Page 39: Varnish cache

VMODs (Varnish Modules)

O Varnish permite customização de configurações via inclusão de módulos compiláveis, escritos na linguagem C.

A instalação padrão traz o vmod std que contém rotinas utilitárias.

Os projetos de vmods são mantigos no github

Para compilar um vmod você só precisa do fonte do Varnish e baixar, ou criar o seu próprio fonte do vmod.

Page 40: Varnish cache

Performance

Page 41: Varnish cache

Performance

Havia um grande receio de o Varnish não suportar a carga que era entregue pelos servidores de Oracle WebCache.

Fizemos um trabalho de publicar uma máquina de Varnish por vez, medindo sempre a resposta e comparando com os Oracle WebCaches.

Não havia máquina disponível para “subir” ao lado, então a instalação no clicRBS consistiu de retira um servidor de Oracle WebCache, remove tudo, instala e configura o Varnish e sobe novamente o servidor.

Foi catastrófico....para o Oracle WebCache

Page 42: Varnish cache

Estatísticas via APIs Open Source

Page 43: Varnish cache

VARNISHSTAT

Page 44: Varnish cache

Consumo de CPU com Varnish

Somente Oracle WebCache

Aqui, tiramos a máquina para remover o Oracle WebCache e instalar o Varnish. Mantemos o SO.

Somente o Varnish

Page 45: Varnish cache

Lincolm AguiarGrupo RBS

Obrigado!