Pular para o conteúdo

apps/data-patterns/read-replicas

084 · Dados & Persistência · ≈ 5 min de estudo

Read Replicas

Separa escrita e leitura entre servidores: o primário recebe as escritas e envia o WAL por streaming replication para um hot standby, que atende leituras. A carga de consulta sai do primário, ao preço de a réplica estar alguns milissegundos — ou segundos — atrás. O roteador decide, leitura a leitura, quando esse atraso é aceitável.

passos
6
arquivos
9
teste
1
tecnologias
4
Infraestrutura realTypeScriptBunPostgreSQLDocker
Baixar cartão

Cenário

Banco digital grava PIX no primário e serve extratos e relatórios de back-office no standby. O relatório tolera alguns segundos de atraso. O cliente que acabou de fazer um PIX e abre o extrato não tolera: precisa ver o PIX que fez (*read-your-writes*).

Planta

Sequência
8/8
alt[standby alcançou][ainda não, depois da espera curta]PIX1INSERT e COMMIT2LSN do commit3WAL por streaming replication4extrato com o LSN do PIX5já reproduziu esse LSN?6SELECT extrato7SELECT extrato8standby fora do ar ou lag acima do limite: leitura vai ao primárioClienteRoteadorPrimárioStandby
8

8 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Escrita no primário, leitura nas réplicas.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    pg_basebackup -R clona o primário e grava standby.signal; o standby aplica o WAL continuamente e aceita só leitura

  2. 02

    Toda escrita vai ao primário; writeCommit devolve o LSN do WAL depois do commit

  3. 03

    Leitura sem LSN vai ao standby, desde que o lag esteja abaixo de REPLICA_MAX_LAG_MS

  4. 04

    Leitura com o LSN do cliente espera até REPLICA_CATCH_UP_WAIT_MS o standby reproduzir aquele ponto; se não reproduzir, vai ao primário

  5. 05

    Standby inacessível ou lag acima do limite: toda leitura cai no primário

  6. 06

    pg_stat_replication no primário mostra o estado e o replay_lag do standby

Trade-offs

O que se ganha, o que se paga

3 vantagenscada ganho tem um preço3 custos

Vantagens

  • Leitura escala sem tocar o primário

  • Relatório pesado isolado do OLTP

  • Standby pronto para failover

Custos

  • Réplica atrasada: leitura pode ser antiga

  • Read-your-writes exige carregar o LSN

  • Mais um servidor para operar

apps/data-patterns/read-replicas

9 arquivos

./

  • docker-compose.ymlinfraPrimário em 5432 e standby em 5433

docker/

  • standby_start.shinfrapg_basebackup -R com slot e início do hot standby
  • primary_hba.shinfraLibera a conexão de replicação no primário

sql/01_schema.sql / sql/

  • 02_replication.sqlschemaTabela do livro e papel e slot de replicação

src/

  • router_database.tsEscrita com LSN, escolha do alvo de leitura
  • ledger_transaction.tsPIX e extrato sobre o roteador
  • config_replica.tsVariáveis de ambiente validadas no boot
  • demo.tsdemoLeituras com e sem LSN, com o replay pausado
  • ledger_transaction.test.tstesteRead-your-writes, fallback, limite de lag e standby só-leitura contra dois servidores reais

Executar · com Docker

  1. docker compose up -d --wait# sobe PostgreSQL
  2. bun install# dependências
  3. bun run demo# roda o cenário
  4. bun run test# integração contra o serviço real
Requisitos
BunDocker
Sobe junto
PostgreSQL

Por que se relacionam

Teste rápido

Qual é o próximo passo depois de Read Replicas?

Próximo projeto · Dados & PersistênciaMaterialized View
Esc

↑ ↓ navegarEnter abrir191 resultados