SlideShare uma empresa Scribd logo
1 de 14
Baixar para ler offline
Replica¸˜o e escalabidade do ZODB com
        ca
                RelStorage

Rud´ Porto Filgueiras - rudazz@gmail.com - @rudaporto
   a


                  October 1, 2011
Agenda


  Motiva¸˜o
        ca

  ZODB

  RelStorage

  Benchmarks

  Referˆncias
       e

  Perguntas
Motiva¸˜o
      ca




      Sistemas baseados em Plone / Zope
      Grandes portais de conteudo: Imagens, Videos, Audio
      Desempenho, escalabilidade e disponibilidade
      Facilidade de utilizar infra-estrutura existente
ZODB and FileStorage




      ACID
      Arquivo append-only para armazenar os objetos e transa¸oes
                                                            c
      NoSQL
      Transparencia para armazenamento de objetos Python (tipo
      Persistent)
      FileStorage: Permite que apenas um processo acesse a base
      de dados
ZEO: compartilhamento do FileStorage




      Criado para permitir o compartilhamento da base de dados
      entre multiplos processos
      ZRPC: protocolo de rede para comunica¸ao entre o cliente
                                           c
      (Zope) e o servidor (ZEO)
      Normalmente o ZEO e um processo IO bound
      Nao possui (ate a versao 3.10) threads para concorrencia de
      acesso de forma que cada cliente fica na sua propria thread
RelStorage
   O projeto RelStorage criado por Shane Hathaway tem como
   objetivo permitir que o ZODB seja armazenado em um backend
   relacional:
       Desenvolvido com objetivo de melhorar a escalabilidade do
       ZODB quando existem muitos Zope clients conectados a uma
       mesma base de dados ZODB
       Implementa um novo StorageLayer para o ZODB
       Os dados sao armazenados de forma opaca no banco de dados
       SQL (nao ha como consultar os dados e extrair informacoes
       diretamente do banco de dados SQL)
       Suporta diferentes bancos de dados: Oracle, MySQL,
       PostgreSQL
       Suporta ambientes clusterizados e tambem uso de
       Memcached para minimizar o overhead no backend e
       aumentar o desempenho
RelStorage: Instala¸˜o
                   ca



      Instalar bibliotecas de desenvolvimento e pacotes do backend
      SQL: psycopg2, MySQL-python, etc
      Instalar bibliotecas de desenvolvimento do memcached:
      libmemcached-dev
      Configurar buildout para instalar pacotes python: pylibmc ou
      python-memcached e RelStorage
      Alterar configura¸ao da instancia Zope2 para utilizar
                      c
      rel-storage
RelStorage: Configura¸˜o Buildout
                    ca

 1 [ buildout ]
 2 ...
 3
 4 eggs =
 5           RelStorage
 6           psycopg2
 7           pylibmc
 8 ...
 9
10 [ z o p e p y ]
11 # i n s t a l l s a z o p e p y p y t h o n i n t e r p r e t e r t h a t r u n s
12 # w i t h y o u r f u l l Zope e n v i r o n m e n t
13 r e c i p e = z c . r e c i p e . egg
14 e g g s = $ { b u i l d o u t : e g g s }
15 i n t e r p r e t e r = z o p e p y
16 s c r i p t s = z o p e p y z o d b c o n v e r t z o d b p a c k
RelStorage: Configura¸˜o Buildout
                    ca



 1   [ instance ]
 2   recipe = plone . recipe . zope2instance
 3   ...
 4   r e l −s t o r a g e =
 5              type p o s t g r e s q l
 6              dsn dbname=zodb u s e r=r u d a h o s t=l o c a l h o s t
 7              b l o b −d i r $ { b u i l d o u t : d i r e c t o r y } / v a r / b l o b s t o r a g e
 8              s h a r e d −b l o b −d i r y e s
 9              p o l l − i n t e r v a l 60
