![Page 1: Replicação e escalabidade do ZODB com RelStorage](https://reader035.vdocuments.com.br/reader035/viewer/2022081806/5594ae3a1a28aba90e8b47e4/html5/thumbnails/1.jpg)
Replicacao e escalabidade do ZODB comRelStorage
Ruda Porto Filgueiras - [email protected] - @rudaporto
October 1, 2011
![Page 2: Replicação e escalabidade do ZODB com RelStorage](https://reader035.vdocuments.com.br/reader035/viewer/2022081806/5594ae3a1a28aba90e8b47e4/html5/thumbnails/2.jpg)
Agenda
Motivacao
ZODB
RelStorage
Benchmarks
Referencias
Perguntas
![Page 3: Replicação e escalabidade do ZODB com RelStorage](https://reader035.vdocuments.com.br/reader035/viewer/2022081806/5594ae3a1a28aba90e8b47e4/html5/thumbnails/3.jpg)
Motivacao
I Sistemas baseados em Plone / Zope
I Grandes portais de conteudo: Imagens, Videos, Audio
I Desempenho, escalabilidade e disponibilidade
I Facilidade de utilizar infra-estrutura existente
![Page 4: Replicação e escalabidade do ZODB com RelStorage](https://reader035.vdocuments.com.br/reader035/viewer/2022081806/5594ae3a1a28aba90e8b47e4/html5/thumbnails/4.jpg)
ZODB and FileStorage
I ACID
I Arquivo append-only para armazenar os objetos e transacoes
I NoSQL
I Transparencia para armazenamento de objetos Python (tipoPersistent)
I FileStorage: Permite que apenas um processo acesse a basede dados
![Page 5: Replicação e escalabidade do ZODB com RelStorage](https://reader035.vdocuments.com.br/reader035/viewer/2022081806/5594ae3a1a28aba90e8b47e4/html5/thumbnails/5.jpg)
ZEO: compartilhamento do FileStorage
I Criado para permitir o compartilhamento da base de dadosentre multiplos processos
I ZRPC: protocolo de rede para comunicacao entre o cliente(Zope) e o servidor (ZEO)
I Normalmente o ZEO e um processo IO bound
I Nao possui (ate a versao 3.10) threads para concorrencia deacesso de forma que cada cliente fica na sua propria thread
![Page 6: Replicação e escalabidade do ZODB com RelStorage](https://reader035.vdocuments.com.br/reader035/viewer/2022081806/5594ae3a1a28aba90e8b47e4/html5/thumbnails/6.jpg)
RelStorage
O projeto RelStorage criado por Shane Hathaway tem comoobjetivo permitir que o ZODB seja armazenado em um backendrelacional:
I Desenvolvido com objetivo de melhorar a escalabilidade doZODB quando existem muitos Zope clients conectados a umamesma base de dados ZODB
I Implementa um novo StorageLayer para o ZODB
I Os dados sao armazenados de forma opaca no banco de dadosSQL (nao ha como consultar os dados e extrair informacoesdiretamente do banco de dados SQL)
I Suporta diferentes bancos de dados: Oracle, MySQL,PostgreSQL
I Suporta ambientes clusterizados e tambem uso deMemcached para minimizar o overhead no backend eaumentar o desempenho
![Page 7: Replicação e escalabidade do ZODB com RelStorage](https://reader035.vdocuments.com.br/reader035/viewer/2022081806/5594ae3a1a28aba90e8b47e4/html5/thumbnails/7.jpg)
RelStorage: Instalacao
I Instalar bibliotecas de desenvolvimento e pacotes do backendSQL: psycopg2, MySQL-python, etc
I Instalar bibliotecas de desenvolvimento do memcached:libmemcached-dev
I Configurar buildout para instalar pacotes python: pylibmc oupython-memcached e RelStorage
I Alterar configuracao da instancia Zope2 para utilizarrel-storage
![Page 8: Replicação e escalabidade do ZODB com RelStorage](https://reader035.vdocuments.com.br/reader035/viewer/2022081806/5594ae3a1a28aba90e8b47e4/html5/thumbnails/8.jpg)
RelStorage: Configuracao Buildout
1 [ b u i l d o u t ]2 . . .34 eggs =5 Re lS to r age6 psycopg27 py l i bmc8 . . .9
10 [ zopepy ]11 # i n s t a l l s a zopepy python i n t e r p r e t e r t ha t runs12 # with your f u l l Zope env i ronment13 r e c i p e = zc . r e c i p e . egg14 eggs = ${ bu i l d o u t : eggs }15 i n t e r p r e t e r = zopepy16 s c r i p t s = zopepy zodbconve r t zodbpack
![Page 9: Replicação e escalabidade do ZODB com RelStorage](https://reader035.vdocuments.com.br/reader035/viewer/2022081806/5594ae3a1a28aba90e8b47e4/html5/thumbnails/9.jpg)
RelStorage: Configuracao Buildout
1 [ i n s t a n c e ]2 r e c i p e = p lone . r e c i p e . z op e2 i n s t a n c e3 . . .4 r e l−s t o r a g e =5 type p o s t g r e s q l6 dsn dbname=zodb u s e r=ruda hos t=l o c a l h o s t7 blob−d i r ${ bu i l d o u t : d i r e c t o r y }/ va r / b l o b s t o r a g e8 shared−blob−d i r ye s9 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 : 1121111 r e p l i c a −con f dsn dbname=zodb u s e r=ruda hos t=ou t r oho s t
![Page 10: Replicação e escalabidade do ZODB com RelStorage](https://reader035.vdocuments.com.br/reader035/viewer/2022081806/5594ae3a1a28aba90e8b47e4/html5/thumbnails/10.jpg)
RelStorage zodbconvert: migracao do FileStorage
Para realizar a migracao de um ZODB tradicional em FileStorage evice-versa, foi criado um utilitario chamado zodbconvert. Esseutilitario espera como estrada um arquivo de configuracao quedefina a origem e o destino dos dados, como segue(zodbconvert.cfg):
1 < f i l e s t o r a g e s ou r c e>2 path /meu caminho/ va r / f i l e s t o r a g e /Data . f s3 </ f i l e s t o r a g e>45 < 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=ruda hos t=l o c a l h o s t8 </ p o s t g r e s q l>9 </ r e l s t o r a g e>
Executando a migracao: ./bin/zodbconvert zodbconvert.cfg
![Page 11: Replicação e escalabidade do ZODB com RelStorage](https://reader035.vdocuments.com.br/reader035/viewer/2022081806/5594ae3a1a28aba90e8b47e4/html5/thumbnails/11.jpg)
Benchmarks: concorrencia = 2
1 ** concu r r ency=2 **
2 psq l , psq l mc , mysql , mysql mc , z e o f s3 Add 4662 , 3976 , 6100 , 5615 , 39304 Update 4673 , 4196 , 5865 , 5102 , 32045 Warn 3580 , 18462 , 4142 , 16525 , 34056 Cold 3505 , 2504 , 9164 , 3042 , 34417 Hot 36200 , 35989 , 36256 , 35941 , 352638 Steamin 3643260 , 2538156 , 3179912 , 2710374 , 3530558
![Page 12: Replicação e escalabidade do ZODB com RelStorage](https://reader035.vdocuments.com.br/reader035/viewer/2022081806/5594ae3a1a28aba90e8b47e4/html5/thumbnails/12.jpg)
Benchmarks: concorrencia = 4
1 ** concu r r ency=4 **
2 psq l , psq l mc , mysql , mysql mc , z e o f s3 Add 5456 , 4405 , 6807 , 7084 , 41884 Update 5109 , 4738 , 6442 , 6404 , 32155 Warm 3735 , 16860 , 3538 , 16830 , 28846 Cold 3490 , 2457 , 7892 , 3162 , 28337 Hot 37322 , 39988 , 36288 , 36447 , 353068 Steamin 5840123 , 4748044 , 6680157 , 3631432 , 6962945
![Page 13: Replicação e escalabidade do ZODB com RelStorage](https://reader035.vdocuments.com.br/reader035/viewer/2022081806/5594ae3a1a28aba90e8b47e4/html5/thumbnails/13.jpg)
Referencias
I http://pypi.python.org/pypi/RelStorage
I http://pypi.python.org/pypi/zodbshootout
I http://shane.willowrise.com/archives/how-to-install-plone-with-relstorage-and-mysql