Database
連接池程序應該在我的數據庫伺服器還是我的應用伺服器上執行?
我正準備開始使用 PGBouncer,但我不確定是否應該在我的數據庫伺服器或應用程序伺服器上使用它。如果它在應用程序伺服器上,則必然會有多個連接池,而不是一個中央連接池供應用程序伺服器共享,但隨後必須為每個新查詢重新創建 TCP 連接,而不是也被池化。哪種是使用像 PGBouncer 這樣的連接外觀的“正確”方式,我對每個人提出的觀點是否有效?
筆記:
對於那些偶然發現這個問題的人,請參閱PgBouncer FAQ(最後一個問題)。
就個人而言,我會把它放在應用伺服器上。這就是為什麼。
PGBouncer 基本上實現了連接池,這是一個有用的(雖然有時很煩人)的東西,它通過消除建立與數據庫的新連接的成本來減少整體應用程序延遲。在許多情況下,這是由數據庫連接驅動程序本身完成的 - 請參閱 Windows 上的 ADO.NET MSSQL 驅動程序、PHP 上的 PDO 等。主要目的是最大限度地減少程式碼之間的時間成本,即“我需要談談”到數據庫”,然後能夠實際開始拋出 SQL 命令。
上面提到的驅動程序實現了連接池,所以程式碼在達到數據庫可以接收 SQL 命令的地步之前只需要做很少的事情。
PGBouncer 是一個奇怪的例子,因為您仍然必須打開與 PGBouncer 守護程序的連接,無論它在哪裡。因為您正在嘗試最小化連接時間,所以將守護程序放置在盡可能靠近應用程式碼的位置是有意義的。理想情況下,您將通過同一個盒子上的套接字進行連接,因為這樣您就不必通過 TCP rigmarole 來訪問連接池。
與一切一樣,YMMV。測試,測試,然後再測試一些。