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.
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
- Instradamento a livello applicativo — il codice dell'applicazione sceglie tra primario e replica
- Instradamento a livello di driver — JDBC, pgjdbc e pgxpool gestiscono pool consapevoli di primario e repliche
- 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 = onHAProxy 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 roundrobinEndpoint 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 trueIl 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?
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
- Replica streaming e WAL
- Replica logica per lo sharding
- Failover ed elezione del leader (Patroni, Stolon)
- Read replica e instradamento delle connessioni