為瞭解決在一寫多讀架構下出現的寫效能瓶頸,PolarDB MySQL版推出了多主叢集(Limitless)。該叢集通過多個主節點實現了從一寫多讀架構到多寫多讀架構的升級。此方案主要針對SaaS多租戶、遊戲、電商等高並發讀寫的應用情境。
多主叢集(Limitless)的架構圖如下:
叢集中所有的資料檔案都存放在共用分布式儲存(PolarStore)中,各個RW節點通過Distributed File System(PolarFileSystem)共用底層儲存(PolarStore)中的資料檔案。通過叢集地址訪問整個叢集,資料庫代理會自動轉寄SQL命令到正確的RW節點。
核心優勢和能力
秒級橫向寫擴充
支援不同庫/表在不同計算節點並發寫入,最多支援在63個節點同時寫入資料。不同資料庫可以在不同計算節點秒級動態調度,極大提升整體的並發讀寫能力。
多主互備(省去備節點)
如果某個主節點發生故障,可秒級切換到其他低流量主節點,同時由於沒有額外的用於熱備的閑置資源,成本降低一半。
適用情境
多主叢集(Limitless)主要面向SaaS多租戶、遊戲、電商等高並發讀寫的應用情境。
SaaS多租戶情境:滿足高並發效能需求,實現租戶間負載平衡
情境特點:租戶的資料庫數量變化較快,負載變化較大,需要經常在不同的執行個體之間調配資料庫資源,以便達到最佳使用者體驗。
解決方案:多主叢集(Limitless)可協助客戶秒級將租戶的資料庫在不同RW節點間進行切換,或秒級增加新的RW節點承擔突發流量,從而實現負載平衡。
世界服遊戲及電商情境:分鐘級的擴縮容,適應快速增長的業務請求
情境特點:世界服遊戲及電商情境,一般採用基於中介軟體或者業務的分庫分表情境方案。在版本更新和大促的時候往往需要快速的彈性擴容數倍的叢集容量,在活動和大促結束後又需要快速縮容。然而,傳統叢集的擴縮容都需要遷移資料,非常複雜。
解決方案:多主叢集(Limitless)的秒級橫向擴充和透明路由功能,結合中介軟體或業務分庫分表可以實現透明的秒級擴充,將原來數天的擴容變為分鐘級。
分服遊戲情境:更好的效能和擴充能力,靈活擴縮容
情境特點:在遊戲成長期,資料庫負載較大,且呈現為不斷增長的趨勢特點。通常表現為在遊戲成長期期間,會不斷增加資料庫,導致RW節點負荷也不斷增加。而在遊戲衰退期,資料庫負載逐漸減少,資料庫會不斷合并,導致RW節點的負荷也呈減少趨勢。
解決方案:遊戲成長期,可快速將部分資料庫切換到新的RW節點,實現負載平衡;遊戲衰退期,可快速將資料庫彙總到少量RW節點,快速降低運作成本。
版本限制
資料庫引擎為MySQL 8.0。
暫不支援由叢集版直接轉換為多主叢集(Limitless)。產品系列升級,請參見大版本升級。
效能提升情況
經測試,隨著叢集中的資料庫切換至更多的主節點(RW)上,叢集整體並發讀寫能力幾乎呈線性提升。測試樣本如下:
測試背景:叢集包含8個資料庫,8個RW節點。
測試過程:初始情況下,8個資料庫全部負載在其中一個RW節點上,然後對所有資料庫同步執行相同的壓力測試。壓測期間,將8個資料庫分別平均切換到2個RW節點、4個RW節點、8個RW節點上,觀察叢集整體的效能變化趨勢。
效能變化趨勢如下,以QPS為例:

從上圖可以看出,隨著資料庫切換至更多的RW上時,叢集整體並發讀寫能力得到了極大的提升,幾乎呈現為線性提升。
節點規格與費用
開始使用
多主叢集(Limitless)限制每個資料庫或資料對象的資料只能通過一個節點寫入。在建立資料庫時,您可以指定RW節點,或將
loose_innodb_mm_default_master_id參數的值調整為0,讓系統隨機播放一個RW節點進行資料庫建立。通過
SELECT語句查詢資料。在查詢資料時,無需指定RW節點,資料庫代理會自動選擇正確的RW節點執行查詢。
更多資訊,請參見使用說明。