Cluster != Replicação

Hoje um e-mail na lista do PostgreSQL me levou inspirou a escrever este texto. A questão é que muitas pessoas confundem replicação com clustering. A confusão não é a tôa… a palavra Cluster possui vários significados diferentes dependendo do contexto. Temos a idéia de tabelas clusterizadas, que possuem significado diferente no Oracle e PostgreSQL por exemplo e por sua vez não tem nada a ver com o conceito de cluster de SGDB. O PostgreSQL chama de Cluster o conjunto de banco de dados gerenciados por uma única instância (conjunto de datafiles, arquivos de controle e processos no servidor que formam um SGDB). O PGCluster apesar do nome, é uma solução de replicação e não de clustering! Algumas soluções proprietárias também gostam de adotar o status de Cluster, quando na verdade se tratam de soluções de replicação. O princípio da replicação é a de ter cópias de dados em mais de um banco de dados que possam ser sincronizadas entre si. O princípio do cluster é ter vários SGDBs se comportando como se fossem uma só instância de forma transparente para a aplicação. Veja por exemplo que o conceito de Grid, que a Oracle adotou como buzz word, não existe de fato em banco de dados!

Quando falamos em Cluster de banco de dados, pensamos em 3 tipos de clusters:

  • Shared All: Onde a memória (shared buffers) e os discos (datafiles) são compartilhados por cada nó do cluster;
  • Shared Disc: Onde apenas os disco são compartilhados pelos nós do cluster;
  • Shared Nothing: Onde cada nó tem a sua própria memória e discos;

Quando falamos em Replicação de banco de dados, pensamos em 4 tipos de replicação orientados por 2 paradigmas distintos:

  • Replicação sincrona: onde todas as réplicas possuem sempre os mesmo dados;
  • Replicação assíncrona: onde as réplicas podem ser sincronizadas depois que um alteração nos dados é realizada;
  • Replicação MultiMaster: onde é possível realizar leitura e gravação em qualquer réplica;
  • Replicação Master/Slave: onde apenas a réplica master permite gravação, enquanto as demais réplicas só permitem leitura;

Vejamos algumas diferenças entre replicação e cluster:

A replicação pode ser parcial ou total (em relação aos objetos do banco de dados), enquanto o cluster é sempre total em relação a uma instância do banco de dados (no caso do PostgreSQL seria em relação a um cluster criado pelo initdb).

  • A replicação pode ocorrer em apenas uma parte dos dados de cada réplica enquanto no cluster toda a instância (datafiles + processos no servidor) do SGDB de cada nó deve fazer parte do cluster;
  • A replicação pode ser assincrona ou síncrona enquanto o cluster sempre trabalha de forma síncrona.
  • A replicação pode ser MultiMaster ou Master/Slave, e no Cluster todos os nós podem realizar operações de leitura e escrita (o equivalente a um MultiMaster).
  • Técnicas de replicação, em geral não são boas para aumentar a escalabilidade horizontal de bancos de dados com alto volume de gravação (OLTP) enquanto os clusters shared all tem esta capacidade;
  • A replicação guarda uma cópia dos dados replicados em cada instância do banco de dados enquanto o cluster mantém apenas uma cópia dos dados compartilhado para todos os nós do cluster. Note que, em algumas implementações de clusters, técnicas de replicação são combinadas para se evitar o Storage como ponto vulnerável no caso de tolerância a falha.

Em princípio, parece que uma uma replicação MultiMaster síncrona é equivalente a um Cluster Shared Nothing. No entanto, note que um Cluster Shared Nothing cada nó possui apenas uma fatia do banco de dados em seu storage enquanto na replicação MultiMaster síncrona, cada nó possui uma cópia completa dos dados. Cada técnica de cluster e replicação tem diversos tipos de implementações servindo para diferentes propósitos e com diferentes limitações. Saber distinguir cada um deles é fundamental para saber por onde começar a procurar por uma solução adequada para cada tipo de problema, seja ele de alta disponibilidade, balanceamento de carga ou de bancos de dados distribuídos.

O PostgreSQL conta hoje com várias soluções de Replicação Assíncrona Master/Slave que vai do Stand By (implementado no PostgreSQL padrão), Slony I e outros. O PgPool I e II é não são exatamente soluções de replicação e sim de pool de conexões com suporte a um tipo de replicação síncrona. A única solução de replicação MultiMaster Síncrona existente hoje é o PGCluster. O projeto do Slony II pretendia ser uma nova implementação deste tipo mas foi abandonado devida a alta complexidade do projeto. O PGCluster II pretende ser uma implementação de Cluster Shared All (no mesmo estilo do Oracle RAC), mas o projeto ainda é muito recente para se saber se ele será bem sucedido.

Para saber mais veja:

12 comentários sobre “Cluster != Replicação

  1. Pingback: SAVEPOINT » 16 características do Oracle que fazem falta no PostgreSQL

  2. Olá,

    Só acho que as soluções de replicação do Postgre pecam por não estarem integradas ao banco nativamente. Não conheço o Oracle, mas o DB2 tem soluções assim de forma, digamos, simplificada e integrada.
    Veja o Slony, por exemplo: um emaranhado de criação de triggers em tabelas e que não contemplam as alterações DDL feitas nessas.

    Mas o time de desenvolvimento do Post, principalmente seu ‘timoneiro’ Tom Lane, parecem não estar muito entusiasmados com isso.

    Parabéns pelo blog!

    Curtir

  3. Particularmente eu acho desnecessário colocar tudo dentro do SGDB. Veja, existem várias soluções diferentes. Como escolher qual solução integrar dentro do PostgreSQL?

    Uma vez que replicação não é realmente uma opção standard, acho que não há problemas em deixa-la de fora. A instalação inclusive fica mais enxuta. Mas quem sabe se um dia tivermos uma solução killer isto não possa vir a acontecer?

    Curtir

  4. Pingback: SAVEPOINT » Segurança no PostgreSQL - Parte I: "A Saga"

  5. Pingback: Cluster != Replicação « Pedro Roger

  6. Caro Telles,

    Muito obrigado por este artigo! Estou a fazer um trabalho para a faculdade em que tenho que fazer um pequeno estudo de mercado de SGBDs… Quanto mais documentação dos SGBDs lia, mais a confusão se instalava na minha cabeça. Agora será mais fácil fazer o levantamento das funcionalidades de forma correcta.

    Muito obrigado e um abraço do outro lado do Oceano Atlântico!
    João

    Curtir

  7. Olá boa noite, parabéns pelo tópico estou com o mesmo problema e espero a mesmo solução mas ate o momento não sei nem por onde começar, se por um acaso o senhor puder me enviar algun material te agradeço de coração trabalho com vb.net e bd mysql

    jsguaruja@hotmail.com

    Guarujá SP

    Curtir

  8. Um erro grosseiro – de palmatória, diria a minha velha professora de Português! – tira o mérito a este trabalho que pretende ser didáctico e cultural: na 4ª linha em vez de ser “haver” deve ser escrito “a ver”.

    Curtir

    • Se eu apanhasse cada vez que cometo um erro de ortografia, já estaria morto, por linchamento… hahahaha. Por outro lado, se eu fosse muito rigoroso com a escrita o processo todo se tornaria muito chato e penoso e eu escreveria menos. A sorte é que na Web é mais simples corrigir e os leitores são os primeiros a me ajudar…

      O erro foi corrigido. Obrigado pelo toque.

      Curtir

  9. Pingback: 16 características do Oracle que fazem falta no PostgreSQL | Savepoint

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s