O Postgres-XC é uma solução de cluster transparente baseada no PostgreSQL 9.1, com escalabilidade de escrita, multimaster e síncrona (qualquer atualização para qualquer servidor master é visível nos demais servidores mestre imediatamente), e é construído sob uma arquitetura shared-nothing. Recentemente, a versão 1.0.1 foi liberada com correção de vários bugs.
(Um cluster de banco de dados é uma coleção de servidores de banco de dados, que armazenam e processam dados usando hardware compartilhado. Esse compartilhamento busca satisfazer a necessidade de recursos tais como mais espaço de armazenamento, e aumenta o rendimento e a disponibilidade. )
Entre os recursos existentes no Postgres-XC, destacam-se:
- Escalabilidade de escrita: o Postgres-XC pode ser configurado para uso com os servidores de banco de dados que forem necessários, para atender a uma necessidade específica. É capaz de lidar com uma quantidade maior de escrita em comparação a uma instância única de servidor PostgreSQL;
- Multi-master: os clientes podem se conectar a múltiplos servidores de banco de dados, com cada servidor de BD fornecendo uma visão única, consistente e global do cluster;
- Síncrona: uma gravação originada em qualquer um dos servidores master torna-se imediatamente visível para outras transações em execução nos outros servidores master;
- Transparente: as aplicações não precisam se preocupar sobre como os dados são armazenados internamente nos múltiplos servidores de banco de dados.
Arquitetura do Postgres-XC
O Postgres-XC é composto de um gerenciador global de transações (GTM), coordenadores e datanodes, conforme a figura abaixo:
O gerenciador global de transações (GTM) reúne e gerencia as informações sobre as atividades transacionais no Postgres-XC, assim como todas as questões referentes a identificadores globais entre transações (para manter uma visão consistente do banco de dados em todos os nós). O GTM fornece propriedades ACID e suporte a outros dados globais, como sequências e timestamps. Note que o GTM não armazena nenhum dado dos usuários, exceto informações de controle.
Os coordenadores (masters) fornecem um ponto de contato entre a aplicação e o cliente. São os responsáveis por analisar e executar as consultas dos clientes e retornar os resultados. Não armazenam dados do usuário em si; reúnem esses dados nos datanodes com a ajuda de consultas SQL, disparadas por meio de uma interface nativa ao PostgreSQL.
Os datanodes armazenam os catálogos de dados do usuário. Executam as consultas recebidas do coordenador e retornam os resultados ao coordenador.
Distribuição dos dados e escalabilidade
O Postgres-XC permite duas opções para armazenamento de tabelas nos datanodes. Uma é por meio de tabelas distribuídas em um conjunto de datanodes, usando estratégias como hash, round-robin, ou particionamento em módulos. Outra opção é por meio de replicação de tabelas em um determinado conjunto de datanodes, utilizando replicação em nível de instrução. Essa alternativa oferece melhor desempenho, se comparada a soluções baseadas em replicação de logs, uma vez que o tamanho de uma instrução é muito menor que o de logs.
Outras vantagens, como alta disponibilidade e avaliação de performance também estão disponíveis, e o time de desenvolvimento já trabalha na adição de novas funcionalidades para a próxima versão. Algumas melhorias previstas:
- Migração para versão 9.2 do PostgreSQL;
- Funcionalidade para redistribuição de dados, permitindo a distribuição de tabelas no cluster com um simples comando ALTER TABLE;
- Novas funcionalidades para adição e remoção à quente de novos nós;
- Adição de triggers e melhorias no planejador;
- Inclusão de restrições globais.
O roadmap do projeto possui um roteiro abrangente das funcionalidades a serem implementadas. O Postgres-XC encontra-se sob a mesma licença do PostgreSQL, e atualmente é gerido por uma entidade denominada "Postgres-XC Development Group".