全部產品
Search
文件中心

PolarDB:什麼是讀寫分離

更新時間:Apr 03, 2025

PolarDB MySQL版叢集內建讀寫分離功能。應用程式只需串連一個可读可写(自动读写分离)模式的叢集地址,寫請求會自動轉寄到主節點,讀請求會自動根據各節點的負載(當前未完成的請求數)轉寄到主節點或唯讀節點。

優勢

  • 讀一致性

    當用戶端通過讀寫分離地址與後端建立串連後,讀寫分離中介軟體會自動與主節點和各個唯讀節點建立串連。在同一個串連內(同一個session內),讀寫分離中介軟體會根據各個資料庫節點的資料同步程度,來選擇合適的節點,在保證資料正確的基礎上(寫操作之後的讀有正確的結果),實現讀寫請求的負載平衡。

    示意圖

  • 原生支援讀寫分離,提升效能

    如果您在雲上通過自己搭建代理層實現讀寫分離,在資料到達資料庫之前需要經歷多個組件的語句解析和轉寄,響應延遲較大。而PolarDB讀寫分離直接內建在已有的高安全鏈路中,沒有任何額外的組件產生消耗,能夠有效降低延遲,提升處理速度。

  • 維護方便

    在傳統模式下,您需要在應用程式中配置主節點和每個唯讀節點的串連地址,並且對商務邏輯進行拆分,才能將寫請求發往主節點而將讀請求發往所有節點。

    PolarDB提供叢集地址,應用程式串連該地址後即可對主節點和唯讀節點進行讀寫操作,讀寫請求會被自動轉寄,轉寄邏輯完全對使用者透明,可降低維護成本。

    同時,您只需添加唯讀節點的個數,即可不斷擴充系統的處理能力,應用程式無需做任何修改。

  • 節點健全狀態檢查,提升資料庫系統的可用性

    讀寫分離模組自動對叢集內的所有節點進行健全狀態檢查,當發現某個節點宕機或者延遲超過閾值後,PolarDB將不再分配讀請求給該節點,讀寫請求在剩餘的健康節點間進行分配,以此確保單個唯讀節點發生故障時,不會影響應用的正常訪問。當節點被修複後,PolarDB會自動將該節點納回請求分配體系內。

  • 免費使用,降低資源及維護成本

    免費提供讀寫分離功能,無需支付任何額外費用。

請求轉寄邏輯

可讀可寫入模式轉寄邏輯如下:

  • 只發往主節點:

    • 所有DML操作(INSERTUPDATEDELETESELECT FOR UPDATE)。

    • 所有DDL操作(建表或庫、刪表或庫、變更表結構、許可權等)。

    • 在未開啟事務拆分功能時,所有事務中的請求。

      說明

      開啟事務拆分功能後的路由詳情請參見事務拆分

    • 使用者自訂函數。

    • 預存程序。

    • LOCK/UNLOCK TABLES語句。

    • Multi Statements

    • 使用到暫存資料表的請求。

    • SELECT last_insert_id()

    • 所有對使用者變數的查詢和更改。

    • binlog dump。

  • 發往唯讀節點或主節點:

    說明

    僅當主库是否接受读選擇為時會發往主節點。

    • 非事務中的讀請求。

    • 唯讀事務(START TRANSACTION READ ONLY)。

  • 總是發往所有節點:

    • 所有系統變數的更改。

    • USE命令。

    • PREPAREDEALLOCATE PREPARE命令。

    • COM_CHANGE_USERCOM_RESET_CONNECTIONCOM_QUITCOM_SET_OPTION等命令。

    • SHOW PROCESSLIST

      說明

      執行SHOW PROCESSLIST命令後,PolarDB將返回所有節點的PROCESSLIST資訊。

    • KILL(SQL語句中的KILL,非命令KILL)。

唯讀模式轉寄邏輯如下:

  • 不允許執行DDL、DML操作。

  • 所有讀請求按照負載平衡的方式轉寄到各個唯讀節點。

  • 所有讀請求不會轉寄到主節點。即使主節點已被添加到服務節點中,也不會生效。

  • binlog dump鎖定到某個RO節點。

功能特性

PolarDB的讀寫分離功能主要包含以下特性: