SQL Academy · Lezione

Read replica e instradamento delle connessioni

Instradi il traffico in sola lettura verso le repliche con PgBouncer o un driver intelligente, accettando il compromesso della latenza dei dati.

Lezione 4 di 415 passaggi

Read replica e instradamento delle connessioni è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.

Perché usare repliche di lettura?

I carichi di lavoro con molte letture possono distribuire le SELECT sulle repliche:

  • Il primario gestisce le scritture
  • Le repliche gestiscono la maggior parte delle letture
  • Scalabilità orizzontale in lettura senza ricorrere allo sharding

Limite della consistenza eventuale

Le repliche rimangono indietro rispetto al primario. Un utente che ha appena effettuato un ordine potrebbe non vederlo ancora sulla replica. È possibile:

  • Instradare le letture successive alle scritture verso il primario
  • Attendere che la replica si aggiorni
  • Memorizzare nella cache dell'applicazione lo stato successivo alla scrittura

Strategie di instradamento

  1. Instradamento a livello applicativo — il codice dell'applicazione sceglie tra primario e replica
  2. Instradamento a livello di driver — JDBC, pgjdbc e pgxpool gestiscono pool consapevoli di primario e repliche
  3. Instradamento a livello proxy — pgpool, pgbouncer e HAProxy con rilevamento di letture e scritture

Routing dell'applicazione

Due pool di connessioni, uno per ruolo:

const primary = new Pool({ host: 'primary', ... });
const replica = new Pool({ host: 'replica', ... });

// reads go to replica:
await replica.query('SELECT ...');

// writes (and read-your-writes) go to primary:
await primary.query('INSERT ...');

PgPool-II

Proxy che analizza SQL e instrada le SELECT alle repliche e le scritture al primary. Supporta il bilanciamento del carico e il pooling delle connessioni:

# pgpool.conf
backend_hostname0 = 'primary'
backend_hostname1 = 'replica1'
load_balance_mode = on

HAProxy con controlli pg_isready

HAProxy non comprende SQL, ma può instradare in base alla porta — un frontend per le scritture (verso il primary), un altro per le letture (verso le repliche con controlli di integrità):

frontend writes
  bind *:5432
  default_backend primary_pool

frontend reads
  bind *:5433
  default_backend replicas_pool
  balance roundrobin

Endpoint AWS RDS

RDS fornisce un singolo endpoint di scrittura e un endpoint di lettura che bilancia il carico tra tutte le repliche — la soluzione più semplice nel cloud.

Considerazioni sul ritardo di replica

Monitori il ritardo ed eviti di instradare il traffico verso repliche troppo indietro:

-- On primary:
SELECT client_addr, replay_lag FROM pg_stat_replication;

-- HAProxy / pgpool can use a custom health check that fails if replay_lag > threshold.

Pattern delle sessioni persistenti

Per «leggere le proprie scritture»: associ la sessione dell'utente al primary per N secondi dopo una scrittura. In alternativa, registri l'LSN della scrittura e attenda il replay della replica prima di rispondere.

Attesa basata sull'LSN

Dopo una scrittura, acquisisca l'LSN; prima di leggere dalla replica, attenda che la replica abbia riprodotto i dati fino a quell'LSN:

-- After write on primary:
SELECT pg_current_wal_lsn();        -- save this

-- Before read on replica:
SELECT pg_last_wal_replay_lsn() >= $saved_lsn;
-- spin or wait until true

Il caching come replica

A volte Redis / Memcache funge da «replica» per scalare le letture — è molto più veloce di un'altra istanza Postgres per le chiavi ad alta frequenza.

Quando NON usare le repliche

Se il carico di lavoro è incentrato sulle scritture, le repliche aggiungono soprattutto costi senza migliorare le prestazioni. Se le letture sono già veloci sul primary, potrebbe non averne bisogno.

Ripristino di emergenza e scalabilità delle letture

Le repliche per il failover ad alta disponibilità rispondono a un'esigenza diversa rispetto alle repliche per scalare le letture. Spesso sono presenti entrambe.

Riepilogo

Le repliche di lettura scalano le letture, ma comportano ritardo.

  • Routing nell'app, nel driver o nel proxy
  • Il ritardo di replica implica consistenza eventuale
  • Sessione vincolata al primary o attesa dell'LSN per leggere le proprie scritture
  • Monitori il ritardo e torni al primary se è eccessivo

Verifica rapida

Un utente pubblica un commento e aggiorna immediatamente la pagina. La pagina legge da una replica e non mostra il commento. Qual è il problema e qual è una possibile soluzione?

Gratis per iniziare

Impara SQL con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
46
Lezioni
183

Domande Frequenti

La lezione «Read replica e instradamento delle connessioni» è gratuita?

Sì — il testo completo di «Read replica e instradamento delle connessioni» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.

Cosa imparerò in «Read replica e instradamento delle connessioni»?

Instradi il traffico in sola lettura verso le repliche con PgBouncer o un driver intelligente, accettando il compromesso della latenza dei dati. Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare SQL Academy?

Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Read replica e instradamento delle connessioni»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione SQL Academy?

Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Replica streaming e WAL
  2. Replica logica per lo sharding
  3. Failover ed elezione del leader (Patroni, Stolon)
  4. Read replica e instradamento delle connessioni
← Torna a SQL Academy