PolarDB PostgreSQL版(相容Oracle)叢集內建讀寫分離功能。應用程式只需串連一個叢集地址,寫請求會自動發往主節點,讀請求會自動根據各節點的負載(當前未完成的請求數)發往主節點或唯讀節點。
功能優勢
- 統一讀寫分離地址,方便維護。
您未使用叢集地址(讀寫分離地址)時,需要在應用程式中分別配置主節點和每個唯讀節點的串連地址,才能實現將寫請求發往主節點而將讀請求發往唯讀節點。PolarDB提供一個叢集地址(讀寫分離地址),您串連該地址後即可對主節點和唯讀節點進行讀寫操作,讀寫請求被自動轉寄到對應節點,可降低維護成本。同時,您只需添加唯讀節點的個數,即可不斷擴充系統的處理能力,應用程式無需做任何修改。
- Session層級的讀一致性。
當用戶端通過讀寫分離建立與後端的串連後,讀寫分離中介軟體會自動與主節點和各個唯讀節點建立串連。在同一個串連內(同一個session內),讀寫分離中介軟體會根據各個資料庫節點的資料同步程度,來選擇合適的節點,在保證資料正確的基礎上(寫操作之後的讀有正確的結果),實現讀寫請求的負載平衡。
- 擴充查詢(prepare語句或命令)的負載平衡。
含寫操作的prepare語句只發到主庫,相應的execute也只發到主庫;純讀操作的prepare語句廣播到所有節點,相應的execute根據負載平衡進行路由,從而實現查詢請求的負載平衡。
- 支援原生高安全鏈路,提升效能。
如果您在雲上自行搭建代理層實現讀寫分離,資料在到達資料庫之前需要經歷多個組件的語句解析和轉寄,對響應延遲有較大的影響。而PolarDB讀寫分離中介軟體隸屬於叢集組件,相比外部組件而言,能夠有效降低延遲,提升處理速度。
- 節點健全狀態檢查,提升資料庫系統的可用性。
讀寫分離模組將自動對主節點和唯讀節點進行健全狀態檢查,當發現某個節點出現宕機或者延遲超過閾值時,將不再分配讀請求給該節點,讀寫請求在剩餘的健康節點間進行分配。以此確保單個唯讀節點發生故障時,不會影響應用的正常訪問。當節點被修複後,該節點會自動被加入請求分配體系內。
功能限制
- 暫不支援如下命令或功能:
- 不支援Replication-mode方式進行建連,即不支援通過讀寫分離地址自行搭建主備複製叢集。如需自行搭建主備複製叢集,請使用主節點的串連地址。
- 不支援暫存資料表的ROWTYPE。
create temp table fullname (first text, last text); select '(Joe,von Blow)'::fullname, '(Joe,d''Blow)'::fullname;
- 不支援函數中建立臨時資源。
- 函數中建立暫存資料表,然後再執行對暫存資料表的查詢SQL可能會收到表不存在的錯誤資訊。
- 函數中帶有prepare語句,後續execute時可能會收到statement name不存在的錯誤資訊。
- 路由相關限制 :
- 事務中的請求都路由到主節點,事務退出後,恢複負載平衡。
- 所有使用函數(除彙總函式,例如,count、sum)的語句,會路由到主節點。