PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Npgsql z Pgbouncer na Kubernetes - łączenie i keepalive

Generalnie jesteś na dobrej drodze, a Twoja analiza wydaje się dokładna. Kilka komentarzy:

Opcja 2 (wyłączanie podtrzymania aktywności) pomoże usunąć nieaktywne połączenia z puli Npgsql, które zostały zerwane. Jak już napisałeś, twoja aplikacja nadal będzie miała pewne awarie (ponieważ niektóre złe bezczynne połączenia mogą nie zostać usunięte na czas). Nie ma żadnego szczególnego powodu, by sądzić, że spowoduje to dalsze problemy – włączenie powinno być całkiem bezpieczne.

Opcja 3 jest rzeczywiście problematyczna dla wydajności, ponieważ połączenie TCP z pgbouncer musiałoby być nawiązywane za każdym razem, gdy potrzebne jest połączenie z bazą danych. Nie zapewni również mechanizmu w 100% odpornego na awarie, ponieważ pgbouncer może nadal wypadać, gdy połączenie jest w użyciu.

Pod koniec dnia pytasz o odporność na arbitralną awarię sieci/serwera, co nie jest rzeczą łatwą do osiągnięcia. Jedynym w 100% niezawodnym sposobem radzenia sobie z tym jest aplikacja, za pośrednictwem dedykowanej warstwy, która będzie ponawiać operacje, gdy wystąpi przejściowy wyjątek. Możesz spojrzeć na Polly i zauważ, że Npgsql pomaga nam trochę, ujawniając IsTransient wyjątek, który może być używany jako wyzwalacz do ponawiania próby (Entity Framework Core zawiera również podobną "strategię ponawiania prób"). Jeśli pójdziesz tą ścieżką, pamiętaj, że transakcje są szczególnie trudne do prawidłowej obsługi.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Yii2:jak określić schematy wielokrotności bazy danych?

  2. Nieudane koło budowania dla psycopg2 - MacOSX przy użyciu virtualenv i pip

  3. Jak napisać podzapytanie w klauzuli From w django ORM

  4. Jaki jest najczystszy sposób na sprawdzenie aktualnego czasu lokalnego w Postgresie?

  5. VBScript zawiesza się podczas uruchamiania pliku wsadowego za pomocą WShell.Script Run