10              cache −s e r v e r s 127 . 0 . 0 . 1 : 11211
11              r e p l i c a −c o n f dsn dbname=zodb u s e r=r u d a h o s t=o u t r o h o s t
RelStorage zodbconvert: migra¸ao do FileStorage
                             c

    Para realizar a migra¸˜o de um ZODB tradicional em FileStorage e
                          ca
    vice-versa, foi criado um utilit´rio chamado zodbconvert. Esse
                                    a
    utilit´rio espera como estrada um arquivo de configura¸˜o que
          a                                               ca
    defina a origem e o destino dos dados, como segue
    (zodbconvert.cfg):
1   < f i l e s t o r a g e s o u r c e>
2    p a t h / meu caminho / v a r / f i l e s t o r a g e / Data . f s
3   </ f i l e s t o r a g e>
4
5   < r e l s t o r a g e d e s t i n a t i o n>
6      < p o s t g r e s q l>
7                dsn dbname=zodb u s e r=r u d a h o s t=l o c a l h o s t
8      </ p o s t g r e s q l>
9   </ r e l s t o r a g e>

    Executando a migra¸ao: ./bin/zodbconvert zodbconvert.cfg
                      c
Benchmarks: concorrencia = 2




1   ** c o n c u r r e n c y=2 **
2                      psql ,   psql mc , mysql ,   mysql mc , z e o f s
3   Add                4662 ,      3976 ,  6100 ,      5615 ,     3930
4   Update             4673 ,      4196 ,  5865 ,      5102 ,     3204
5   Warn               3580 ,     18462 ,  4142 ,     16525 ,     3405
6   Cold               3505 ,      2504 ,  9164 ,      3042 ,     3441
7   Hot              36200 ,      35989 , 36256 ,     35941 ,   35263
8   S t e a m i n 3643260 , 2538156 , 3179912 ,     2710374 , 3530558
Benchmarks: concorrencia = 4




1   ** c o n c u r r e n c y=4 **
2                      psql ,   psql mc , mysql ,   mysql mc , z e o f s
3   Add                5456 ,      4405 ,  6807 ,      7084 ,     4188
4   Update             5109 ,      4738 ,  6442 ,      6404 ,     3215
5   Warm               3735 ,     16860 ,  3538 ,     16830 ,     2884
6   Cold               3490 ,      2457 ,  7892 ,      3162 ,     2833
7   Hot              37322 ,      39988 , 36288 ,     36447 ,   35306
8   S t e a m i n 5840123 , 4748044 , 6680157 ,     3631432 , 6962945
Referˆncias
     e




      http://pypi.python.org/pypi/RelStorage
      http://pypi.python.org/pypi/zodbshootout
      http://shane.willowrise.com/archives/how-to-install-plone-
      with-relstorage-and-mysql
Perguntas?




   Contato: Rud´ Porto Filgueiras
               a
       rudazz@gmail.com
       @rudaporto
       github.com/rudaporto

Mais conteúdo relacionado

Mais procurados

Mais procurados (6)

Prog web 07-pdo
Prog web 07-pdoProg web 07-pdo
Prog web 07-pdo
 
Novidades do PostgreSQL 10
Novidades do  PostgreSQL 10Novidades do  PostgreSQL 10
Novidades do PostgreSQL 10
 
REST-fuuuu
REST-fuuuuREST-fuuuu
REST-fuuuu
 
Conteudo curso php
Conteudo curso phpConteudo curso php
Conteudo curso php
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
Kerberos e OpenLDAP: Ambiente SSO OpenSource
Kerberos e OpenLDAP: Ambiente SSO OpenSourceKerberos e OpenLDAP: Ambiente SSO OpenSource
Kerberos e OpenLDAP: Ambiente SSO OpenSource
 

Semelhante a Replicação e escalabidade do ZODB com RelStorage

ZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQLZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQLgsroma
 
CouchDB vs Postgres em Rails
CouchDB vs Postgres em RailsCouchDB vs Postgres em Rails
CouchDB vs Postgres em RailsJuan Maiz
 
CouchDB vs PostgreSQL no Rails
CouchDB vs PostgreSQL no RailsCouchDB vs PostgreSQL no Rails
CouchDB vs PostgreSQL no RailsJohalf Farina
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valorKinn Julião
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Plataforma Zope Plone na PGR
Plataforma Zope Plone na PGRPlataforma Zope Plone na PGR
Plataforma Zope Plone na PGRLucas Brasilino
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a Rômulo Jales
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBiMasters
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDBBrunno Gomes
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Fabrízio Mello
 
Fluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibanaFluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibanaCésar Araújo
 
Versionamento de modelo de dados com PostgreSQL
Versionamento de modelo de dados com PostgreSQLVersionamento de modelo de dados com PostgreSQL
Versionamento de modelo de dados com PostgreSQLLeonardo Cezar
 
Aula9-Spark-Básico sematix com dataframes
Aula9-Spark-Básico sematix com dataframesAula9-Spark-Básico sematix com dataframes
Aula9-Spark-Básico sematix com dataframesronaldorclamaster21
 

Semelhante a Replicação e escalabidade do ZODB com RelStorage (20)

ZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQLZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQL
 
CouchDB vs Postgres em Rails
CouchDB vs Postgres em RailsCouchDB vs Postgres em Rails
CouchDB vs Postgres em Rails
 
CouchDB vs PostgreSQL no Rails
CouchDB vs PostgreSQL no RailsCouchDB vs PostgreSQL no Rails
CouchDB vs PostgreSQL no Rails
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Nosql4java
Nosql4javaNosql4java
Nosql4java
 
Plataforma Zope Plone na PGR
Plataforma Zope Plone na PGRPlataforma Zope Plone na PGR
Plataforma Zope Plone na PGR
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDB
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
Jsummit 2014
Jsummit 2014Jsummit 2014
Jsummit 2014
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Fluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibanaFluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibana
 
Versionamento de modelo de dados com PostgreSQL
Versionamento de modelo de dados com PostgreSQLVersionamento de modelo de dados com PostgreSQL
Versionamento de modelo de dados com PostgreSQL
 
Aula9-Spark-Básico sematix com dataframes
Aula9-Spark-Básico sematix com dataframesAula9-Spark-Básico sematix com dataframes
Aula9-Spark-Básico sematix com dataframes
 

