Read Replicas und Verbindungsrouting
Leiten Sie schreibgeschützten Datenverkehr mit PgBouncer oder einem intelligenten Treiber an Replikate weiter und berücksichtigen Sie dabei die geringere Aktualität der Daten.
Read Replicas und Verbindungsrouting ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum Lesereplikate?
Leselastige Workloads können SELECTs auf Replikate auslagern:
- Der Primärserver verarbeitet Schreibvorgänge
- Replikate verarbeiten die meisten Lesevorgänge
- Horizontale Skalierung der Lesezugriffe ohne Sharding
Einschränkung durch Eventual Consistency
Replikate hinken dem Primärserver hinterher. Ein Benutzer, der gerade eine Bestellung aufgegeben hat, sieht sie möglicherweise noch nicht auf dem Replikat. Möglichkeiten:
- Lesevorgänge nach Schreibvorgängen an den Primärserver weiterleiten
- Warten, bis das Replikat aufgeholt hat
- Den Zustand nach dem Schreibvorgang in der Anwendung zwischenspeichern
Routing-Strategien
- Routing auf Anwendungsebene – der Anwendungscode wählt zwischen Primärserver und Replikat
- Routing auf Treiberebene – JDBC, pgjdbc und pgxpool verwalten Pools mit Kenntnis von Primärserver und Replikat
- Routing auf Proxy-Ebene – pgpool, pgbouncer und HAProxy mit Erkennung von Lese- und Schreibzugriffen
Anwendungsrouting
Zwei Verbindungspools, einer pro Rolle:
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, der SQL analysiert und SELECT-Abfragen an Replikate sowie Schreibvorgänge an den Primärserver weiterleitet. Unterstützt Load-Balancing und Connection-Pooling:
# pgpool.conf
backend_hostname0 = 'primary'
backend_hostname1 = 'replica1'
load_balance_mode = onHAProxy mit pg_isready-Prüfungen
HAProxy versteht SQL nicht, kann aber nach Port routen – ein Frontend für Schreibvorgänge (zum Primärserver) und ein weiteres für Lesevorgänge (zu Replikaten mit Zustandsprüfungen):
frontend writes
bind *:5432
default_backend primary_pool
frontend reads
bind *:5433
default_backend replicas_pool
balance roundrobinAWS-RDS-Endpunkte
RDS stellt einen einzelnen Writer-Endpunkt und einen Reader-Endpunkt bereit, der die Last über alle Replikate verteilt – die einfachste Lösung in der Cloud.
Überlegungen zur Replikationsverzögerung
Überwachen Sie die Verzögerung und vermeiden Sie das Routing zu Replikaten, die zu weit zurückliegen:
-- 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.Muster für Sticky Sessions
Für das „Lesen eigener Schreibvorgänge“: Binden Sie die Sitzung des Benutzers nach einem Schreibvorgang für N Sekunden an den Primärserver. Oder markieren Sie den LSN des Schreibvorgangs und warten Sie vor der Bereitstellung, bis das Replikat die Wiedergabe abgeschlossen hat.
Warten auf Basis des LSN
Erfassen Sie nach einem Schreibvorgang den LSN. Warten Sie vor dem Lesen auf einem Replikat, bis das Replikat bis zu diesem LSN wiedergegeben hat:
-- 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 trueCaching als Replikat
Manchmal dient Redis / Memcache als „Replikat“ zur Skalierung von Lesevorgängen – bei häufig abgerufenen Schlüsseln deutlich schneller als eine weitere Postgres-Instanz.
Wann Sie KEINE Replikate verwenden sollten
Wenn Ihre Workload schreibintensiv ist, verursachen Replikate meist zusätzliche Kosten, ohne die Geschwindigkeit zu erhöhen. Wenn Lesevorgänge auf dem Primärserver bereits schnell sind, benötigen Sie möglicherweise keine Replikate.
Notfallwiederherstellung und Leseskalierung
Replikate für HA-Failover verfolgen ein anderes Ziel als Replikate zur Leseskalierung. Häufig benötigen Sie beides.
Zusammenfassung
Lesereplikate skalieren Lesevorgänge, bringen aber eine Verzögerung mit sich.
- Routing auf Anwendungsebene, durch den Treiber oder über einen Proxy
- Replikationsverzögerung = letztendliche Konsistenz
- Sticky Session zum Primärserver oder LSN-Warten für das Lesen eigener Schreibvorgänge
- Verzögerung überwachen und bei zu großem Rückstand auf den Primärserver zurückfallen
Kurze Überprüfung
Ein Benutzer veröffentlicht einen Kommentar und aktualisiert sofort die Seite. Die Seite liest von einem Replikat und zeigt den Kommentar nicht an. Was ist das Problem, und wie lässt es sich beheben?
Häufig gestellte Fragen
Ist die Lektion „Read Replicas und Verbindungsrouting“ kostenlos?
Ja — der vollständige Text von „Read Replicas und Verbindungsrouting“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Read Replicas und Verbindungsrouting“?
Leiten Sie schreibgeschützten Datenverkehr mit PgBouncer oder einem intelligenten Treiber an Replikate weiter und berücksichtigen Sie dabei die geringere Aktualität der Daten. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Academy zu starten?
Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Read Replicas und Verbindungsrouting“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?
Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Streaming-Replikation und WAL
- Logische Replikation für Sharding
- Failover und Leader Election (Patroni, Stolon)
- Read Replicas und Verbindungsrouting