Qual método de garantia de alta disponibilidade você escolheria para PostgreSQL?
sobes.tech IA
Resposta da IA
Para garantir a alta disponibilidade do PostgreSQL, eu escolheria a replicação lógica.
Esta abordagem moderna e flexível baseia-se na tecnologia Publish/Subscribe. O editor (Publisher) no servidor principal publica as alterações nas tabelas, e o assinante (Subscriber) na réplica as recebe e aplica.
-
Vantagens:
- Flexibilidade: Pode replicar não toda a base, mas apenas tabelas ou esquemas específicos.
- Diferentes versões do PostgreSQL: Permite a replicação entre clusters com diferentes versões principais do PostgreSQL.
- Baixos custos adicionais: Geralmente tem menos impacto no desempenho do servidor principal em comparação com a replicação física.
- Mais fácil de migrar: Conveniente para usar em particionamento horizontal ou migração de dados.
-
Desvantagens:
- Não replica DDL (alterações na estrutura do esquema), exceto em alguns casos (por exemplo, adicionar colunas). Requer aplicar manualmente DDL nas réplicas.
- Não replica sequências.
- Requer maior atenção na gestão de conflitos.
Como alternativa, especialmente para cenários mais simples ou sincronização estrita de dados, pode-se considerar a replicação física por streaming (Streaming Replication). Ela copia as alterações ao nível do WAL (Write-Ahead Log), garantindo uma cópia exata do servidor principal.
-
Vantagens:
- Configuração e uso simples.
- Replica todas as alterações, incluindo DDL e sequências.
- Mais confiável em termos de consistência de dados em caso de falha.
-
Desvantagens:
- Menos flexível: Replica toda a base de dados.
- Requer a mesma versão principal do PostgreSQL no mestre e nas réplicas.
- Pode ter custos mais elevados no servidor principal, especialmente em replicação síncrona.
Para a troca automática (failover) e gestão do cluster em ambos os casos, são necessárias ferramentas adicionais como Patroni, Stolon ou pgBouncer combinadas com scripts. Essas ferramentas monitoram o estado dos nós, escolhem um novo mestre em caso de falha e reconfiguram as réplicas.
A escolha entre replicação lógica e física depende dos requisitos específicos do projeto, tamanho da base de dados, necessidade de replicar apenas parte dos dados e tolerância a divergências de versões. Na maioria dos cenários modernos, onde se requer flexibilidade e replicação ao nível de tabelas, a replicação lógica é preferível.