PgBouncer schützt Postgres vor burstartigen Compute-Schichten_
Serverless- und automatisch skalierende Rechenleistungen können mehr Verbindungswechsel erzeugen, als PostgreSQL direkt handhaben möchte, weshalb Pooling-Schichten wichtig werden.
Serverless-Plattformen sind sehr gut darin, schnell Nebenläufigkeit zu erzeugen. PostgreSQL ist nicht dafür ausgelegt, Tausende von kurzlebigen Clients, die gleichzeitig direkte Verbindungen öffnen, zu unterstützen. Diese Diskrepanz ist einer der häufigsten Fehlerarten in modernen Anwendungsarchitekturen: Die Anwendungsschicht skaliert, während die Datenbank ihre Zeit mit dem Management von Verbindungswechseln verbringt.
Deshalb ist PgBouncer wichtig.
Warum PgBouncer hilft
PgBouncer sitzt zwischen Ihrer Anwendung und Postgres und wiederverwendet eine kleinere Anzahl von echten Datenbankverbindungen über eine größere Anzahl von Anwendungsclients. In der Praxis verbessert dies in der Regel:
Verbindungstabilität unter Spitzenlast
Speicherbelastung auf der Datenbank
Überlebensfähigkeit während Deployments und Verkehrsspitzen
Es geht nicht darum, 1.000 Anforderungen in 1.000 echten Postgres-Sitzungen laufen zu lassen. Es geht darum, die Compute-Schicht in etwas zu glätten, das die Datenbank tolerieren kann.
Der wichtige Trade-Off
PgBouncer ändert die Verbindungssemantik, insbesondere im transaction-Pooling-Modus. Funktionen, die mit Sitzungsstatus rechnen, könnten brechen oder sich anders verhalten:
vorbereitete Anweisungen auf Sitzungsebene
temporäre Tabellen über Transaktionen hinweg
SET-Zustände, die annehmen, dass Verbindungen kleben bleiben
Das bedeutet, dass Sie den Pooling-Modus bewusst wählen und die Annahmen Ihrer ORM- oder Abfrageschicht überprüfen müssen.
Bessere betriebliche Regel
Wenn die Compute-Schicht burstartig ist, betrachten Sie das Verbindungsmanagement als Architektur und nicht als Detail auf niedriger Ebene. Serverless plus direkte Postgres-Verbindungen ist oft in der Entwicklung in Ordnung und in der Produktion schmerzhaft. PgBouncer existiert, um diese Diskrepanz zu absorbieren, bevor die Datenbank zum Engpass wird.