PolarDB PostgreSQL版叢集內建讀寫分離功能,通過一個叢集地址(讀寫分離地址)實現讀寫請求的自動轉寄。
背景資訊
在對資料庫有少量寫請求,但有大量讀請求的應用情境下,單個節點可能無法承受讀取壓力,甚至對業務產生影響。使用叢集地址(讀寫分離地址),就可以使寫請求自動轉寄到主節點,讀請求自動轉寄到各個唯讀節點。從而實現讀取能力的彈性擴充,滿足大量的資料庫讀取需求。
功能優勢
統一讀寫分離地址,方便維護。
您未使用叢集地址(讀寫分離地址)時,需要在應用程式中分別配置主節點和每個唯讀節點的串連地址,才能實現將寫請求發往主節點而將讀請求發往唯讀節點。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)的語句,會路由到主節點。
建立或修改叢集地址
進階選項-事務拆分
詳情請參見事務拆分。
進階選項-一致性層級
詳情請參見一致性層級。
自訂路由-Hint
在SQL語句前加上/*FORCE_MASTER*/
或/*FORCE_SLAVE*/
可以強制指定這條SQL的路由方向。例如select * from test
預設會路由到唯讀節點,改為/*FORCE_MASTER*/ select * from test
就會路由到主節點。
下一步
申請叢集地址後,您只需在應用中配置該叢集地址,即可實現自動讀寫分離。
相關API
API | 描述 |
建立PolarDB叢集的公網地址。 | |
查詢PolarDB叢集的地址資訊。 | |
修改PolarDB叢集地址屬性。 | |
修改PolarDB叢集預設訪問地址首碼。 | |
釋放PolarDB叢集地址(除了自訂叢集地址的私網地址)。 |