- Ein in Rust + Tokio geschriebenes Tool für PostgreSQL-Transaktions-Pooling + Sharding + Load Balancing, das Hunderte von Datenbanken und Hunderttausende von Verbindungen effizient verwaltet
- Arbeitet wie PgBouncer, ist aber ein auf PostgreSQL spezialisierter Proxy der Anwendungsschicht (OSI L7), der Query-Analyse und Replikation unterstützt
- Lässt sich einfach mit Kubernetes und Docker bereitstellen; von Cluster-Konfiguration über Load Balancing und Replikation bis zur Verwaltung mehrerer Shards ist alles mit einer einzigen Konfiguration möglich
- Mit eigener Verwaltung für logische Replikation lässt sich ein bestehender PostgreSQL-Cluster ohne Unterbrechung zu einer Sharding-Architektur erweitern
Hauptfunktionen
-
Load Balancing
- Verteilung des Traffics auf Basis von PostgreSQL-Queries auf OSI Layer 7
SELECT wird automatisch an Replikate, INSERT/UPDATE usw. an den Primärknoten weitergeleitet
- Unterstützte Strategien: Round Robin, Random, Least Active Connections usw.
- Echtzeit-Health-Checks und automatisches Failover bei Ausfällen
-
Transaktions-Pooling
- Unterstützt ähnlich wie PgBouncer Pooling auf Session-/Transaktionsebene
- Kann Hunderttausende Clients mit nur wenigen PostgreSQL-Verbindungen bedienen
-
Sharding und Replikation
- Extrahiert per SQL-Analyse den Shard Key und leitet Queries automatisch an den passenden Shard weiter
- Bei Shard-übergreifenden Queries werden Ergebnisse im Speicher kombiniert und als eine einzige Antwort zurückgegeben
- Auch der
COPY-Befehl wird nach Shards aufgeteilt verarbeitet
- Unterstützt logische Replikation: bestehende DBs können ohne Downtime für Sharding erweitert werden
-
Konfigurationsänderungen in Echtzeit
- Verwendet PgBouncer-artige
.toml-Konfigurationen; Änderungen sind ohne Neustart möglich
- Konfigurierbar sind Benutzerauthentifizierung, Verbindungen pro Datenbank und Shard-Informationen
-
Monitoring
- Unterstützt den standardmäßigen PgBouncer-Admin-Port plus OpenMetrics
- Inklusive Datadog-Integrationsbeispielen und Dashboard
1 Kommentare
Wir verwenden patroni in einer Multi-Master-Konfiguration.
Wenn es sich um eine Konfiguration mit vielen Leseanfragen handelt, wäre es wohl einen Versuch wert, es ähnlich wie maxscale einzusetzen.