Replicação e escalabidade do ZODB com RelStorage

  • 1. Replica¸˜o e escalabidade do ZODB com ca RelStorage Rud´ Porto Filgueiras - rudazz@gmail.com - @rudaporto a October 1, 2011
  • 2. Agenda Motiva¸˜o ca ZODB RelStorage Benchmarks Referˆncias e Perguntas
  • 3. Motiva¸˜o ca Sistemas baseados em Plone / Zope Grandes portais de conteudo: Imagens, Videos, Audio Desempenho, escalabilidade e disponibilidade Facilidade de utilizar infra-estrutura existente
  • 4. ZODB and FileStorage ACID Arquivo append-only para armazenar os objetos e transa¸oes c NoSQL Transparencia para armazenamento de objetos Python (tipo Persistent) FileStorage: Permite que apenas um processo acesse a base de dados
  • 5. ZEO: compartilhamento do FileStorage Criado para permitir o compartilhamento da base de dados entre multiplos processos ZRPC: protocolo de rede para comunica¸ao entre o cliente c (Zope) e o servidor (ZEO) Normalmente o ZEO e um processo IO bound Nao possui (ate a versao 3.10) threads para concorrencia de acesso de forma que cada cliente fica na sua propria thread
  • 6. RelStorage O projeto RelStorage criado por Shane Hathaway tem como objetivo permitir que o ZODB seja armazenado em um backend relacional: Desenvolvido com objetivo de melhorar a escalabilidade do ZODB quando existem muitos Zope clients conectados a uma mesma base de dados ZODB Implementa um novo StorageLayer para o ZODB Os dados sao armazenados de forma opaca no banco de dados SQL (nao ha como consultar os dados e extrair informacoes diretamente do banco de dados SQL) Suporta diferentes bancos de dados: Oracle, MySQL, PostgreSQL Suporta ambientes clusterizados e tambem uso de Memcached para minimizar o overhead no backend e aumentar o desempenho
  • 7. RelStorage: Instala¸˜o ca Instalar bibliotecas de desenvolvimento e pacotes do backend SQL: psycopg2, MySQL-python, etc Instalar bibliotecas de desenvolvimento do memcached: libmemcached-dev Configurar buildout para instalar pacotes python: pylibmc ou python-memcached e RelStorage Alterar configura¸ao da instancia Zope2 para utilizar c rel-storage
  • 8. RelStorage: Configura¸˜o Buildout ca 1 [ buildout ] 2 ... 3 4 eggs = 5 RelStorage 6 psycopg2 7 pylibmc 8 ... 9 10 [ z o p e p y ] 11 # i n s t a l l s a z o p e p y p y t h o n i n t e r p r e t e r t h a t r u n s 12 # w i t h y o u r f u l l Zope e n v i r o n m e n t 13 r e c i p e = z c . r e c i p e . egg 14 e g g s = $ { b u i l d o u t : e g g s } 15 i n t e r p r e t e r = z o p e p y 16 s c r i p t s = z o p e p y z o d b c o n v e r t z o d b p a c k
  • 9. RelStorage: Configura¸˜o Buildout ca 1 [ instance ] 2 recipe = plone . recipe . zope2instance 3 ... 4 r e l −s t o r a g e = 5 type p o s t g r e s q l 6 dsn dbname=zodb u s e r=r u d a h o s t=l o c a l h o s t 7 b l o b −d i r $ { b u i l d o u t : d i r e c t o r y } / v a r / b l o b s t o r a g e 8 s h a r e d −b l o b −d i r y e s 9 p o l l − i n t e r v a l 60 10 cache −s e r v e r s 127 . 0 . 0 . 1 : 11211 11 r e p l i c a −c o n f dsn dbname=zodb u s e r=r u d a h o s t=o u t r o h o s t
  • 10. RelStorage zodbconvert: migra¸ao do FileStorage c Para realizar a migra¸˜o de um ZODB tradicional em FileStorage e ca vice-versa, foi criado um utilit´rio chamado zodbconvert. Esse a utilit´rio espera como estrada um arquivo de configura¸˜o que a ca defina a origem e o destino dos dados, como segue (zodbconvert.cfg): 1 < f i l e s t o r a g e s o u r c e> 2 p a t h / meu caminho / v a r / f i l e s t o r a g e / Data . f s 3 </ f i l e s t o r a g e> 4 5 < r e l s t o r a g e d e s t i n a t i o n> 6 < p o s t g r e s q l> 7 dsn dbname=zodb u s e r=r u d a h o s t=l o c a l h o s t 8 </ p o s t g r e s q l> 9 </ r e l s t o r a g e> Executando a migra¸ao: ./bin/zodbconvert zodbconvert.cfg c
  • 11. Benchmarks: concorrencia = 2 1 ** c o n c u r r e n c y=2 ** 2 psql , psql mc , mysql , mysql mc , z e o f s 3 Add 4662 , 3976 , 6100 , 5615 , 3930 4 Update 4673 , 4196 , 5865 , 5102 , 3204 5 Warn 3580 , 18462 , 4142 , 16525 , 3405 6 Cold 3505 , 2504 , 9164 , 3042 , 3441 7 Hot 36200 , 35989 , 36256 , 35941 , 35263 8 S t e a m i n 3643260 , 2538156 , 3179912 , 2710374 , 3530558
  • 12. Benchmarks: concorrencia = 4 1 ** c o n c u r r e n c y=4 ** 2 psql , psql mc , mysql , mysql mc , z e o f s 3 Add 5456 , 4405 , 6807 , 7084 , 4188 4 Update 5109 , 4738 , 6442 , 6404 , 3215 5 Warm 3735 , 16860 , 3538 , 16830 , 2884 6 Cold 3490 , 2457 , 7892 , 3162 , 2833 7 Hot 37322 , 39988 , 36288 , 36447 , 35306 8 S t e a m i n 5840123 , 4748044 , 6680157 , 3631432 , 6962945
  • 13. Referˆncias e http://pypi.python.org/pypi/RelStorage http://pypi.python.org/pypi/zodbshootout http://shane.willowrise.com/archives/how-to-install-plone- with-relstorage-and-mysql
  • 14. Perguntas? Contato: Rud´ Porto Filgueiras a rudazz@gmail.com @rudaporto github.com/rudaporto