You are on page 1of 14

Replicao e escalabidade do ZODB com ca RelStorage

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

October 1, 2011

Agenda
Motivao ca ZODB RelStorage Benchmarks Referncias e Perguntas

Motivao 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 transaoes 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 comunicaao 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 ca 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: Instalao ca

Instalar bibliotecas de desenvolvimento e pacotes do backend SQL: psycopg2, MySQL-python, etc Instalar bibliotecas de desenvolvimento do memcached: libmemcached-dev Congurar buildout para instalar pacotes python: pylibmc ou python-memcached e RelStorage Alterar conguraao da instancia Zope2 para utilizar c rel-storage

RelStorage: Congurao 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: Congurao Buildout ca

1 2 3 4 5 6 7 8 9 10 11

[ instance ] recipe = plone . recipe . zope2instance ... r e l s t o r a g e = type p o s t g r e s q l dsn dbname=zodb u s e r=r u d a h o s t=l o c a l h o s t 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 s h a r e d b l o b d i r y e s p o l l i n t e r v a l 60 cache s e r v e r s 127 . 0 . 0 . 1 : 11211 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: migraao do FileStorage c


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

Executando a migraao: ./bin/zodbconvert zodbconvert.cfg c

Benchmarks: concorrencia = 2

1 2 3 4 5 6 7 8

** c o n c u r r e n c y=2 ** psql , psql mc , mysql , Add 4662 , 3976 , 6100 , Update 4673 , 4196 , 5865 , Warn 3580 , 18462 , 4142 , Cold 3505 , 2504 , 9164 , Hot 36200 , 35989 , 36256 , S t e a m i n 3643260 , 2538156 , 3179912 ,

mysql mc , z e o f s 5615 , 3930 5102 , 3204 16525 , 3405 3042 , 3441 35941 , 35263 2710374 , 3530558

Benchmarks: concorrencia = 4

1 2 3 4 5 6 7 8

** c o n c u r r e n c y=4 ** psql , psql mc , mysql , Add 5456 , 4405 , 6807 , Update 5109 , 4738 , 6442 , Warm 3735 , 16860 , 3538 , Cold 3490 , 2457 , 7892 , Hot 37322 , 39988 , 36288 , S t e a m i n 5840123 , 4748044 , 6680157 ,

mysql mc , z e o f s 7084 , 4188 6404 , 3215 16830 , 2884 3162 , 2833 36447 , 35306 3631432 , 6962945

Referncias e

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

Perguntas?

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

You might also like