SlideShare uma empresa Scribd logo
1 de 57
Consegi 2010


                 Oficina
Escalabilidade e performance da infraestrutura
    Plone/Zope com CacheFU e Varnish

               Lucas Brasilino
         <brasilino@pgr.mpf.gov.br>
Sobre o instrutor
Servidor do MPF, lotado na PGR;
Integrante da equipe da Seção de Sistemas
Operacionais;
Consultor e Instrutor pela 4Linux
  Cursos de Apache e Squid
Certificado LPIC-3 e LPIC-302
Pós-graduado em Administração de Redes
Linux pela UFLA.
Sobre a oficina
  (aka alinhamento de espectativas)
Foco em:
  Protocolo HTTP
  Componentes de uma infra escalável
  Customizações do S.O. Linux
  Infra Zope
  Aceleração HTTP via Varnish
  Produto CacheFU
Não será abordado:
  Programação Zope/Python
  Criação de um Plone Site
Performance na Web
   (alguns poucos mandamentos)
Minimizar o número de requisições HTTP
Habilitar conexões persistentes
  Cuidado para não se consumir recursos
     Número de conexões abertas
     CPU / Memória
  Melhor seria usar pipelining :)
Performance na Web
   (alguns poucos mandamentos)
Habilitar compressão em arquivos texto
  HTML
  CSS
  Javascript
  XML
Usar figuras de tamanho apropriado
Usar Caching
  Não há performance sem cache!!
Protocolo HTTP
Hyper Text Transfer Protocol
Baseado em requisições e respostas
  Stateless: requisições são independentes entre si
Objetiva:
  Buscar um objeto
  Executar um código no servidor
Duas versões em uso: HTTP 1.0 e 1.1
Uniform Resource Locator
               URL
Tem como função endereçar todo e qualquer
objeto na Web
  Pode ser entendido como uma 'chave'
  Pode ser manipulada durante toda a cadeia de
  requisição e resposta
  Por isto pode criar uma relação N para 1
Uniform Resource Locator
            URL


        Formato Geral:
<scheme>://<scheme-specific-part>
Uniform Resource Locator
                  URL
      Formato aplicado ao protocolo HTTP:

        http://host[:port]/[path][?querystring]
host: nome do servidor/IP de onde se buscar o objeto
port: porta TCP para conexão
path: caminho no servidor a partir de um raiz onde
   localiza-se o objeto
querystring: sequência pré-determinada de
   argumentos e valores.
Uniform Resource Locator
                URL
Exemplos:
http://arl.ginux.ufla.br/files/arl_logo.gif


http://www.pgr.mpf.gov.br/


http://www.google.com.br/search?q=plone&l=pt_BR


http://apps.foo.org:8080/login.php
Protocolo HTTP
Conexão TCP realizada pelo cliente:



            requisição / resposta
Protocolo HTTP
 Exemplo de requisição:
