PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Npgsql mit Pgbouncer auf Kubernetes – Pooling &Keepalives

Sie sind im Allgemeinen auf dem richtigen Weg und Ihre Analyse scheint zutreffend zu sein. Einige Kommentare:

Option 2 (Ausschalten von Keepalives) hilft beim Entfernen von Leerlaufverbindungen im Npgsql-Pool, die unterbrochen wurden. Wie Sie geschrieben haben, wird Ihre Anwendung immer noch einige Fehler aufweisen (da einige schlechte Leerlaufverbindungen möglicherweise nicht rechtzeitig entfernt werden). Es gibt keinen besonderen Grund zu der Annahme, dass dies weitere Probleme verursachen würde - die Aktivierung sollte ziemlich sicher sein.

Option 3 ist in der Tat problematisch für perf, da jedes Mal, wenn eine Datenbankverbindung benötigt wird, eine TCP-Verbindung zu pgbouncer hergestellt werden müsste. Es bietet auch keinen 100 % ausfallsicheren Mechanismus, da pgbouncer immer noch ausfallen kann, während eine Verbindung verwendet wird.

Letztendlich fragen Sie nach Ausfallsicherheit angesichts willkürlicher Netzwerk-/Serverausfälle, was nicht einfach zu erreichen ist. Der einzige 100 % zuverlässige Weg, damit umzugehen, ist in Ihrer Anwendung über eine dedizierte Schicht, die Operationen wiederholt, wenn eine vorübergehende Ausnahme auftritt. Vielleicht möchten Sie sich Polly ansehen , und beachten Sie, dass Npgsql uns ein wenig hilft, indem es einen IsTransient Ausnahme, die als Auslöser für einen erneuten Versuch verwendet werden kann (Entity Framework Core enthält auch eine ähnliche „Wiederholungsstrategie“). Wenn Sie diesen Weg gehen, beachten Sie, dass Transaktionen besonders schwierig korrekt zu handhaben sind.