Plataforma Zope/Plone na Procuradoria 
Geral da República: desafios e soluções


              Lucas Brasilino
         <lucas.brasilino@gmail.com>

          Mauro Cesar Sobrinho
          <mauro@pgr.mpf.gov.br>
Agenda
Cenário anterior
Precisando e decidindo migrar...
Cenário em 2005 e 2006
Desafios e dificuldades
Reestruturação
Estrutura atual e exemplos
Trabalhos futuros
Cenário Anterior
Inicialmente, atualizações de páginas WEB
feitas por técnicos de suporte (1995 a 2002);
  Quem cuidava de infra-estrutura, também
  atualizava as páginas...
Criação de Grupo WEB ligado a área de
desenvolvimento (2002 a 2005);
  Separação de infra-estrutura e gestão de conteúdo
Transferência do Grupo WEB para a área de
Comunicação (2005 até hoje);
Precisando mudar...
Fatos:
  Área de tecnologia não conhece o negócio, mas
  domina as ferramentas de publicação;
  Área de comunicação conhece o negócio, mas não
  domina as ferramentas de publicação.
Objetivo:
  Tornar simples a rotina de publicação Web !
Solução:
  Adotar uma ferramenta de CMS !!
Decidindo migrar...
Diretrizes para um portal do MPF
  Desenvolver um canal de comunicação para
  atender demandas da sociedade;
  Fortalecer uma identidade institucional para o MPF;
  Otimizar a navegação e localização de conteúdos;
  Unificar informações sobre a instituição;
  Atender critérios de acessibilidade, navegabilidade
  e homogeneidade.
Decidindo migrar...
As secretarias de Comunicação Social e de
Tecnologia da Informação da PGR realizaram
uma série de reuniões com objetivo de
estabelecer uma parceria para gerenciar o
Portal do MPF.
  Área de atuação:
    SECOM ficou responsável pela identidade visual e
    gerenciamento de conteúdo
    STI ficou responsável pela infra-estrutura tecnológica
Decidindo migrar...
Avaliação das ferramentas disponíveis no
mercado apontou para o Plone/Zope
 Custo / benefício, segurança e maturidade do
 produto;
 Suporte a múltiplos idiomas;
 Modular, expandindo suas funções;
 Software Livre;
 Integração a Diretório (LDAP);
 Base instalada, inclusive no Brasil.
Equipe de profissionais
SECOM: 5 profissionais dedicados exclusivamente
para cuidar das questões web. Compreendendo:
     1 desenvolvedor
     2 webdesigners
     1 gestor de conteúdo
     1 estagiário
STI: 3 profissionais não dedicados que atendem às
demandas existentes, compreendendo:
     1 desenvolvedor
     2 suporte à infra-estrutura
Cenário em 2005




              Apache 2.0 (mod_proxy)
                   ZOPE/Plone




                     Data.fs
Cenário em 2006

   DNS
round-robin




                   NCS             Apache 2.0 (mod_proxy)
                                        ZOPE/Plone


                                    ZEO



                         Data.fs
                         OCFS2
Cenário em 2006
DNS: resolução para 2 IP's:
  Round-robin
Zope 2.9.3 / Plone 2.5:
  Instalado em /usr/local
  Usando python 2.4.3 (/usr/local/bin)
ZEO com um único Data.fs
Cenário em 2006: Desafios
'Aleatoriamente' o processo do Zope ia a 100%
de utilização de CPU
  Eventualmente descobria-se que algum objeto ao
  ser acessado fazia o Zope 'perder-se' (algo como
  um loop infinito ou deadlock).
  Hoje sabemos que este problema é categorizado
  como 'Spinning Zope'.
Frequentes travamentos causados pelo OCFS2
Cenário em 2006: Desafios
Backup não realizado da forma indicada:
  cp
Baixa performance
Dificuldades
Encontrar uma documentação concisa e bem
organizada.
  Wiki: bastante esparso
  The Zope book: boa documentação, porém não tão
  'user friendly'.
