Consegi 2010                 OficinaEscalabilidade e performance da infraestrutura    Plone/Zope com CacheFU e Varnish    ...
Sobre o instrutorServidor do MPF, lotado na PGR;Integrante da equipe da Seção de SistemasOperacionais;Consultor e Instruto...
Sobre a oficina  (aka alinhamento de espectativas)Foco em:  Protocolo HTTP  Componentes de uma infra escalável  Customizaç...
Performance na Web   (alguns poucos mandamentos)Minimizar o número de requisições HTTPHabilitar conexões persistentes  Cui...
Performance na Web   (alguns poucos mandamentos)Habilitar compressão em arquivos texto  HTML  CSS  Javascript  XMLUsar fig...
Protocolo HTTPHyper Text Transfer ProtocolBaseado em requisições e respostas  Stateless: requisições são independentes ent...
Uniform Resource Locator               URLTem como função endereçar todo e qualquerobjeto na Web  Pode ser entendido como ...
Uniform Resource Locator            URL        Formato Geral:<scheme>://<scheme-specific-part>
Uniform Resource Locator                  URL      Formato aplicado ao protocolo HTTP:        http://host[:port]/[path][?q...
Uniform Resource Locator                URLExemplos:http://arl.ginux.ufla.br/files/arl_logo.gifhttp://www.pgr.mpf.gov.br/h...
Protocolo HTTPConexã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 ...
Protocolo HTTPFormato de uma requisição:                request line                 headers                  CRLF        ...
Protocolo HTTPrequest line:  Método: GET, POST, HEAD, PUT, DELETE,  TRACE, OPTIONS  Parte path + query string da URL  Vers...
Protocolo HTTPheaders:  Par nome : valor    Lembrem-se de chave:dado :)  Classificados em:    Request headers: Aplicáveis ...
Protocolo HTTPEntity body  Corpo da mensagem  Em requisições, só estão presentes quando usado  os métodos POST e PUT.
Protocolo HTTPExemplo de resposta:     HTTP/1.1 200 OK     Date: Sat, 14 Feb 2009 11:35:05 GMT     Server: Apache     Last...
Protocolo HTTPFormato de uma resposta:                status line                 headers                  CRLF           ...
Protocolo HTTPstatus line:  Versão do protocolo HTTP  Status code  Descrição textual do status code
Protocolo HTTPCódigo de respostas (status code)status code categoria de resposta   status code     descrição textual    1x...
Protocolo HTTPInstalem o HTTPFox :)
Protocolo HTTP   Versão 1.0       Não suportam Virtual Hosts (header Host):       Conexão não é persistente       Apenas u...
Protocolo HTTPVersão 1.1  Introduz o conceito de Virtual Hosts  Por padrão a conexão é persistente  Suporta pipelining  In...
Protocolo HTTPConceitos em torno do Caching  Objeto válido    O objeto pode ser reutilizado e, portanto, armazenado    em ...
Protocolo HTTPExpiração  Ato do objeto válido tornar-se inválidoValidação (ou revalidação)  Ato de tornar um objeto expira...
Protocolo HTTP   Modelo baseado em expiraçãoHeader Expires  Define o tempo absoluto para expiração HTTP/1.0 200 OK Server:...
Protocolo HTTP   Modelo baseado em expiraçãoHeader Cache-Control Define o tempo relativo para expiração HTTP/1.1 200 OK Se...
Protocolo HTTP   Modelo baseado em expiraçãoVantagens:  Diminui o número de requisições HTTP  Diminui a latência  Diminui ...
Protocolo HTTP   Modelo baseado em validaçãoO servidor adiciona à resposta o headerLast-Modified com a data de últimamodif...
Protocolo HTTP    Modelo baseado em validaçãoSe o objeto foi modificado:  Siginifica que a condição é verdadeira  O objeto...
Protocolo HTTP   Modelo baseado em validaçãoSe o objeto não foi modificado:  Siginifica que a condição é falsa  A resposta...
Protocolo HTTP   Modelo baseado em validaçãoVantagens:  Diminui a largura de banda necessária para  transferir o objeto  D...
Servidor Proxy/CacheProxy/cache tradicional (forward proxy/cache)
Servidor Proxy/CacheProxy/cache reverso (reverse proxy/cache)
Servidor Proxy/CacheAcelerador HTTP (HTTP accelerator)
Componentes de uma infra escalávelAcelerador HTTPBalanceadorServidor de aplicaçãoBanco de dados
Componentes de uma infra escalável
Customização da Pilha TCP/IP do              Linuxnet.ipv4.tcp_max_syn_backlog = 4096net.ipv4.ip_local_port_range = 1024 6...
Customização da Pilha TCP/IP do                Linux Adicionem esta configuração no /etc/sysctl.conf.    Executem: sysctl ...
Infra ZopeModo tradicional de operação do Zope:                    Zope                           Datafs
Infra ZopeModo escalável de operação do Zope:       Zope         Zope               Zope                              Data...
Infra ZopeModo escalável de operação do Zope:       Zope                 Zope                 Zope                        ...
Infra ZopeInstalem a infra Zope a partir do buildout.cfg                  fornecido.
VarnishAcelerador HTTPEficiente pois utiliza técnicas modernas de IPC eacesso ao conteúdo em cache  Utiliza shared memory ...
Varnish Configuration Language               VCLSintaxe similar ao Perl e COperadores:  Atribuição: =    Se a atribuição f...
Varnish Configuration Language                   VCL    Exemplosset req.http.connection = closeif (req.http.host != "www.p...
Varnish Configuration Language               VCLSubrotinas:  vcl_recv    Chamada ao ser recebido a requisição do cliente  ...
Varnish Configuration Language               VCLSubrotinas:  vcl_hit;     Chamada quando o objeto é encontrado em cache  v...
Varnish Configuration Language               VCLRetorno das subrotinas:  pipe     Entra no modo pipe (passa para vcl_pipe)...
Varnish Configuration Language               VCLRetorno das subrotinas:  deliver      Passa para vcl_deliverA partir da ve...
Varnish Configuration Language               VCLObjetos:  client  server  req  bereq  obj  resp
Varnish Configuration Language             VCL
VarnishOtimizações:  thread_pools  thread_pool_min  thread_pool_max  thread_pool_add_delay  listen_depth  lru_interval
VarnishInstalem e configurem o varnish
CacheFUÉ um produto para o PloneCria políticas de caching  Conjunto de headers HTTP (header set)  Conjunto de objetos Plon...
CacheFuInstanciem o CacheFU e configurem políticas.                 Testem!!!
Consegi 2010Dúvidas ?!?!!? Obrigado!!!
Upcoming SlideShare
Loading in …5
×

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

1,065 views

Published on

Workshop presented at Consegi 2010 about performance and scalability of Plone with CacheFU and Varnish. In Brazilian Portuguese.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,065
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

  1. 1. Consegi 2010 OficinaEscalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish Lucas Brasilino <brasilino@pgr.mpf.gov.br>
  2. 2. Sobre o instrutorServidor do MPF, lotado na PGR;Integrante da equipe da Seção de SistemasOperacionais;Consultor e Instrutor pela 4Linux Cursos de Apache e SquidCertificado LPIC-3 e LPIC-302Pós-graduado em Administração de RedesLinux pela UFLA.
  3. 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 CacheFUNão será abordado: Programação Zope/Python Criação de um Plone Site
  4. 4. Performance na Web (alguns poucos mandamentos)Minimizar o número de requisições HTTPHabilitar conexões persistentes Cuidado para não se consumir recursos Número de conexões abertas CPU / Memória Melhor seria usar pipelining :)
  5. 5. Performance na Web (alguns poucos mandamentos)Habilitar compressão em arquivos texto HTML CSS Javascript XMLUsar figuras de tamanho apropriadoUsar Caching Não há performance sem cache!!
  6. 6. Protocolo HTTPHyper Text Transfer ProtocolBaseado em requisições e respostas Stateless: requisições são independentes entre siObjetiva: Buscar um objeto Executar um código no servidorDuas versões em uso: HTTP 1.0 e 1.1
  7. 7. Uniform Resource Locator URLTem como função endereçar todo e qualquerobjeto 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. 8. Uniform Resource Locator URL Formato Geral:<scheme>://<scheme-specific-part>
  9. 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 objetoport: porta TCP para conexãopath: caminho no servidor a partir de um raiz onde localiza-se o objetoquerystring: sequência pré-determinada de argumentos e valores.
  10. 10. Uniform Resource Locator URLExemplos:http://arl.ginux.ufla.br/files/arl_logo.gifhttp://www.pgr.mpf.gov.br/http://www.google.com.br/search?q=plone&l=pt_BRhttp://apps.foo.org:8080/login.php
  11. 11. Protocolo HTTPConexão TCP realizada pelo cliente: requisição / resposta
  12. 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. 13. Protocolo HTTPFormato de uma requisição: request line headers CRLF entity body
  14. 14. Protocolo HTTPrequest line: Método: GET, POST, HEAD, PUT, DELETE, TRACE, OPTIONS Parte path + query string da URL Versão do protocolo HTTP
  15. 15. Protocolo HTTPheaders: 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. 16. Protocolo HTTPEntity body Corpo da mensagem Em requisições, só estão presentes quando usado os métodos POST e PUT.
  17. 17. Protocolo HTTPExemplo 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. 18. Protocolo HTTPFormato de uma resposta: status line headers CRLF entity body
  19. 19. Protocolo HTTPstatus line: Versão do protocolo HTTP Status code Descrição textual do status code
  20. 20. Protocolo HTTPCó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
  21. 21. Protocolo HTTPInstalem o HTTPFox :)
  22. 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 suportamvirtual hosts e conexão persistente.
  23. 23. Protocolo HTTPVersã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. 24. Protocolo HTTPConceitos 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. 25. Protocolo HTTPExpiração Ato do objeto válido tornar-se inválidoValidação (ou revalidação) Ato de tornar um objeto expirado válido
  26. 26. Protocolo HTTP Modelo baseado em expiraçãoHeader 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. 27. Protocolo HTTP Modelo baseado em expiraçãoHeader 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. 28. Protocolo HTTP Modelo baseado em expiraçãoVantagens: Diminui o número de requisições HTTP Diminui a latência Diminui a carga no servidor de origemGeralmente aplicado em: Conteúdos estáticos como figuras, CSS, documentos (PDF, ODT, ODP), código JavaScript, páginas HTML estáticas, etc.
  29. 29. Protocolo HTTP Modelo baseado em validaçãoO servidor adiciona à resposta o headerLast-Modified com a data de últimamodificação do objetoO cliente armazena a data informada peloLast-Modified e a cada requisição ele incluio header If-Modified-Since com estadata. Requisição condicional
  30. 30. Protocolo HTTP Modelo baseado em validaçãoSe 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. 31. Protocolo HTTP Modelo baseado em validaçãoSe 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. 32. Protocolo HTTP Modelo baseado em validaçãoVantagens: Diminui a largura de banda necessária para transferir o objeto Diminui a latênciaGeralmente aplicado em: Informações onde há necessidade tempestiva de se acessar a última versão do objeto
  33. 33. Servidor Proxy/CacheProxy/cache tradicional (forward proxy/cache)
  34. 34. Servidor Proxy/CacheProxy/cache reverso (reverse proxy/cache)
  35. 35. Servidor Proxy/CacheAcelerador HTTP (HTTP accelerator)
  36. 36. Componentes de uma infra escalávelAcelerador HTTPBalanceadorServidor de aplicaçãoBanco de dados
  37. 37. Componentes de uma infra escalável
  38. 38. Customização da Pilha TCP/IP do  Linuxnet.ipv4.tcp_max_syn_backlog = 4096net.ipv4.ip_local_port_range = 1024 65535net.ipv4.tcp_fin_timeout = 5net.core.rmem_max=16777216net.core.wmem_max=16777216net.ipv4.tcp_rmem=4096 87380 16777216net.ipv4.tcp_wmem=4096 65536 16777216
  39. 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çoaumente o número máximo de descritores: ulimit -HSn 16384
  40. 40. Infra ZopeModo tradicional de operação do Zope: Zope Datafs
  41. 41. Infra ZopeModo escalável de operação do Zope: Zope Zope Zope Datafs ZeoServer
  42. 42. Infra ZopeModo escalável de operação do Zope: Zope Zope Zope Datafs Datafs ZeoServer ZeoServer
  43. 43. Infra ZopeInstalem a infra Zope a partir do buildout.cfg fornecido.
  44. 44. VarnishAcelerador HTTPEficiente pois utiliza técnicas modernas de IPC eacesso 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 deconfiguração VCL Trata-se de um DSL Em minha opinião é sua característica matadora
  45. 45. Varnish Configuration Language VCLSintaxe similar ao Perl e COperadores: 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. 46. Varnish Configuration Language VCL Exemplosset req.http.connection = closeif (req.http.host != "www.pgr.mpf.gov.br") { set req.http.host = www.pgr.mpf.gov.br;}
  47. 47. Varnish Configuration Language VCLSubrotinas: 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. 48. Varnish Configuration Language VCLSubrotinas: 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. 49. Varnish Configuration Language VCLRetorno 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. 50. Varnish Configuration Language VCLRetorno das subrotinas: deliver Passa para vcl_deliverA partir da versão 2.1 deve-se usar a palavra-chave return:return(pass);
  51. 51. Varnish Configuration Language VCLObjetos: client server req bereq obj resp
  52. 52. Varnish Configuration Language VCL
  53. 53. VarnishOtimizações: thread_pools thread_pool_min thread_pool_max thread_pool_add_delay listen_depth lru_interval
  54. 54. VarnishInstalem e configurem o varnish
  55. 55. CacheFUÉ um produto para o PloneCria políticas de caching Conjunto de headers HTTP (header set) Conjunto de objetos Plone/Zope a que se aplica um header setRemove do cache, via método PURGE, umobjeto que foi modificado
  56. 56. CacheFuInstanciem o CacheFU e configurem políticas. Testem!!!
  57. 57. Consegi 2010Dúvidas ?!?!!? Obrigado!!!

×