水平擴展太難了!PolarDB-X 為你支招
引言 水平擴展(Scale Out)對於數據庫系統是一個重要的能力。採用支持 Scale Out 架構的存儲系統在擴展之後,從用戶的視角看起來它仍然是一個單一的系統,對應用完全透明,因此,它可以使數據庫系統能有效應對不同的負載場景,對用戶非常用價值。 但是,數據庫本身是一個有狀態的系統,所以,它的水平擴展是一件比較困難的事情。數據庫通常需要管理著龐大的數據,系統在擴展期間,如何保證數據一致性、高可用以及系統整體的負載均衡,更是整個水平擴展的難點。 水平擴展按不同資源類型分類,可以細分為計算節點的水平擴展與數據節點的水平擴展,後文若無特別說明,水平擴展特指數據節點的水平擴展。而數據節點的水平擴展,按查詢請求的類型,也可以進一步劃分為讀能力的擴展與寫能力的擴展。 單機數據庫的擴展 MySQL 主從複製 在單機數據庫時代,數據庫的讀寫流量全集中在一臺物理機。所以,單機數據庫要做擴展, 一個簡單有效的思路,就是將單機數據庫的數據裡複製一份或多份只讀副本,然後應用自己做讀寫分離。 早期 MySQL(5.5及以下版本)基於主從複製協議實現了主備庫架構[17],依靠備庫實現了讀能力的擴展,但主庫與備庫之間同步是採用異步複製或半同步複製,備庫的數據總會有一定數據延遲(毫秒級或亞秒級)。 MGR 與 多主模式 後來 MySQL […]