replicação e escalabidade do zodb com relstorage

14
Replica¸c˜ ao e escalabidade do ZODB com RelStorage Rud´ a Porto Filgueiras - [email protected] - @rudaporto October 1, 2011

Upload: ruda-filgueiras

Post on 02-Jul-2015

1.109 views

Category:

Documents


0 download

DESCRIPTION

O CMS Plone utiliza o ZODB como usa base de dados principal. Em alguns cenários, como grandes portais, é preciso ter muitos servidores ZOPE no frontend processando as requisições dos usuários.Nessas situações, o ZEO, backend distribuído padrão do ZODB, pode ficar sobrecarregado, principalmente pela quantidade de IO requisitada e em alguns casos de CPU também.Como alternativa ao ZEO, foi desenvolvido um novo backend para o ZODB que armazena os dados dos objetos (raw) em banco de dados relacionais, com alguns objetivos: facilitar o uso de múltiplas CPUs no processamento do backend utilizar ferramentas de backup e replicação já conhecidas dos administradores de banco de dados fazer backup on-lin dos dados do servidor com a utilização de réplicas escravas fazer um balanceamento das requisições ao backend utilizando-se de clusters Além disso, o RelStorage também inovou na integração com memcached para centralizar o cache do objetos e aliviar ainda mais o IO do backend ZODB.O objetivo desta apresentação é falar sobre o projeto RelStorage, utilizando-se de exemplos de práticos de utilização dele em aplicação Zope/Plone e sua integração com memcached e realizando um espelhamento da base de dados.

TRANSCRIPT

Page 1: Replicação e escalabidade do ZODB com RelStorage

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

Agenda

Motivacao

ZODB

RelStorage

Benchmarks

Referencias

Perguntas

Page 3: Replicação e escalabidade do ZODB com RelStorage

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

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

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

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

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

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

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

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

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

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

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

Page 14: Replicação e escalabidade do ZODB com RelStorage

Perguntas?

Contato: Ruda Porto Filgueiras

I [email protected]

I @rudaporto

I github.com/rudaporto