URL: http://arl.ginux.ufla.br/files/arl_logo.gif


    GET /files/arl_logo.gif HTTP/1.1
    Host: arl.ginux.ufla.br
    User-Agent: BrasilinoBrowser/1.0
    Accept: text/html, image/*
    Connection: close
    ◄
Protocolo HTTP
Formato de uma requisição:

                request line
                 headers
                  CRLF


                 entity body
Protocolo HTTP
request line:
  Método: GET, POST, HEAD, PUT, DELETE,
  TRACE, OPTIONS
  Parte path + query string da URL
  Versão do protocolo HTTP
Protocolo HTTP
headers:
  Par nome : valor
    Lembrem-se de chave:dado :)
  Classificados em:
    Request headers: Aplicáveis apenas em requisições
    Response headers: Aplicáveis apenas em respostas
    General headers: Aplicáveis tanto em requisições quanto
    respostas
    Entity headers: Descreve o entity body
Protocolo HTTP
Entity body
  Corpo da mensagem
  Em requisições, só estão presentes quando usado
  os métodos POST e PUT.
Protocolo HTTP
Exemplo de resposta:
     HTTP/1.1 200 OK
     Date: Sat, 14 Feb 2009 11:35:05 GMT
     Server: Apache
     Last-Modified: Tue, 27 Nov 2007 20:35:25 GMT
     ETag: "40d56-129f-43fef05453d40"
     Accept-Ranges: bytes
     Content-Length: 4767
     Cache-Control: max-age=1209600
     Expires: Sat, 28 Feb 2009 11:35:05 GMT
     Connection: close
     Content-Type: image/gif
     ◄
     GIF89a ^@Z^@ç^@^@^B^B^B^B<82>î<99>h...
Protocolo HTTP
Formato de uma resposta:

                status line
                 headers
                  CRLF


                entity body
Protocolo HTTP
status line:
  Versão do protocolo HTTP
  Status code
  Descrição textual do status code
Protocolo HTTP
Código de respostas (status code)
status code categoria de resposta   status code     descrição textual
    1xx          Informação             200                OK
    2xx            Sucesso              206          Partial Content
    3xx      Redirecionamento           301       Moved Permanently
    4xx         Erro do cliente         302              Found
    5xx        Erro do servidor         304           Not Modified
                                        403            Forbidden
                                        404            Not Found
                                        500       Internal Server Error
                                        503        Service Unaviable
Protocolo HTTP




Instalem o HTTPFox :)
Protocolo HTTP
   Versão 1.0
       Não suportam Virtual Hosts (header Host):
       Conexão não é persistente
       Apenas um funcionalidade de caching (header
       Expires):

Obs: Na prática, os clientes e servidores suportam
virtual hosts e conexão persistente.
Protocolo HTTP
Versão 1.1
  Introduz o conceito de Virtual Hosts
  Por padrão a conexão é persistente
  Suporta pipelining
  Introduz dois mecanismos de caching:
     Baseado em expiração
     Baseado em validação
Protocolo HTTP
Conceitos em torno do Caching
  Objeto válido
    O objeto pode ser reutilizado e, portanto, armazenado
    em cache.
  Objeto inválido
    O objeto não pode ser reutilizada, ou seja, não pode ser
    armazenado em cache e deve ser descartado o quanto
    antes.
  TTL
     Tempo de vida em que o objeto é válido
Protocolo HTTP
Expiração
  Ato do objeto válido tornar-se inválido
Validação (ou revalidação)
  Ato de tornar um objeto expirado válido
Protocolo HTTP
   Modelo baseado em expiração
Header Expires
  Define o tempo absoluto para expiração


 HTTP/1.0 200 OK
 Server: Apache
 Content-Type: image/gif
 Date: Fri, 27 Feb 2009 21:13:45 GMT
 Last-Modified: Wed, 07 Jun 2006 19:50:30 GMT
 Expires: Sun, 17 Jan 2038 19:14:07 GMT
 Connection: Keep-Alive
Protocolo HTTP
   Modelo baseado em expiração
Header Cache-Control
 Define o tempo relativo para expiração

 HTTP/1.1 200 OK
 Server: Apache
 Content-Type: image/gif
 Date: Fri, 27 Feb 2009 21:13:45 GMT
 Cache-Control: max-age=3600, public
 Last-Modified: Wed, 07 Jun 2006 19:50:30 GMT
 Connection: Keep-Alive
Protocolo HTTP
   Modelo baseado em expiração
Vantagens:
  Diminui o número de requisições HTTP
  Diminui a latência
  Diminui a carga no servidor de origem
Geralmente aplicado em:
  Conteúdos estáticos como figuras, CSS,
  documentos (PDF, ODT, ODP), código JavaScript,
  páginas HTML estáticas, etc.
Protocolo HTTP
   Modelo baseado em validação
O servidor adiciona à resposta o header
Last-Modified com a data de última
modificação do objeto
O cliente armazena a data informada pelo
Last-Modified e a cada requisição ele inclui
o header If-Modified-Since com esta
data.
  Requisição condicional
Protocolo HTTP
    Modelo baseado em validação
Se o objeto foi modificado:
  Siginifica que a condição é verdadeira
  O objeto no cliente é inválido
  A resposta conterá o status code 200 'OK'
  No corpo da resposta (entity body) estará presente
  o novo objeto, ou seja, o objeto será enviado
  novamente ao cliente
  Possivelmente será adicionado a nova data de
  modificação no header Last-Modified
Protocolo HTTP
   Modelo baseado em validação
Se o objeto não foi modificado:
  Siginifica que a condição é falsa
  A resposta conterá o status code 304 'Not Modified'
  O objeto não precisará ser enviado
  O objeto foi revalidado
Protocolo HTTP
   Modelo baseado em validação
Vantagens:
  Diminui a largura de banda necessária para
  transferir o objeto
  Diminui a latência
Geralmente aplicado em:
  Informações onde há necessidade tempestiva de
  se acessar a última versão do objeto
Servidor Proxy/Cache
Proxy/cache tradicional (forward proxy/cache)
Servidor Proxy/Cache
Proxy/cache reverso (reverse proxy/cache)
Servidor Proxy/Cache
Acelerador HTTP (HTTP accelerator)
Componentes de uma infra escalável
Acelerador HTTP
Balanceador
Servidor de aplicação
Banco de dados
Componentes de uma infra escalável
Customização da Pilha TCP/IP do 
             Linux
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_fin_timeout = 5
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
Customização da Pilha TCP/IP do 
               Linux
 Adicionem esta configuração no /etc/sysctl.conf.
    Executem: sysctl -p
 No ambiente (shell) que executar um serviço
aumente o número máximo de descritores:
   ulimit -HSn 16384
Infra Zope
Modo tradicional de operação do Zope:




                    Zope




                           Datafs
Infra Zope
Modo escalável de operação do Zope:


       Zope         Zope               Zope




                              Datafs

                  ZeoServer
Infra Zope
Modo escalável de operação do Zope:


       Zope                 Zope                 Zope




                          Datafs               Datafs

              ZeoServer            ZeoServer
Infra Zope




Instalem a infra Zope a partir do buildout.cfg
                  fornecido.
Varnish
Acelerador HTTP
Eficiente pois utiliza técnicas modernas de IPC e
acesso ao conteúdo em cache
  Utiliza shared memory como IPC
  Utiliza memory mapped file para armazenar objetos
É extremamente flexível, através de sua linguagem de
configuração VCL
  Trata-se de um DSL
  Em minha opinião é sua característica matadora
Varnish Configuration Language
               VCL
Sintaxe similar ao Perl e C
Operadores:
  Atribuição: =
    Se a atribuição for a um atributo, usa-se o
    operador 'set'
  Comparação: ==, !=
  Boleano: !, &&, ||
  Regex: ~
Suporta blocos '{ }', testes com if mas não loops
Varnish Configuration Language
                   VCL
    Exemplos
set req.http.connection = close


if (req.http.host != "www.pgr.mpf.gov.br") {
    set req.http.host = www.pgr.mpf.gov.br;
}
Varnish Configuration Language
               VCL
Subrotinas:
  vcl_recv
    Chamada ao ser recebido a requisição do cliente
  vcl_pipe
    Chamada ao se entrar no modo pipe
  vcl_pass
    Chamada so se entrar no modo pass
  vcl_hash
    Chamada ao se procurar um objeto em cache
Varnish Configuration Language
               VCL
Subrotinas:
  vcl_hit;
     Chamada quando o objeto é encontrado em cache
  vcl_miss
     Chamada quando o objeto não é encontrado em cache
  vcl_fetch
     Chamada após recebe objeto do backend
  vcl_deliver
     Chamada antes do objeto se entregue ao cliente
Varnish Configuration Language
               VCL
Retorno das subrotinas:
  pipe
     Entra no modo pipe (passa para vcl_pipe)
  pass
     Entra no modo pass (passa para vcl_pass)
  lookup
     Procura objeto no cache (passa para vcl_hash)
  hash
     Passa para vcl_hi ou vcl_miss
Varnish Configuration Language
               VCL
Retorno das subrotinas:
  deliver
      Passa para vcl_deliver


A partir da versão 2.1 deve-se usar a palavra-
chave 'return':
return(pass);
Varnish Configuration Language
               VCL
Objetos:
  client
  server
  req
  bereq
  obj
  resp
Varnish Configuration Language
             VCL
Varnish
Otimizações:
  thread_pools
  thread_pool_min
  thread_pool_max
  thread_pool_add_delay
  listen_depth
  lru_interval
Varnish




Instalem e configurem o varnish
CacheFU
É um produto para o Plone
Cria políticas de caching
  Conjunto de headers HTTP (header set)
  Conjunto de objetos Plone/Zope a que se aplica um
  header set
Remove do cache, via método PURGE, um
objeto que foi modificado
CacheFu




Instanciem o CacheFU e configurem políticas.
                 Testem!!!
Consegi 2010




Dúvidas ?!?!!?
 Obrigado!!!

Mais conteúdo relacionado

Mais procurados

T R A N S FÊ R E N C I A D E F I C H E I R O S ( F T P) Power Point
T R A N S FÊ R E N C I A  D E  F I C H E I R O S ( F T P) Power PointT R A N S FÊ R E N C I A  D E  F I C H E I R O S ( F T P) Power Point
T R A N S FÊ R E N C I A D E F I C H E I R O S ( F T P) Power Pointformandoeisnt
 
Zimbra Anahuac2
Zimbra Anahuac2Zimbra Anahuac2
Zimbra Anahuac2anahuac2
 
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...Mauro Risonho de Paula Assumpcao
 
Aula02 - protocolos de email
Aula02 -  protocolos de emailAula02 -  protocolos de email
Aula02 - protocolos de emailCarlos Veiga
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanElton Minetto
 
Instalação de Servidor FTP - Microsoft Windows Server 2008
Instalação de Servidor FTP - Microsoft Windows Server 2008Instalação de Servidor FTP - Microsoft Windows Server 2008
Instalação de Servidor FTP - Microsoft Windows Server 2008Joeldson Costa Damasceno
 
Material de apoio livro kurose cap01
Material de apoio   livro kurose cap01Material de apoio   livro kurose cap01
Material de apoio livro kurose cap01ErikHR
 
O protocolo ftp (file transfer protocol)
O protocolo ftp (file transfer protocol)O protocolo ftp (file transfer protocol)
O protocolo ftp (file transfer protocol)ErikHR
 
Yaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensãoYaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensãoThiago Paes
 

Mais procurados (20)

T R A N S FÊ R E N C I A D E F I C H E I R O S ( F T P) Power Point
T R A N S FÊ R E N C I A  D E  F I C H E I R O S ( F T P) Power PointT R A N S FÊ R E N C I A  D E  F I C H E I R O S ( F T P) Power Point
T R A N S FÊ R E N C I A D E F I C H E I R O S ( F T P) Power Point
 
Zimbra Anahuac2
Zimbra Anahuac2Zimbra Anahuac2
Zimbra Anahuac2
 
Tcpdump
TcpdumpTcpdump
Tcpdump
 
Como funciona a internet
Como funciona a internetComo funciona a internet
Como funciona a internet
 
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
OWASP AppSec 2010 BRAZIL Information Extraction Art of Testing Network Periph...
 
Linux - DNS
Linux - DNSLinux - DNS
Linux - DNS
 
Tutorial dnssec201205
Tutorial dnssec201205Tutorial dnssec201205
Tutorial dnssec201205
 
Linux shell
Linux shellLinux shell
Linux shell
 
Protocólo FTP
Protocólo FTPProtocólo FTP
Protocólo FTP
 
Shell Scipt - Comandos
Shell Scipt - ComandosShell Scipt - Comandos
Shell Scipt - Comandos
 
Aula 2
Aula 2Aula 2
Aula 2
 
Aula02 - protocolos de email
Aula02 -  protocolos de emailAula02 -  protocolos de email
Aula02 - protocolos de email
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 
DNS,DNSSEC and Best Practices
DNS,DNSSEC and Best PracticesDNS,DNSSEC and Best Practices
DNS,DNSSEC and Best Practices
 
Instalação de Servidor FTP - Microsoft Windows Server 2008
Instalação de Servidor FTP - Microsoft Windows Server 2008Instalação de Servidor FTP - Microsoft Windows Server 2008
Instalação de Servidor FTP - Microsoft Windows Server 2008
 
Material de apoio livro kurose cap01
Material de apoio   livro kurose cap01Material de apoio   livro kurose cap01
Material de apoio livro kurose cap01
 
O protocolo ftp (file transfer protocol)
O protocolo ftp (file transfer protocol)O protocolo ftp (file transfer protocol)
O protocolo ftp (file transfer protocol)
 
Procergs php-seguro
Procergs php-seguroProcergs php-seguro
Procergs php-seguro
 
Yaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensãoYaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensão
 
I educar-manual-de-instalaao
I educar-manual-de-instalaaoI educar-manual-de-instalaao
I educar-manual-de-instalaao
 

Semelhante a Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish

Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTPMetodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTPLeonel Morgado
 
HTTP, Requisição e Resposta
HTTP, Requisição e RespostaHTTP, Requisição e Resposta
HTTP, Requisição e RespostaThiago Rondon
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupWagner Roberto dos Santos
 
Hyper Text Transfer Protocol (HTTP)
Hyper Text Transfer Protocol (HTTP)Hyper Text Transfer Protocol (HTTP)
Hyper Text Transfer Protocol (HTTP)elliando dias
 
Samba, Squid, FTP, DHCP1
Samba, Squid, FTP, DHCP1Samba, Squid, FTP, DHCP1
Samba, Squid, FTP, DHCP1SoftD Abreu
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
Tecnologia em Redes - Servidor WEB
Tecnologia em Redes - Servidor WEBTecnologia em Redes - Servidor WEB
Tecnologia em Redes - Servidor WEBelliando dias
 
Criando um Website Cacheavel
Criando um Website CacheavelCriando um Website Cacheavel
Criando um Website CacheavelLucas Brasilino
 
2016-redes-E.pptx
2016-redes-E.pptx2016-redes-E.pptx
2016-redes-E.pptxssssssss23
 
Http (hyper text transfer protocol)
Http (hyper text transfer protocol)Http (hyper text transfer protocol)
Http (hyper text transfer protocol)Liliana Costa
 
Entendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTEntendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTMario Guedes
 
Entendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTEntendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTArrayOf.io
 
Entregando conteúdo em ambientes extremos na JVM
Entregando conteúdo em ambientes extremos na JVMEntregando conteúdo em ambientes extremos na JVM
Entregando conteúdo em ambientes extremos na JVMRodrigo Zaccara
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Helder da Rocha
 
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]Igor Santos
 

Semelhante a Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish (20)

Rest workshop
Rest workshopRest workshop
Rest workshop
 
Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTPMetodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
 
A Web é uma API
A Web é uma APIA Web é uma API
A Web é uma API
 
REST com Python
REST com PythonREST com Python
REST com Python
 
HTTP, Requisição e Resposta
HTTP, Requisição e RespostaHTTP, Requisição e Resposta
HTTP, Requisição e Resposta
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações Mashup
 
Hyper Text Transfer Protocol (HTTP)
Hyper Text Transfer Protocol (HTTP)Hyper Text Transfer Protocol (HTTP)
Hyper Text Transfer Protocol (HTTP)
 
HTTP - Visão geral
HTTP - Visão geralHTTP - Visão geral
HTTP - Visão geral
 
Samba, Squid, FTP, DHCP1
Samba, Squid, FTP, DHCP1Samba, Squid, FTP, DHCP1
Samba, Squid, FTP, DHCP1
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Tecnologia em Redes - Servidor WEB
Tecnologia em Redes - Servidor WEBTecnologia em Redes - Servidor WEB
Tecnologia em Redes - Servidor WEB
 
Criando um Website Cacheavel
Criando um Website CacheavelCriando um Website Cacheavel
Criando um Website Cacheavel
 
2016-redes-E.pptx
2016-redes-E.pptx2016-redes-E.pptx
2016-redes-E.pptx
 
Http (hyper text transfer protocol)
Http (hyper text transfer protocol)Http (hyper text transfer protocol)
Http (hyper text transfer protocol)
 
Entendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTEntendendo HTTP para entender o REST
Entendendo HTTP para entender o REST
 
Entendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTEntendendo HTTP para entender o REST
Entendendo HTTP para entender o REST
 
Entregando conteúdo em ambientes extremos na JVM
Entregando conteúdo em ambientes extremos na JVMEntregando conteúdo em ambientes extremos na JVM
Entregando conteúdo em ambientes extremos na JVM
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)
 
Http conceitos
Http   conceitosHttp   conceitos
Http conceitos
 
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
 

Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish

  • 1. Consegi 2010 Oficina Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish Lucas Brasilino <brasilino@pgr.mpf.gov.br>
  • 2. Sobre o instrutor Servidor do MPF, lotado na PGR; Integrante da equipe da Seção de Sistemas Operacionais; Consultor e Instrutor pela 4Linux Cursos de Apache e Squid Certificado LPIC-3 e LPIC-302 Pós-graduado em Administração de Redes Linux pela UFLA.
  • 3. Sobre a oficina (aka alinhamento de espectativas) Foco em: Protocolo HTTP Componentes de uma infra escalável Customizações do S.O. Linux Infra Zope Aceleração HTTP via Varnish Produto CacheFU Não será abordado: Programação Zope/Python Criação de um Plone Site
  • 4. Performance na Web (alguns poucos mandamentos) Minimizar o número de requisições HTTP Habilitar conexões persistentes Cuidado para não se consumir recursos Número de conexões abertas CPU / Memória Melhor seria usar pipelining :)
  • 5. Performance na Web (alguns poucos mandamentos) Habilitar compressão em arquivos texto HTML CSS Javascript XML Usar figuras de tamanho apropriado Usar Caching Não há performance sem cache!!
  • 6. Protocolo HTTP Hyper Text Transfer Protocol Baseado em requisições e respostas Stateless: requisições são independentes entre si Objetiva: Buscar um objeto Executar um código no servidor Duas versões em uso: HTTP 1.0 e 1.1
  • 7. Uniform Resource Locator URL Tem como função endereçar todo e qualquer objeto na Web Pode ser entendido como uma 'chave' Pode ser manipulada durante toda a cadeia de requisição e resposta Por isto pode criar uma relação N para 1
  • 8. Uniform Resource Locator URL Formato Geral: <scheme>://<scheme-specific-part>
  • 9. Uniform Resource Locator URL Formato aplicado ao protocolo HTTP: http://host[:port]/[path][?querystring] host: nome do servidor/IP de onde se buscar o objeto port: porta TCP para conexão path: caminho no servidor a partir de um raiz onde localiza-se o objeto querystring: sequência pré-determinada de argumentos e valores.
  • 10. Uniform Resource Locator URL Exemplos: http://arl.ginux.ufla.br/files/arl_logo.gif http://www.pgr.mpf.gov.br/ http://www.google.com.br/search?q=plone&l=pt_BR http://apps.foo.org:8080/login.php
  • 11. Protocolo HTTP Conexão TCP realizada pelo cliente: requisição / resposta
  • 12. Protocolo HTTP Exemplo de requisição: URL: http://arl.ginux.ufla.br/files/arl_logo.gif GET /files/arl_logo.gif HTTP/1.1 Host: arl.ginux.ufla.br User-Agent: BrasilinoBrowser/1.0 Accept: text/html, image/* Connection: close ◄
  • 13. Protocolo HTTP Formato de uma requisição: request line headers CRLF entity body
  • 14. Protocolo HTTP request line: Método: GET, POST, HEAD, PUT, DELETE, TRACE, OPTIONS Parte path + query string da URL Versão do protocolo HTTP
  • 15. Protocolo HTTP headers: Par nome : valor Lembrem-se de chave:dado :) Classificados em: Request headers: Aplicáveis apenas em requisições Response headers: Aplicáveis apenas em respostas General headers: Aplicáveis tanto em requisições quanto respostas Entity headers: Descreve o entity body
  • 16. Protocolo HTTP Entity body Corpo da mensagem Em requisições, só estão presentes quando usado os métodos POST e PUT.
  • 17. Protocolo HTTP Exemplo de resposta: HTTP/1.1 200 OK Date: Sat, 14 Feb 2009 11:35:05 GMT Server: Apache Last-Modified: Tue, 27 Nov 2007 20:35:25 GMT ETag: "40d56-129f-43fef05453d40" Accept-Ranges: bytes Content-Length: 4767 Cache-Control: max-age=1209600 Expires: Sat, 28 Feb 2009 11:35:05 GMT Connection: close Content-Type: image/gif ◄ GIF89a ^@Z^@ç^@^@^B^B^B^B<82>î<99>h...
  • 18. Protocolo HTTP Formato de uma resposta: status line headers CRLF entity body
  • 19. Protocolo HTTP status line: Versão do protocolo HTTP Status code Descrição textual do status code
  • 20. Protocolo HTTP Código de respostas (status code) status code categoria de resposta status code descrição textual 1xx Informação 200 OK 2xx Sucesso 206 Partial Content 3xx Redirecionamento 301 Moved Permanently 4xx Erro do cliente 302 Found 5xx Erro do servidor 304 Not Modified 403 Forbidden 404 Not Found 500 Internal Server Error 503 Service Unaviable
  • 22. Protocolo HTTP Versão 1.0 Não suportam Virtual Hosts (header Host): Conexão não é persistente Apenas um funcionalidade de caching (header Expires): Obs: Na prática, os clientes e servidores suportam virtual hosts e conexão persistente.
  • 23. Protocolo HTTP Versão 1.1 Introduz o conceito de Virtual Hosts Por padrão a conexão é persistente Suporta pipelining Introduz dois mecanismos de caching: Baseado em expiração Baseado em validação
  • 24. Protocolo HTTP Conceitos em torno do Caching Objeto válido O objeto pode ser reutilizado e, portanto, armazenado em cache. Objeto inválido O objeto não pode ser reutilizada, ou seja, não pode ser armazenado em cache e deve ser descartado o quanto antes. TTL Tempo de vida em que o objeto é válido
  • 25. Protocolo HTTP Expiração Ato do objeto válido tornar-se inválido Validação (ou revalidação) Ato de tornar um objeto expirado válido
  • 26. Protocolo HTTP Modelo baseado em expiração Header Expires Define o tempo absoluto para expiração HTTP/1.0 200 OK Server: Apache Content-Type: image/gif Date: Fri, 27 Feb 2009 21:13:45 GMT Last-Modified: Wed, 07 Jun 2006 19:50:30 GMT Expires: Sun, 17 Jan 2038 19:14:07 GMT Connection: Keep-Alive
  • 27. Protocolo HTTP Modelo baseado em expiração Header Cache-Control Define o tempo relativo para expiração HTTP/1.1 200 OK Server: Apache Content-Type: image/gif Date: Fri, 27 Feb 2009 21:13:45 GMT Cache-Control: max-age=3600, public Last-Modified: Wed, 07 Jun 2006 19:50:30 GMT Connection: Keep-Alive
  • 28. Protocolo HTTP Modelo baseado em expiração Vantagens: Diminui o número de requisições HTTP Diminui a latência Diminui a carga no servidor de origem Geralmente aplicado em: Conteúdos estáticos como figuras, CSS, documentos (PDF, ODT, ODP), código JavaScript, páginas HTML estáticas, etc.
  • 29. Protocolo HTTP Modelo baseado em validação O servidor adiciona à resposta o header Last-Modified com a data de última modificação do objeto O cliente armazena a data informada pelo Last-Modified e a cada requisição ele inclui o header If-Modified-Since com esta data. Requisição condicional
  • 30. Protocolo HTTP Modelo baseado em validação Se o objeto foi modificado: Siginifica que a condição é verdadeira O objeto no cliente é inválido A resposta conterá o status code 200 'OK' No corpo da resposta (entity body) estará presente o novo objeto, ou seja, o objeto será enviado novamente ao cliente Possivelmente será adicionado a nova data de modificação no header Last-Modified
  • 31. Protocolo HTTP Modelo baseado em validação Se o objeto não foi modificado: Siginifica que a condição é falsa A resposta conterá o status code 304 'Not Modified' O objeto não precisará ser enviado O objeto foi revalidado
  • 32. Protocolo HTTP Modelo baseado em validação Vantagens: Diminui a largura de banda necessária para transferir o objeto Diminui a latência Geralmente aplicado em: Informações onde há necessidade tempestiva de se acessar a última versão do objeto
  • 38. Customização da Pilha TCP/IP do  Linux net.ipv4.tcp_max_syn_backlog = 4096 net.ipv4.ip_local_port_range = 1024 65535 net.ipv4.tcp_fin_timeout = 5 net.core.rmem_max=16777216 net.core.wmem_max=16777216 net.ipv4.tcp_rmem=4096 87380 16777216 net.ipv4.tcp_wmem=4096 65536 16777216
  • 39. Customização da Pilha TCP/IP do  Linux Adicionem esta configuração no /etc/sysctl.conf. Executem: sysctl -p No ambiente (shell) que executar um serviço aumente o número máximo de descritores: ulimit -HSn 16384
  • 40. Infra Zope Modo tradicional de operação do Zope: Zope Datafs
  • 41. Infra Zope Modo escalável de operação do Zope: Zope Zope Zope Datafs ZeoServer
  • 42. Infra Zope Modo escalável de operação do Zope: Zope Zope Zope Datafs Datafs ZeoServer ZeoServer
  • 43. Infra Zope Instalem a infra Zope a partir do buildout.cfg fornecido.
  • 44. Varnish Acelerador HTTP Eficiente pois utiliza técnicas modernas de IPC e acesso ao conteúdo em cache Utiliza shared memory como IPC Utiliza memory mapped file para armazenar objetos É extremamente flexível, através de sua linguagem de configuração VCL Trata-se de um DSL Em minha opinião é sua característica matadora
  • 45. Varnish Configuration Language VCL Sintaxe similar ao Perl e C Operadores: Atribuição: = Se a atribuição for a um atributo, usa-se o operador 'set' Comparação: ==, != Boleano: !, &&, || Regex: ~ Suporta blocos '{ }', testes com if mas não loops
  • 46. Varnish Configuration Language VCL Exemplos set req.http.connection = close if (req.http.host != "www.pgr.mpf.gov.br") { set req.http.host = www.pgr.mpf.gov.br; }
  • 47. Varnish Configuration Language VCL Subrotinas: vcl_recv Chamada ao ser recebido a requisição do cliente vcl_pipe Chamada ao se entrar no modo pipe vcl_pass Chamada so se entrar no modo pass vcl_hash Chamada ao se procurar um objeto em cache
  • 48. Varnish Configuration Language VCL Subrotinas: vcl_hit; Chamada quando o objeto é encontrado em cache vcl_miss Chamada quando o objeto não é encontrado em cache vcl_fetch Chamada após recebe objeto do backend vcl_deliver Chamada antes do objeto se entregue ao cliente
  • 49. Varnish Configuration Language VCL Retorno das subrotinas: pipe Entra no modo pipe (passa para vcl_pipe) pass Entra no modo pass (passa para vcl_pass) lookup Procura objeto no cache (passa para vcl_hash) hash Passa para vcl_hi ou vcl_miss
  • 50. Varnish Configuration Language VCL Retorno das subrotinas: deliver Passa para vcl_deliver A partir da versão 2.1 deve-se usar a palavra- chave 'return': return(pass);
  • 51. Varnish Configuration Language VCL Objetos: client server req bereq obj resp
  • 53. Varnish Otimizações: thread_pools thread_pool_min thread_pool_max thread_pool_add_delay listen_depth lru_interval
  • 55. CacheFU É um produto para o Plone Cria políticas de caching Conjunto de headers HTTP (header set) Conjunto de objetos Plone/Zope a que se aplica um header set Remove do cache, via método PURGE, um objeto que foi modificado
  • 56. CacheFu Instanciem o CacheFU e configurem políticas. Testem!!!