Mea culpa: talvez devesse ter assinado
algumas listas de discussões.
Reestruturação
Reorganização e reinstalação:
  A partir dos fontes e separadamente
  Códigos binários ou interpretados:
    Usando como PREFIX (top dir) /usr/webinfra
    Python 2.4.4:
       ./configure --with-prefix=/usr/webinfra
       Imaging (PIL), python-ldap, MySQL-python
    Zope 2.9.8:
       ./configure --with-prefix=/usr/webinfra 
           --with-python=/usr/webinfra/bin/python
Reestruturação
Reorganização e reinstalação:
  Plone 2.5.3-final
  Dados (Data.fs):
    /usr/webdata/var
Recuperação do Data.fs
O tamanho do Data.fs estava em torno de ~5
GB.
A Wikipage ZODB/FileStorageBackup
documenta utilitários como:
  repozo.py
  fstest.py
  fsrecover.py (em $PREFIX/lib/python/ZODB/)
fstest.py apontou inconsistências.
Recuperação do Data.fs
fsrecover.py recuperou e packeou.
  O Data.fs foi reduzido a ~3.5 Gb
'Spinning Zope' solucionado.
Melhora (leve) na performance.
Dividir para Conquistar
Servidor ZEO em outra máquina
  Desinstalação do OCFS2
    Perda da redundância
    Ganho em estabilidade
Dividir para Conquistar

                   Apache 2.0 (mod_proxy)
        NCS             ZOPE/Plone




                    ZEO




                   ZEO Data Files
Dividir para Conquistar
Divisão dos Plone sites em vários Data.fs:
  Conselhos
  Informa
  Intranets
  Memorial
  Outros (PGR, PGE, Câmaras)
Uso de memória
Aumento do nº de objetos em memória
        <zodb_db main>
           mount-point /
           cache-size 20000
           <zeoclient>....</zeoclient>
        </zodb_db>
        <zodb_db memorial>
           mount-point /memorialfs
           cache-size 10000
           <zeoclient>....</zeoclient>
        </zodb_db>
        <zodb_db intranets>
           mount-point /intranets
           cache-size 10000
           <zeoclient>....</zeoclient>
        </zodb_db>
Uso de memória
Ocupa em média 1.6Gb de RAM.
Empiricamente não ultrapassa 2Gb
  Erro 'out of memory'
  # ulimit -v
    unlimited
Aumento considerável de performance
Web Caches
Um dos métodos mais eficientes no aumento
de performance de aplicações Web
  HTTP accelerator
Retém um objeto web durante um dado tempo
Minimiza requisições ao Zope
Mecanismos básicos
  Freshness, Validation, Invalidation
Web Caches
1º experimento: Apache mod_expires
  Adiciona e/ou substitui o HTTP Header Expires
  Define quando o objeto torna-se 'velho'
  Ignora mudanças no Plone
  Efeito colateral: o usuário 'vê' um objeto antigo
Web Caches
2º experimento: Apache mod_wodan
  Ignora qualquer header e define uma
  'cacheabilidade' de todos os objetos de uma página
  Versão estável para Apache 1.3
  Versão RC para Apache 2.x
  Projeto aparentemente abandonado
  Resultados similares ao anterior
Web Caches
3º experimento: Apache mod_cache
  A princípio segue os headers que definem a
  'cacheabilidade' de um objeto
  Implementação problemática no Apache 2.0
  Média integração com o Plone (via CacheFu)
  Se for definido um tempo de expiração pequeno, os
  resultados são razoáveis
  Ainda gera muitas requisições ao Zope
Web Caches
4º experimento: Proxy/Cache Squid
  Adaptado para funcionar como um HTTP
  accelerator
  Segue fielmente o definido nos HTTP headers
  Performático
  Ótima integração com o Plone (via CacheFu)
  Melhor resultado atingido
