sql >> Database teknologi >  >> RDS >> PostgreSQL

Npgsql med Pgbouncer på Kubernetes - pooling &keepalives

Du er generelt på rette vej, og din analyse virker præcis. Nogle kommentarer:

Mulighed 2 (at vise keepalives) vil hjælpe med at fjerne inaktive forbindelser i Npgsqls pool, som er blevet brudt. Som du har skrevet vil din applikation stadig fejle (da nogle dårlige inaktive forbindelser muligvis ikke fjernes i tide). Der er ingen særlig grund til at tro, at dette ville forårsage yderligere problemer - dette burde være ret sikkert at slå til.

Mulighed 3 er faktisk problematisk for perf, da der skal etableres en TCP-forbindelse til pgbouncer, hver gang en databaseforbindelse er nødvendig. Det vil heller ikke give en 100 % fejlsikker mekanisme, da pgbouncer stadig kan falde ud, mens en forbindelse er i brug.

I slutningen af ​​dagen spørger du om modstandsdygtighed i lyset af vilkårlig netværks-/serverfejl, hvilket ikke er let at opnå. Den eneste 100 % pålidelige måde at håndtere dette på er i din applikation, via et dedikeret lag, som ville prøve operationer igen, når en forbigående undtagelse opstår. Du vil måske se på Polly , og bemærk, at Npgsql hjælper os lidt ved at afsløre en IsTransient undtagelse, som kan bruges som en trigger til at prøve igen (Entity Framework Core inkluderer også en lignende "gentag-strategi"). Hvis du går ned ad denne vej, skal du være opmærksom på, at transaktioner er særligt vanskelige at håndtere korrekt.




  1. Symfony filter virker ikke

  2. Sqlalchemy AttributeError:'property'-objekt har ingen attribut 'translate'

  3. Fjern duplikerede rækker og forlader kun den ældste række?

  4. PostgreSQL aggregater med flere parametre