ZODB su database relazionale: RelStorage

Vediamo come aumentare le prestazioni di Plone utilizzando PostgreSQL come motore per lo ZODB

RelStorage: cos'è e perché?

Mettendo in produzione portali Plone di grandi dimensioni, una delle opzioni da valutare durante la fase di tuning è quella di sostituire lo storage dello ZODB spostandolo dal file system (Data.fs) su un database relazionale.

Per questa operazione ci viene in aiuto RelStorage, un sistema che - come suggerisce il nome stesso - permette in modo trasparente allo ZODB di utilizzare un motore DBMS, sostituendo in un sol colpo FileSystemStorage e ZEO.

Attualmente RelStorage è in grado di gestire i seguenti database:

I vantaggi di un'operazione del genere sono vari:

  • prestazioni elevate
  • possibilità di aver facilmente una configurazione in HA (alta affidabilità)
  • facilità di backup e restore
  • possibilità di passare in modo abbastanza semplice da FileStorage a RelStorage e viceversa

RelStorage: installazione

Le nostre configurazioni solitamente prevedono l'utilizzo di PostgreSQL come motore di DataBase, come potete vedere negli snippets che seguiranno.

RelStorage riesce ad utilizzare PostgreSQL attraverso psycopg2, perciò è importante installarlo o da pacchetto della propria distribuzione o da buildout con la sua specifica part.

Nel file di configurazione del buildout, andiamo a modificare la part relativa all'instanza (o le istanze, sopratutto in caso di installazioni grosse) Plone da avviare:

[instance-1]
...
zeo-client = False
rel-storage =
    type postgresql
    dsn dbname='${config:pg_dbname}' user='${config:pg_user}' host='${config:pg_host}' \
                port='${config:pg_port}' password='${config:pg_password}'
    blob-dir ${buildout:directory}/var/blobstorage

Da questo snippet si può notare che:

  • è stato disabilitato il client ZEO (eliminate anche la part nel buildout relativa allo ZEO-Server, non verrà usato)
  • è stato scelto postgresql come motore di DataBase
  • abbiamo impostato le credenziali di accesso al DB
  • abbiamo impostato la directory su filesystem per il blobstorage

Già con questa configurazione, la nostra istanza Plone utilizzerà PostgreSQL come sistema di storage per lo ZODB.

Parts aggiuntive

Ci sono, però, delle part accessorie che noi siamo soliti installare perché molto utili:

  • file2rel-conf
  • rel2file-conf
  • zodbpack-conf

Questo lo snippet di codice per installarle:

[rel2file-conf]
recipe = collective.recipe.template
input = ${buildout:directory}/templates/rel2file-storage.in
output = ${buildout:directory}/etc/rel2file-storage.conf

[file2rel-conf]
recipe = collective.recipe.template
input = ${buildout:directory}/templates/file2rel-storage.in
output = ${buildout:directory}/etc/file2rel-storage.conf

[zodbpack-conf]
recipe = collective.recipe.template
input = ${buildout:directory}/templates/zodbpack.conf.in
output = ${buildout:directory}/etc/zodbpack.conf

Le prime due part servono per le operazioni di migrazione e relativa conversione da RelStorage a FileStorage e viceversa.

L'ultima, invece, permette di effettuare correttamente il pack dello ZODB per ridurne le dimensioni e renderlo maggiormente efficiente.

I template

I template a cui fanno riferimento queste part, sono relativamente semplici; di seguito quello per il pack:

<relstorage>
  pack-gc true
  pack-duty-cycle 0.5
  <postgresql>
    dsn dbname='${config:pg_dbname}' user='${config:pg_user}' host='${config:pg_host}' \
                port='${config:pg_port}' password='${config:pg_password}'
  </postgresql>
</relstorage>

 

Conclusioni

Abbiamo visto come configurare le nostre istanze Plone per utilizzare PostgreSQL quale sistema di storage per lo ZODB. A questo punto, il fine tuning va effettuato su PostgreSQL e può consistere, per esempio, in una configurazione di tipo cluster per assicurare alta affidabilità e prestazioni ottimali.

Link

RelStorage su Pypi

Psycopg

PostgreSQL

ZODB

Scaling out Plone with RelStorage

RelStorage and PostgreSQL

Share this on

Share |

On same topics

Commenti

comments powered by Disqus