
我的雇主目前有多個 Postgres 實例(每個客戶一個,具有唯一的網站程式碼),這些實例在客戶場所物理上是分開的。每個客戶的實例內運行 1-4 個資料庫,每個資料庫包含 20 多個模式。
我們試圖將這些資料庫整合到單一 Postgres 實例下,無論是在本地還是透過雲端提供者(例如 RDS),以便我們可以簡化存取/控制。客戶將繼續存取資料庫,但我們將引入共享的 RESTful 服務層,其中將使用作為每個 API 的 URL 路徑的一部分添加的網站程式碼來定位特定資料庫。為了滿足我們的效能 SLA(90% 低於 1 秒)並降低資源使用率,我們打算在服務層使用連線池。
我們面臨的主要問題是 Postgres 在連接期間需要一個資料庫,這意味著我們必須為每個客戶提供一個連接池,這將低效地使用大量資源。由於我們沒有有效地使用資源,因此我們可能需要更多的服務層實例,從而為架構帶來更多的成本和複雜性。儘管可以跨服務層的多個實例有效地「分片」客戶,但它並沒有解決連接使用效率低下的真正問題!
還有其他我沒有考慮過的解決方案嗎?也許是一種擁有單一連接池的方法,其中請求被轉發到特定的資料庫?或者也許是可以根據負載動態調整大小的動態連線池?
謝謝
答案1
AWS RDS 代理可能是減少連線需求的實用方法。