otimizando portais plone: dicas de desempenho

27
Otimizando Portais Plone: Dicas de Desempenho Douglas Soares de Andrade PyCon 4 - Setembro/2008

Upload: douglas-soares-de-andrade

Post on 09-Jul-2015

1.186 views

Category:

Technology


0 download

DESCRIPTION

Palestra realizada na pyconbrasil 2008

TRANSCRIPT

Page 1: Otimizando Portais Plone: Dicas de Desempenho

Otimizando Portais Plone: Dicas de Desempenho

Douglas Soares de AndradePyCon 4 - Setembro/2008

Page 2: Otimizando Portais Plone: Dicas de Desempenho

Esta apresentação está sendo disponibilizada pela licença GNU/FDL e lhe dá todos os direitos para cópia e utilização de todo o conteúdo, desde que você mantenha os créditos ao autor original.

Licença de Uso

Page 3: Otimizando Portais Plone: Dicas de Desempenho

Problemas e Mitos

• Zope/Plone não funcionam para grandes Portais

• Zope não utiliza recursos de máquinas multiprocessadas

• Quem ouviu falar de Python ?! Zope/Plone ?!

• Principal: Aplicações Zope/Plone não são iguais (no sentido de gerenciamento e manutenção) a aplicações PHP !!!!!!

Page 4: Otimizando Portais Plone: Dicas de Desempenho

Problemas (Casa do Horrores)

Page 5: Otimizando Portais Plone: Dicas de Desempenho

Problema 01: Instâncias no “Front”

• Instâncias Zope/Plone sendo acessadas diretamente (instâncias “Rambo”)

Page 6: Otimizando Portais Plone: Dicas de Desempenho

Solução 01: Instâncias no “Front”

• Utilizar um servidor de cache (squid/varnish)– É tão importante no mundo Zope quanto o

controle de versão no mundo do desenvolvimento

• Aumento exponencial da performance

Page 7: Otimizando Portais Plone: Dicas de Desempenho

Problema 02: Alta disponibilidade

• Várias pessoas afirmam que NÃO é possível desenvolver soluções de alta disponibilidade com o Zope

• Ops, problemas de hardware. Portal fora ?

Page 8: Otimizando Portais Plone: Dicas de Desempenho

Solução 02: Alta disponibilidade

• Até pouco tempo, não era possível (Sem utilizar ferramentas opensource e gratuitas)

• Felizmente isso mudou com o RelStorage (palestra do Rogério)

• O que isso tem a ver com performance ?

Page 9: Otimizando Portais Plone: Dicas de Desempenho

Problema 03: Arquivos no ZODB

• Arquivos enormes sendo armazenados diretamente no ZODB

Page 10: Otimizando Portais Plone: Dicas de Desempenho

Solução 03: Arquivos no ZODB

• Utilizar o produto FileSystemStorage para armazenar os arquivos no sistema de arquivos do servidor ou em um ponto de rede (cuidado com pontos de falha)

Page 11: Otimizando Portais Plone: Dicas de Desempenho

Problema 04: Códigos

• Códigos que utilizam getObject para pegar informações simples que estão disponíveis nos indices do catálogo

• Pense no problema anterior (arquivos de 50mb, 100mb) sendo acessados via getObject para pegar apenas o título do Objeto

Page 12: Otimizando Portais Plone: Dicas de Desempenho

Solução 04: Códigos

• Utilizar getObject apenas em último caso • Em todos os outros casos, utilize as

informações que já estão disponíveis no catálogo ou crie novos indices (imagens)

• Sempre ter cuidado com a mega ultra power resolução de um problema

Page 13: Otimizando Portais Plone: Dicas de Desempenho

Problema 05: Infraestrutura não otimizada

• Alguns administradores costumam criar ambientes com as configurações “de fábrica” e não se preocupam com a performance por causa do mito:

– Zope é lento mesmo ! Não adianta mexer em nada (Castas)

Page 14: Otimizando Portais Plone: Dicas de Desempenho

Solução 05: Infraestrutura não otimizada

• Otimização prematura é a causa de todo o mal !

• É preciso analisar cuidadosamente a arquitetura e todos os componentes que deverão ser utilizados

• Exemplo:– Squid

• Cache Peers• Storage (UFS)• Tamanho de objetos a serem cacheados

Page 15: Otimizando Portais Plone: Dicas de Desempenho

Problema 06: Servers Multiprocessados

• Zope com apenas uma instância não utiliza diversos cores

• 100% em um core e 0% nos outros 15• O cliente não quer saber do GIL do python e

sim de uma solução...

Page 16: Otimizando Portais Plone: Dicas de Desempenho

Solução 06: Servers Multiprocessados

• … que existe !• Utilize um servidor ZEO com várias

instâncias (cuidado com isso !) e deixe o kernel determinar pra onde cada processo vai

• Eu quero determinar pra qual core o meu processo vai – taskset (afinidade)

Page 17: Otimizando Portais Plone: Dicas de Desempenho

Problema 07: Profilers Esquecidos

• Legal ! Você utilizou um profiler para determinar onde estava o problema de performance

• Só que... Ele ficou lá =)

Page 18: Otimizando Portais Plone: Dicas de Desempenho

Solução 07: Profilers Esquecidos

• Tatuar no braço: “Eu desabilito o meu profiler “ =)

• Sempre lembre de desabilitar o profiler quando o portal for para produção

Page 19: Otimizando Portais Plone: Dicas de Desempenho

Problema 08: O quase off-topic

• Toma-que-é-teu

Page 20: Otimizando Portais Plone: Dicas de Desempenho

Solução 08: O quase off-topic

• Preparar a equipe para administrar Zope/Plone

• O Zope é carente – Ele precisa de carinho e acompanhamento constante (na verdade, apenas até que a solução estabilize)

• Por fim: Novamente, Zope não é PHP !!

Page 21: Otimizando Portais Plone: Dicas de Desempenho

Outras Dicas Valiosas

• Essa veio do Youtube, mas cai como uma luva: Cada um no seu quadrado !

• Utilize Varnish (“O” server de cache) =)

Page 22: Otimizando Portais Plone: Dicas de Desempenho

Outras Dicas Valiosas

• O diagrama do “Quadrado” =)

Page 23: Otimizando Portais Plone: Dicas de Desempenho

E se nada resolver ?!

• Utilize deploy estático– Utilize nginx– Frozer (Weimar)– Chute (não testado – “wget -m”)

Page 24: Otimizando Portais Plone: Dicas de Desempenho

Agradecimentos

Page 25: Otimizando Portais Plone: Dicas de Desempenho

Agradecimentos

Page 26: Otimizando Portais Plone: Dicas de Desempenho

Fala que eu te escuto =)