Política de backup e packing
Implementados com scripts shell usando
ferramentas ZEO e gerando logs
Packing realizado todo sábado
Backup's de terça à sábado
  Terça: completo
  Outros dias: incremental
Alguns dados
Tamanho total dos ZEO Data files: ~8.3GB
Número de Plone Sites: 24
Sites mais acessados (março):
  PGR: 12.789.307 hits (972.309 páginas)
  Intranet: 8.865.709 hits (598.890 páginas)
  Notícias: 2.415.813 hits (411.642 páginas)
  PFDC: 1.167.363 hits (100.276 páginas)
Estrutura Atual

                  Squid 2.6STABLE18
                     ZOPE/Plone




                            ZEO
                   Apache 2.0 (mod_proxy)
                  ZOPE/Plone (para edição)




                  ZEO Data Files
Recursos
Servidor IBM xSeries 346 (Intel Xeon 3.6 GHz /
6 GB)
Servidor Dell Power Edge 2950 (Intel Xeon 3
GHz / 16 GB)
Servidor IBM System x3400 (Intel Xeon 1.8
GHz / 6 GB)
Ambiente SAN: Storage IBM DS4500
Exemplo: Portal da PGR
Exemplo: Portal de notícias
Futuros trabalhos
Web Caches:
  Avaliar round-robin x SLB
  Avaliar o varnish
Sistemas de arquivos:
  Avaliar novas versões do OCFS2 (em andamento)
    Atualmente é usado o ext3
  Compartilhar /usr/webinfra entre servidores Zope
Futuros trabalhos
Alta disponibilidade:
  Certificação da alta disponibilidade via Storage
  DS4500 com RDAC (em andamento)
  Redistribuir alguns sites
  Reativar o Novell Cluster Services (NCS)
  Disponibilização de infra-estrutura para outras
  Procuradorias
Performance:
  Contínua avaliação da carga nos servidores
Obrigado !

        Dúvidas ?

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

         Lucas Brasilino
    <lucas.brasilino@gmail.com>

     Mauro Cesar Sobrinho
     <mauro@pgr.mpf.gov.br>

