PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Npgsql com Pgbouncer no Kubernetes - pooling e keepalives


Você geralmente está no caminho certo e sua análise parece precisa. Alguns comentários:

A opção 2 (desativar keepalives) ajudará a remover conexões ociosas no pool do Npgsql que foram quebradas. Como você escreveu, seu aplicativo ainda apresentará algumas falhas (já que algumas conexões ociosas ruins podem não ser removidas a tempo). Não há nenhuma razão específica para pensar que isso causaria mais problemas - isso deve ser bastante seguro para ativar.

A opção 3 é realmente problemática para o perf, pois uma conexão TCP com o pgbouncer teria que ser estabelecida toda vez que uma conexão com o banco de dados fosse necessária. Ele também não fornecerá um mecanismo 100% à prova de falhas, pois o pgbouncer ainda pode cair enquanto uma conexão estiver em uso.

No final das contas, você está perguntando sobre resiliência diante de falhas arbitrárias de rede/servidor, o que não é uma coisa fácil de alcançar. A única maneira 100% confiável de lidar com isso é em seu aplicativo, por meio de uma camada dedicada que repetiria as operações quando ocorrer uma exceção transitória. Você pode querer ver Polly , e observe que o Npgsql ajuda um pouco expondo um IsTransient exceção que pode ser usada como um gatilho para tentar novamente (o Entity Framework Core também inclui uma "estratégia de repetição" semelhante). Se você seguir esse caminho, observe que as transações são particularmente difíceis de manipular corretamente.