簡體   English   中英

Nodejs 集群中的 PostgreSQL 連接池

[英]PostgreSQL Connection Pooling in a Nodejs Cluster

問題

您在某個集群中運行了多個節點進程,每個核心一個,但是您的集群有多個 VM,因此有很多進程正在運行。 每個進程都是獨立的,您正在對它們進行負載平衡,因此它們的平均工作負載相似。

您正在運行 postgres,並且希望充分利用連接池,否則建立連接的成本非常高。

  1. 您要確保不會因過多的連接而使 postgres 過載。
  2. 您希望確保集群即使在低負載時間也具有高可用性(即,如果服務的使用以前非常空閑,您不希望客戶導致連接建立緩慢)。

建議的解決方案

  1. 使用每個節點的 pod 連接池:node-pg-pool 或 sidecar PGBouncer 設置(如果您使用的是 docker 或 k8s 或類似的東西)。
  2. 使用集群中所有節點進程都連接到的連接池服務。

是否可以在整個集群中始終保持多個連接處於空閑狀態以確保高可用性? 是否有任何細節需要牢記以使該解決方案有效擴展?

始終保持幾十個真正空閑的(不是“事務中的空閑”)連接應該不是問題。 幾百個會更令人擔憂。

可能會出現問題的一件事是,如果空閑連接被某個網關或防火牆切斷,那么當應用程序檢查連接時,池會對其進行測試,發現它無效,並且無論如何都需要打開一個新連接。 因此,如果您可以將池化程序配置為定期測試空閑連接(我不知道 node-pg-pool 是否/如何做到這一點),那可能是個好主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM