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

1.041 visualizações

Publicada em

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

Publicada em: Tecnologia
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.041
No SlideShare
0
A partir de incorporações
0
Número de incorporações
7
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no 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!!!

×