PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Npgsql avec Pgbouncer sur Kubernetes - pooling &keepalives

Vous êtes globalement sur la bonne voie et votre analyse semble juste. Quelques commentaires :

L'option 2 (activer les keepalives) aidera à supprimer les connexions inactives dans le pool de Npgsql qui ont été interrompues. Comme vous l'avez écrit, votre application aura encore quelques échecs (car certaines mauvaises connexions inactives peuvent ne pas être supprimées à temps). Il n'y a aucune raison particulière de penser que cela causerait d'autres problèmes - cela devrait être assez sûr à activer.

L'option 3 est en effet problématique pour les performances, car une connexion TCP à pgbouncer devrait être établie à chaque fois qu'une connexion à la base de données est nécessaire. Il ne fournira pas non plus de mécanisme 100 % infaillible, car pgbouncer peut toujours abandonner pendant qu'une connexion est en cours d'utilisation.

En fin de compte, vous posez des questions sur la résilience face à une défaillance arbitraire du réseau/serveur, ce qui n'est pas une chose facile à réaliser. Le seul moyen fiable à 100% de gérer cela est dans votre application, via une couche dédiée qui relancerait les opérations lorsqu'une exception transitoire se produit. Vous voudrez peut-être regarder Polly , et notez que Npgsql nous aide un peu en exposant un IsTransient exception qui peut être utilisée comme déclencheur pour réessayer (Entity Framework Core inclut également une "stratégie de nouvelle tentative" similaire). Si vous empruntez cette voie, notez que les transactions sont particulièrement difficiles à gérer correctement.