本文將介紹PolarDB-X 1.0實例中的前、后端連接的相關信息。
背景信息
當應用程序連接PolarDB-X 1.0實例執行操作時,從PolarDB-X 1.0實例的角度看,會有如下兩種類型的連接:
- 前端連接:由應用程序建立的,到PolarDB-X 1.0計算資源實例中邏輯庫的連接。
- 后端連接:由PolarDB-X 1.0計算資源實例中的節點建立的,到后端PolarDB-X 1.0存儲資源實例(即私有定制RDS實例)中物理庫的連接。
前端連接
前端連接的數量理論上僅受限于PolarDB-X 1.0計算資源實例節點可用的內存大小和網絡連接數。但在實際的應用場景中,應用程序連接到PolarDB-X 1.0計算資源實例時,通常會管理有限數量的連接來執行請求的操作,并不會維持很高并發量的持久化長連接(如數萬個并發的長連接),因此可認為PolarDB-X 1.0實例能接受的前端連接數量是無限制的。
由于前端連接數量不受限制,可以允許有大量空閑連接存在,因此適用于業務端部署應用程序的服務器數量較多,需要同時保持連接到PolarDB-X 1.0實例的場景。
雖然前端連接的數量可被認為是無限制的,但從前端連接獲取的操作請求是由PolarDB-X 1.0計算資源實例的內部線程通過后端連接實際執行,而內部線程和后端連接的數量有限,因此PolarDB-X 1.0實例處理請求的整體并發度是有限的。
后端連接
PolarDB-X 1.0計算資源實例的每個節點內部都會創建后端連接池,自動管理和維護到私有定制RDS實例中物理庫的后端連接。因此,PolarDB-X 1.0實例中后端連接池的最大連接數與私有定制RDS實例支持的最大連接數直接相關。您可以參照以下公式來計算PolarDB-X 1.0實例中后端連接池的最大連接數。
PolarDB-X 1.0實例后端連接池的最大連接數 = 向下取整(私有定制RDS實例最大連接數 / 私有定制RDS實例物理分庫數 / PolarDB-X 1.0實例節點數)
例如,某用戶搭配購買了以下規格的私有定制RDS實例和PolarDB-X 1.0實例。
- 1個私有定制RDS實例,包含8個物理分庫,規格為通用型4核16 GB,最大連接數為4000。
- 1個PolarDB-X 1.0計算資源實例,規格為標準版16核64 GB(每4核16 GB為1個節點,即該實例包含4個節點)。
按照上述公式可計算出PolarDB-X 1.0實例中后端連接池的最大連接數。
PolarDB-X 1.0實例后端連接池的最大連接數 = FLOOR(4000 / 8 / 4) = FLOOR(125) = 125
上述公式計算的結果為PolarDB-X 1.0實例中后端連接池的最大連接數的上限。實際使用中,為了減輕私有定制RDS實例的連接壓力需要留出一定的緩沖余地,PolarDB-X 1.0實例會適當調整后端連接池的最大連接數,使其小于上限值。
- 建議每個PolarDB-X 1.0實例中的數據庫都創建在獨立的私有定制RDS實例上,而不要和其它用或其它PolarDB-X 1.0實例的數據庫共享1個私有定制RDS實例。
前、后端連接的關系
在應用程序與PolarDB-X 1.0計算資源實例建立了前端連接并發出SQL語句的執行請求后,PolarDB-X 1.0計算資源實例節點會異步地處理請求,并通過內部后端連接池獲取后端連接,在一個或多個物理庫上執行經過優化處理的SQL語句。
PolarDB-X 1.0計算資源實例節點內部為異步的處理流程,前端連接和后端連接之間并無綁定關系。在通常的短事務和簡單查詢情況下,少量的后端連接有能力處理并發量較高的前端連接所帶來的大量請求。這也是在PolarDB-X 1.0中應關注QPS指標而非并發連接數的原因。
雖然前端連接數量可被認為近乎無限制,但PolarDB-X 1.0計算資源實例節點內部的后端連接池所維護的最大連接數是有限的(原因見后端連接),因此在實際的應用場景中,需要注意以下幾點:
- 應用程序中應盡量避免長事務(亦稱為大事務),以免其長時間未提交或回滾而占用后端連接,造成后端連接池達到上限,降低整體的并發處理能力,增加響應時間。
- 應監控并優化或消除在PolarDB-X 1.0中執行的慢查詢,以免其長時間執行而占用后端連接,造成后端連接池緊張或達到上限。這種情況下PolarDB-X 1.0計算資源實例或私有定制RDS實例會面臨更大的處理壓力,導致整體的并發處理能力下降,增加響應時間。嚴重時可能還會因為執行超時導致SQL執行失敗率上升。