Plataforma Zope Plone na PGR

  • 1.
    Plataforma Zope/Plone na Procuradoria  Geral da República: desafios e soluções Lucas Brasilino <lucas.brasilino@gmail.com> Mauro Cesar Sobrinho <mauro@pgr.mpf.gov.br>
  • 2.
    Agenda Cenário anterior Precisando edecidindo migrar... Cenário em 2005 e 2006 Desafios e dificuldades Reestruturação Estrutura atual e exemplos Trabalhos futuros
  • 3.
    Cenário Anterior Inicialmente, atualizações depáginas WEB feitas por técnicos de suporte (1995 a 2002); Quem cuidava de infra-estrutura, também atualizava as páginas... Criação de Grupo WEB ligado a área de desenvolvimento (2002 a 2005); Separação de infra-estrutura e gestão de conteúdo Transferência do Grupo WEB para a área de Comunicação (2005 até hoje);
  • 4.
    Precisando mudar... Fatos: Áreade tecnologia não conhece o negócio, mas domina as ferramentas de publicação; Área de comunicação conhece o negócio, mas não domina as ferramentas de publicação. Objetivo: Tornar simples a rotina de publicação Web ! Solução: Adotar uma ferramenta de CMS !!
  • 5.
    Decidindo migrar... Diretrizes para umportal do MPF Desenvolver um canal de comunicação para atender demandas da sociedade; Fortalecer uma identidade institucional para o MPF; Otimizar a navegação e localização de conteúdos; Unificar informações sobre a instituição; Atender critérios de acessibilidade, navegabilidade e homogeneidade.
  • 6.
    Decidindo migrar... As secretarias deComunicação Social e de Tecnologia da Informação da PGR realizaram uma série de reuniões com objetivo de estabelecer uma parceria para gerenciar o Portal do MPF. Área de atuação: SECOM ficou responsável pela identidade visual e gerenciamento de conteúdo STI ficou responsável pela infra-estrutura tecnológica
  • 7.
    Decidindo migrar... Avaliação das ferramentasdisponíveis no mercado apontou para o Plone/Zope Custo / benefício, segurança e maturidade do produto; Suporte a múltiplos idiomas; Modular, expandindo suas funções; Software Livre; Integração a Diretório (LDAP); Base instalada, inclusive no Brasil.
  • 8.
    Equipe de profissionais SECOM: 5 profissionaisdedicados exclusivamente para cuidar das questões web. Compreendendo: 1 desenvolvedor 2 webdesigners 1 gestor de conteúdo 1 estagiário STI: 3 profissionais não dedicados que atendem às demandas existentes, compreendendo: 1 desenvolvedor 2 suporte à infra-estrutura
  • 9.
    Cenário em 2005 Apache 2.0 (mod_proxy) ZOPE/Plone Data.fs
  • 10.
    Cenário em 2006 DNS round-robin NCS Apache 2.0 (mod_proxy) ZOPE/Plone ZEO Data.fs OCFS2
  • 11.
    Cenário em 2006 DNS: resolução para2 IP's: Round-robin Zope 2.9.3 / Plone 2.5: Instalado em /usr/local Usando python 2.4.3 (/usr/local/bin) ZEO com um único Data.fs
  • 12.
    Cenário em 2006: Desafios 'Aleatoriamente' o processodo Zope ia a 100% de utilização de CPU Eventualmente descobria-se que algum objeto ao ser acessado fazia o Zope 'perder-se' (algo como um loop infinito ou deadlock). Hoje sabemos que este problema é categorizado como 'Spinning Zope'. Frequentes travamentos causados pelo OCFS2
  • 13.
    Cenário em 2006: Desafios Backup não realizadoda forma indicada: cp Baixa performance
  • 14.
    Dificuldades Encontrar uma documentaçãoconcisa e bem organizada. Wiki: bastante esparso The Zope book: boa documentação, porém não tão 'user friendly'. Mea culpa: talvez devesse ter assinado algumas listas de discussões.
  • 15.
    Reestruturação Reorganização e reinstalação: A partir dos fontes e separadamente Códigos binários ou interpretados: Usando como PREFIX (top dir) /usr/webinfra Python 2.4.4: ./configure --with-prefix=/usr/webinfra Imaging (PIL), python-ldap, MySQL-python Zope 2.9.8: ./configure --with-prefix=/usr/webinfra --with-python=/usr/webinfra/bin/python
  • 16.
    Reestruturação Reorganização e reinstalação: Plone 2.5.3-final Dados (Data.fs): /usr/webdata/var
  • 17.
    Recuperação do Data.fs O tamanho doData.fs estava em torno de ~5 GB. A Wikipage ZODB/FileStorageBackup documenta utilitários como: repozo.py fstest.py fsrecover.py (em $PREFIX/lib/python/ZODB/) fstest.py apontou inconsistências.
  • 18.
    Recuperação do Data.fs fsrecover.py recuperou epackeou. O Data.fs foi reduzido a ~3.5 Gb 'Spinning Zope' solucionado. Melhora (leve) na performance.
  • 19.
    Dividir para Conquistar Servidor ZEO emoutra máquina Desinstalação do OCFS2 Perda da redundância Ganho em estabilidade
  • 20.
    Dividir para Conquistar Apache 2.0 (mod_proxy) NCS ZOPE/Plone ZEO ZEO Data Files
  • 21.
    Dividir para Conquistar Divisão dos Plonesites em vários Data.fs: Conselhos Informa Intranets Memorial Outros (PGR, PGE, Câmaras)
  • 22.
    Uso de memória Aumento do nºde objetos em memória <zodb_db main> mount-point / cache-size 20000 <zeoclient>....</zeoclient> </zodb_db> <zodb_db memorial> mount-point /memorialfs cache-size 10000 <zeoclient>....</zeoclient> </zodb_db> <zodb_db intranets> mount-point /intranets cache-size 10000 <zeoclient>....</zeoclient> </zodb_db>
  • 23.
    Uso de memória Ocupa em média1.6Gb de RAM. Empiricamente não ultrapassa 2Gb Erro 'out of memory' # ulimit -v unlimited Aumento considerável de performance
  • 24.
    Web Caches Um dos métodosmais eficientes no aumento de performance de aplicações Web HTTP accelerator Retém um objeto web durante um dado tempo Minimiza requisições ao Zope Mecanismos básicos Freshness, Validation, Invalidation
  • 25.
    Web Caches 1º experimento: Apachemod_expires Adiciona e/ou substitui o HTTP Header Expires Define quando o objeto torna-se 'velho' Ignora mudanças no Plone Efeito colateral: o usuário 'vê' um objeto antigo
  • 26.
    Web Caches 2º experimento: Apachemod_wodan Ignora qualquer header e define uma 'cacheabilidade' de todos os objetos de uma página Versão estável para Apache 1.3 Versão RC para Apache 2.x Projeto aparentemente abandonado Resultados similares ao anterior
  • 27.
    Web Caches 3º experimento: Apachemod_cache A princípio segue os headers que definem a 'cacheabilidade' de um objeto Implementação problemática no Apache 2.0 Média integração com o Plone (via CacheFu) Se for definido um tempo de expiração pequeno, os resultados são razoáveis Ainda gera muitas requisições ao Zope
  • 28.
    Web Caches 4º experimento: Proxy/CacheSquid Adaptado para funcionar como um HTTP accelerator Segue fielmente o definido nos HTTP headers Performático Ótima integração com o Plone (via CacheFu) Melhor resultado atingido
  • 29.
    Política de backup e packing Implementados com scriptsshell usando ferramentas ZEO e gerando logs Packing realizado todo sábado Backup's de terça à sábado Terça: completo Outros dias: incremental
  • 30.
    Alguns dados Tamanho total dosZEO Data files: ~8.3GB Número de Plone Sites: 24 Sites mais acessados (março): PGR: 12.789.307 hits (972.309 páginas) Intranet: 8.865.709 hits (598.890 páginas) Notícias: 2.415.813 hits (411.642 páginas) PFDC: 1.167.363 hits (100.276 páginas)
  • 31.
    Estrutura Atual Squid 2.6STABLE18 ZOPE/Plone ZEO Apache 2.0 (mod_proxy) ZOPE/Plone (para edição) ZEO Data Files
  • 32.
    Recursos Servidor IBM xSeries346 (Intel Xeon 3.6 GHz / 6 GB) Servidor Dell Power Edge 2950 (Intel Xeon 3 GHz / 16 GB) Servidor IBM System x3400 (Intel Xeon 1.8 GHz / 6 GB) Ambiente SAN: Storage IBM DS4500
  • 33.
  • 34.
  • 35.
    Futuros trabalhos Web Caches: Avaliar round-robin x SLB Avaliar o varnish Sistemas de arquivos: Avaliar novas versões do OCFS2 (em andamento) Atualmente é usado o ext3 Compartilhar /usr/webinfra entre servidores Zope
  • 36.
    Futuros trabalhos Alta disponibilidade: Certificação da alta disponibilidade via Storage DS4500 com RDAC (em andamento) Redistribuir alguns sites Reativar o Novell Cluster Services (NCS) Disponibilização de infra-estrutura para outras Procuradorias Performance: Contínua avaliação da carga nos servidores
  • 37.
    Obrigado ! Dúvidas ? http://www.pgr.mpf.gov.br Lucas Brasilino <lucas.brasilino@gmail.com> Mauro Cesar Sobrinho <mauro@pgr.mpf.gov.br>