我正在寻找更详细的指导/其他人在使用Npgsql与Pgbouncer生产环境中的经验。基本上,我们使用GKE和Google Cloud SQL进行以下设置:。目前为止,我已经将npgsql配置为如果没有pgbouncer,则使用本地连接池。由于Google SQL具有非常低的最大连接限制,并且为了能够在Kubernetes内部水平扩展应用程序,我已将pgbouncer添加为我的GKE集群中的一个部署 - 我需要保护它免受压倒性的影响。我的问题是当pgbouncer pod之一死亡(由于节点故障或我正在缩放时)时的可靠性问题。当发生这种情况时,(1)所有现有的来自应用程序pod中的客户端连接池的打开连接不会立即关闭(2)-并且基本上会导致我的应用程序出现异常,因为它尝试执行命令。不理想!据我所见(并查看
https://www.npgsql.org/doc/compatibility.html
中的建议),我有三个选项。1.忍受它,并在我的应用程序中处理SQL命令的重试。可能,但如果我做错了,似乎需要很多努力,并且会创建许多可能的错误。2.打开保持活动状态,并让npgsql自己在这些失败时相对快速地“失败”。我甚至不确定这是否有效或是否会导致进一步的问题。3.完全关闭客户端连接池。这似乎是官方建议,但出于性能原因,我不愿意这样做,这似乎非常浪费Npgsql必须为每个会话打开与pgbouncer的连接-并与其他RDBMS(如SQL Server)的所有经验相反。我选项中的哪一个是正确的?还是我漏掉了什么?
IsTransient
很有帮助)。根据https://www.npgsql.org/doc/keepalive.html
上的建议,还有一个问题 - 是从SQL还是TCP保持连接开始? - Kieran Benton