SlideShare uma empresa Scribd logo
Varnish Cache
Implementação no clicRBS
Agenda
 O projeto Varnish Cache
 A implementação no clicRBS
 Configuração
 Alta disponibilidade e performance
 Monitoramento
 Logs
 Extensões via VMODs
O Projeto 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)
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.
Implementação no clicRBS
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.
Requisitos do Varnish no clicRBS
Vinas
Persistência de sessão
HTTPS
O VARNISH NÃO
SUPORTA SSL
Invalidações de conteúdo
 O Varnish suporta dois tipos de invalidação:
 Por parão de URL
 Por URL completa
Invalidar o quê?
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?
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!
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.
Configuração
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
Configuração - VCL
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!).
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.
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
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
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
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
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
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
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
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
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
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.
Alta disponibilidade
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.
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;
}
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; }
}
Saint-mode
sub vcl_fetch {
(...)
//Saint Mode for 10 seconds
if (beresp.status >= 500) {
set beresp.saintmode = 10s;
return(restart);
}
return(deliver);
}
Monitoramento
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.
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
Extensões do Varnish
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.
Performance
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
Estatísticas via APIs Open Source
VARNISHSTAT
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
Lincolm Aguiar
Grupo RBS
Obrigado!

Mais conteúdo relacionado

PDF
Ebook Apache Server: Guia Introdutório
PDF
Servidor apache
PDF
Web seminario varnish
PPT
Servidores WEB
PDF
Dicas para Turbinar o servidor de Aplicações JBoss 7
PDF
Introdução ao zend framework
PPTX
JBoss-WildFly - Avançado
ODP
Performance em Java
Ebook Apache Server: Guia Introdutório
Servidor apache
Web seminario varnish
Servidores WEB
Dicas para Turbinar o servidor de Aplicações JBoss 7
Introdução ao zend framework
JBoss-WildFly - Avançado
Performance em Java

Mais procurados (14)

PPTX
WildFly Avançado - TDC Floripa 2015
PDF
Iniciando com o_zend_framework
PPT
Servidores Web
PPTX
Introduction to the citrix xenserver
PDF
Estudos Technocorp
PPTX
Apresentação PGDAY - Replicação Nativa - PostgreSQL
PDF
Servidor Próprio - Configuração do CWP Panel
PDF
Servidores Web
PDF
Dreamweaver m18
PDF
Otimizacao de websites em PHP
PPTX
DNSORC
PPT
Trabalho sobre Proxy
PDF
Desenvolvendo aplicações Web escaláveis
PDF
Soluções de Web Caching e Web Acceleration - Domingos Parra Novo
WildFly Avançado - TDC Floripa 2015
Iniciando com o_zend_framework
Servidores Web
Introduction to the citrix xenserver
Estudos Technocorp
Apresentação PGDAY - Replicação Nativa - PostgreSQL
Servidor Próprio - Configuração do CWP Panel
Servidores Web
Dreamweaver m18
Otimizacao de websites em PHP
DNSORC
Trabalho sobre Proxy
Desenvolvendo aplicações Web escaláveis
Soluções de Web Caching e Web Acceleration - Domingos Parra Novo
Anúncio

Destaque (6)

PPTX
Automação no clicrbs
PPTX
Plataforma do clic rbs
PPTX
Citologia - Depressao
PDF
Plataforma Tecnológica do clicRBS
PDF
Apresentação hotspot
PDF
Doenças respiratórias. modificação 05.06
Automação no clicrbs
Plataforma do clic rbs
Citologia - Depressao
Plataforma Tecnológica do clicRBS
Apresentação hotspot
Doenças respiratórias. modificação 05.06
Anúncio

Semelhante a Varnish cache (20)

