PolarDB MySQL版集群自帶讀寫分離功能。應用程序只需連接一個可讀可寫(自動讀寫分離)模式的集群地址,寫請求會自動轉發到主節點,讀請求會自動根據各節點的負載(當前未完成的請求數)轉發到主節點或只讀節點。
優勢
讀一致性
當客戶端通過讀寫分離地址與后端建立連接后,讀寫分離中間件會自動與主節點和各個只讀節點建立連接。在同一個連接內(同一個session內),讀寫分離中間件會根據各個數據庫節點的數據同步程度,來選擇合適的節點,在保證數據正確的基礎上(寫操作之后的讀有正確的結果),實現讀寫請求的負載均衡。
原生支持讀寫分離,提升性能
如果您在云上通過自己搭建代理層實現讀寫分離,在數據到達數據庫之前需要經歷多個組件的語句解析和轉發,響應延遲較大。而PolarDB讀寫分離直接內置在已有的高安全鏈路中,沒有任何額外的組件產生消耗,能夠有效降低延遲,提升處理速度。
維護方便
在傳統模式下,您需要在應用程序中配置主節點和每個只讀節點的連接地址,并且對業務邏輯進行拆分,才能將寫請求發往主節點而將讀請求發往所有節點。
PolarDB提供集群地址,應用程序連接該地址后即可對主節點和只讀節點進行讀寫操作,讀寫請求會被自動轉發,轉發邏輯完全對使用者透明,可降低維護成本。
同時,您只需添加只讀節點的個數,即可不斷擴展系統的處理能力,應用程序無需做任何修改。
節點健康檢查,提升數據庫系統的可用性
讀寫分離模塊自動對集群內的所有節點進行健康檢查,當發現某個節點宕機或者延遲超過閾值后,PolarDB將不再分配讀請求給該節點,讀寫請求在剩余的健康節點間進行分配,以此確保單個只讀節點發生故障時,不會影響應用的正常訪問。當節點被修復后,PolarDB會自動將該節點納回請求分配體系內。
免費使用,降低資源及維護成本
免費提供讀寫分離功能,無需支付任何額外費用。
請求轉發邏輯
可讀可寫模式轉發邏輯如下:
只發往主節點:
所有DML操作(INSERT、UPDATE、DELETE、SELECT FOR UPDATE)。
所有DDL操作(建表或庫、刪表或庫、變更表結構、權限等)。
在未開啟事務拆分功能時,所有事務中的請求。
說明開啟事務拆分功能后的路由詳情請參見事務拆分。
用戶自定義函數。
存儲過程。
EXECUTE語句。
使用到臨時表的請求。
SELECT last_insert_id()
。所有對用戶變量的查詢和更改。
binlog dump。
發往只讀節點或主節點:
說明僅當主庫是否接受讀選擇為是時會發往主節點。
非事務中的讀請求。
COM_STMT_EXECUTE命令。
總是發往所有節點:
所有系統變量的更改。
USE命令。
COM_STMT_PREPARE命令。
COM_CHANGE_USER、COM_QUIT、COM_SET_OPTION等命令。
SHOW PROCESSLIST
。說明執行
SHOW PROCESSLIST
命令后,PolarDB將返回所有節點的PROCESSLIST信息。KILL(SQL語句中的KILL,非命令KILL)。
只讀模式轉發邏輯如下:
不允許執行DDL、DML操作。
所有讀請求按照負載均衡的方式轉發到各個只讀節點。
所有讀請求不會轉發到主節點。即使主節點已被添加到服務節點中,也不會生效。
binlog dump鎖定到某個RO節點。