Read Replica
Uma réplica de leitura (read replica) é uma cópia somente leitura de um banco de dados primário.
As réplicas de leitura são utilizadas principalmente paraÇ
- distribuir a carga de leitura,
- melhorar a disponibilidade e
- fornecer redundância.
Considere o diagrama na sequência, que ilustra o funcionamento da replicação e seu uso:
graph TB
subgraph "Cliente / Aplicação"
APP[Aplicação]
WRITE[Operações de Escrita<br/>INSERT, UPDATE, DELETE]
READ[Operações de Leitura<br/>SELECT]
end
subgraph "Servidor Principal"
PRIMARY[(Primary Database<br/>Servidor Primário)]
WAL[WAL<br/>Write-Ahead Log]
end
subgraph "Servidores de Réplica"
REPLICA1[(Read Replica 1)]
REPLICA2[(Read Replica 2)]
REPLICA3[(Read Replica 3)]
end
subgraph "Processo de Replicação"
STREAM[Streaming Replication]
APPLY[Aplicação do WAL<br/>nas Réplicas]
end
APP --> WRITE
APP --> READ
WRITE --> PRIMARY
PRIMARY --> WAL
WAL --> STREAM
STREAM --> APPLY
APPLY --> REPLICA1
APPLY --> REPLICA2
APPLY --> REPLICA3
READ --> REPLICA1
READ --> REPLICA2
READ --> REPLICA3
READ -.também pode.-> PRIMARY
style PRIMARY fill:#ff6b6b,stroke:#c92a2a,color:#fff
style REPLICA1 fill:#4dabf7,stroke:#1971c2,color:#fff
style REPLICA2 fill:#4dabf7,stroke:#1971c2,color:#fff
style REPLICA3 fill:#4dabf7,stroke:#1971c2,color:#fff
style WAL fill:#ffd43b,stroke:#f08c00
style WRITE fill:#ff8787,stroke:#c92a2a
style READ fill:#74c0fc,stroke:#1971c2
Os componentes principais são:
- Primary Database: servidor principal que recebe todas as operações de escrita. É a fonte única de verdade para os dados e o ponto central da arquitetura de replicação.
- Read Replicas: servidores secundários que recebem cópias dos dados do servidor primário. Podem ser múltiplas réplicas para distribuir a carga de leitura.
- WAL (Write-Ahead Log): mecanismo de registro de transações do PostgreSQL. Todas as modificações são primeiro escritas no WAL antes de serem aplicadas aos dados, garantindo durabilidade e possibilitando a replicação.
- Streaming Replication: processo que transmite continuamente as mudanças do WAL do servidor primário para as réplicas em tempo real ou quase real.
Exercício
Answer
Todas as operações de INSERT
, UPDATE
e DELETE
devem ser direcionadas exclusivamente para o servidor primário.
As réplicas não aceitam escritas, operando apenas em modo de leitura.
Benefícios da IaC
Answer
Falso.
Operações SELECT
podem ser distribuídas entre as múltiplas réplicas, aliviando a carga do servidor primário.
Mas as leituras também podem ser feitas no primário, se necessário.
Benefícios da Arquitetura
A arquitetura de read replicas no PostgreSQL oferece escalabilidade horizontal ao distribuir a carga de leitura entre múltiplos servidores, o que aumenta a disponibilidade e garante maior tolerância a falhas.
Esta distribuição resulta em melhorias de performance, especialmente para aplicações com alto volume de consultas de leitura. Além disso, as réplicas podem estar em regiões geográficas diferentes (para reduzir a latência dos usuários) e também servem como recursos dedicados para operações de backup e execução de queries analíticas sem comprometer o desempenho do servidor primário.
Prática
Vamos configurar uma réplica de leitura para um banco de dados PostgreSQL.
Configurar Ambiente
Vamos configurar o ambiente necessário para a aula. Utilizaremos a mesma pasta da aula anterior.
Exercício
Configurar Variáveis de Ambiente
Vamos configurar as variáveis de ambiente para o PostgreSQL.
Exercício
Iniciar Serviços
Exercício
Conexão DBeaver
Vamos conectar ao banco de dados primário e à réplica utilizando o DBeaver.
Exercício
Exercício
Exercício
Answer
Não. A réplica de leitura é configurada para não aceitar operações de escrita, como INSERT
, UPDATE
ou DELETE
.
Exercício
Exercício
Exercício
Exercício
Uso prático
Exercício
Answer
A arquitetura de réplica de leitura pode beneficiar a aplicação web ao distribuir a carga de leitura entre múltiplas réplicas, aliviando o servidor primário que lida com as operações de escrita.
Isso resulta em tempos de resposta mais rápidos para consultas SELECT
, melhorando a experiência do usuário.
Além disso, a escalabilidade horizontal permite adicionar mais réplicas conforme a demanda aumenta, garantindo que o sistema possa crescer sem comprometer a performance.
Exercício
Answer
A aplicação deve ser configurada para direcionar as operações de escrita (INSERT
, UPDATE
, DELETE
) para o banco primário, enquanto as operações de leitura (SELECT
) podem ser distribuídas entre as réplicas de leitura.
Isso pode ser feito através de um load balancer ou lógica na camada de aplicação que gerencia as conexões ao banco de dados.
Algumas bibliotecas e frameworks oferecem suporte nativo para essa separação de leitura e escrita, facilitando a implementação dessa arquitetura.
Pesquise por:
- read-write splitting
- pgbouncer read write split
- pgpool-ii read write split
Dica
Leia esta página da documentação oficial para se aprofundar:
AWS RDS
A Amazon Web Services (AWS) oferece suporte a réplicas de leitura para bancos de dados PostgreSQL gerenciados através do serviço Amazon RDS (Relational Database Service).
Na plataforma, este processo de configuração é simplificado e já faz parte das opções disponíveis ao criar uma instância de banco de dados.
Por hoje é só!