PDF
Curso de CVS - Lab 2
PPTX
Orquestração de containers com Rancher
PDF
Overview Sobre Varnish
PDF
Apache
PPTX
Brutos Framework (Java WEB MVC)
PDF
Curso de CVS - Parte 3 - Uso Básico
PDF
Varnish no clicRBS
PDF
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
PDF
Apresentação do Kbase Framework
PPT
Varnish3, plone4: discutindo a relação
PDF
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
PDF
Slides
PPTX
Sistemas Distribuídos baseados na Web
PDF
Web Training Aula 03: Introduction to Laravel
PDF
Mastering Laravel
PDF
Web Seminário sobre Varnish+Nginx+Apache
PDF
EXercici Laboratorios-Vmware_vSphere7.pdf
PPTX
Escalonamento de processos em sistemas virtualizados
PPT
CVS - Slides Parte 2 - Administração
PPTX
Aplicações web parte 2
Curso de CVS - Lab 2
Orquestração de containers com Rancher
Overview Sobre Varnish
Apache
Brutos Framework (Java WEB MVC)
Curso de CVS - Parte 3 - Uso Básico
Varnish no clicRBS
Melhorando o desempenho do seu WordPress [WordCamp São Paulo 2015]
Apresentação do Kbase Framework
Varnish3, plone4: discutindo a relação
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
Slides
Sistemas Distribuídos baseados na Web
Web Training Aula 03: Introduction to Laravel
Mastering Laravel
Web Seminário sobre Varnish+Nginx+Apache
EXercici Laboratorios-Vmware_vSphere7.pdf
Escalonamento de processos em sistemas virtualizados
CVS - Slides Parte 2 - Administração
Aplicações web parte 2

Mais de Lincolm Aguiar (8)

PDF
Programação de Computadores para Biomedicina
PDF
Inteligência Artificial
PPTX
A bioquímica dos antidepressivos
PDF
Blockchain health
PDF
Análise estatística de artigo
PDF
Orquestradores - aplicações e preocupações
PDF
Nanomedicina
PDF
Embriologia desenvolvimento membros
Programação de Computadores para Biomedicina
Inteligência Artificial
A bioquímica dos antidepressivos
Blockchain health
Análise estatística de artigo
Orquestradores - aplicações e preocupações
Nanomedicina
Embriologia desenvolvimento membros

Último (6)

PDF
Agosto-Lilas-Conscientizacao-e-Combate-a-Violencia-contra-a-Mulher.pdf
PDF
PROJETO DE PESQUISA PRONTO ESTÉTICA 2025 ABNT.pdf
PPTX
AULA_12_BASQUETE CAPACIDADE FÍSICA_171023.pptx
PDF
PROJETO DE PESQUISA PRONTO FONOAUDIOLOGIA 2025 ABNT.pdf
PDF
Certificado de Conclusão Jornada Inteligência Artificial
PPT
Aula_15.pptssssssssssssssssssssssssssssssssssssss
Agosto-Lilas-Conscientizacao-e-Combate-a-Violencia-contra-a-Mulher.pdf
PROJETO DE PESQUISA PRONTO ESTÉTICA 2025 ABNT.pdf
AULA_12_BASQUETE CAPACIDADE FÍSICA_171023.pptx
PROJETO DE PESQUISA PRONTO FONOAUDIOLOGIA 2025 ABNT.pdf
Certificado de Conclusão Jornada Inteligência Artificial
Aula_15.pptssssssssssssssssssssssssssssssssssssss

Varnish cache

  • 2. Agenda  O projeto Varnish Cache  A implementação no clicRBS  Configuração  Alta disponibilidade e performance  Monitoramento  Logs  Extensões via VMODs
  • 4. 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)
  • 5. 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.
  • 7. 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.
  • 8. Requisitos do Varnish no clicRBS Vinas
  • 11. Invalidações de conteúdo  O Varnish suporta dois tipos de invalidação:  Por parão de URL  Por URL completa Invalidar o quê?
  • 12. 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?
  • 13. 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!
  • 14. 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.
  • 16. 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
  • 18. 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!).
  • 19. 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.
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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.
  • 31. 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.
  • 32. 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; }
  • 33. 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; } }
  • 34. Saint-mode sub vcl_fetch { (...) //Saint Mode for 10 seconds if (beresp.status >= 500) { set beresp.saintmode = 10s; return(restart); } return(deliver); }
  • 36. 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.
  • 37. 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
  • 39. 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.
  • 41. 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
  • 42. Estatísticas via APIs Open Source
  • 44. 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