本文介紹PolarDB-X透明分布式的概念、工作模式。
背景
傳統單機MySQL數據庫的應用,在遇到一些資源瓶頸或性能瓶頸,并且無法滿足業務要求時,考慮將單機數據庫升級為分布式數據庫并突破資源瓶頸,是一個行之有效的解決方案。
但是,傳統單機數據庫的用戶使用接分布式數據庫時,普遍會遇到一些共性的問題,比如:
應用的數據在分布式數據庫應該如何分布?
哪些表需要進行水平切分?分區方案及分區列如何選擇?分區數目如何確定?
哪些表會落在哪些數據節點?資源不均衡如何處理?
要解決好上述的這些問題,往往要求用戶對分布式數據庫的原理及其適用場景都有一定的背景知識。所以,用戶要使用好分布式數據庫,是有一定的門檻要求的。
為了降低用戶使用分布式數據庫的門檻,方便用戶更好地從傳統單機數據庫切換到分布式數據庫,PolarDB-X 2.0 向用戶提供了透明分布式的內核能力。
什么是透明分布式
PolarDB-X 2.0的透明分布式的本質,是通過向用戶提供默認分區策略或數據分布策略,讓用戶的應用在近乎零改造的前提下接入分布式數據庫,并同時能享受到因分布式數據庫擴展性所帶來的突破單機性能瓶頸的紅利。
因此,透明分布式最核心的能力就是幫助用戶決定一張表采用何種分區方案,以及該表的數據將如何分布在 PolarDB-X的各個DN節點上。
對于從傳統單機MySQL數據庫切換到PolarDB-X分布式數據庫的用戶,其業務的建表 SQL 可以分為兩大類:
第一類表:建表SQL沒有顯式使用MySQL分區表語法,因此可稱為 MySQL 單表;
第二類表:建表 SQL 顯式使用了MySQL分區表語法,比如,帶上了Partition By Hashs(id) 等,因此可稱為 MySQL 分區表。
對于第二類表,由于用戶的建表語句已經選擇使用了MySQL的分區語法,所以可認為用戶已經為該表選取最合適業務的分區方案。因此,這類表在PolarDB-X內部也將作為手動分區表,它的各個分區默認自動均衡分布到不同的DN節點,從而實現負載均衡。
對于第一類表,由于用戶的建表語句并沒有使用MySQL的分區語法,并且這類表通常占大多數。因此,透明分布式重點就是要幫助用戶決定這類表在PolarDB-X里的分區方案及數據分布方案。
PolarDB-X透明分布式針對第一類表的建表,主要提供了三種分區方案與數據分布方案:
第一種方案:純單表,即原來業務所有的MySQL單表在PolarDB-X中保持單表并分配固定的 DN節點,而不是自動打散,這相當于與原來用戶的單機MySQL的用法保持完全相同;
第二種方案:單表打散,即原來業務所有的MySQL單表在PolarDB-X中保持單表,并且自動打散到不同的DN節點;
第三種方案:自動分區,即原來業務所有的MySQL單表在PolarDB-X中實施自動分區:
主表以按主鍵進行水平的哈希分區;
索引默認使用全局索引,并按索引列水平分區。
因此,根據一個邏輯庫對于所有業務的MySQL單表的建表SQL默認所采用的是純單表方案、單表打散方案還自動分區方案,我們可以將透明分布式的功能劃分為以下三種工作模式:
單表打散
自動分區
手動分區
透明分布式的工作模式
由于需要對接分布式數據庫的應用場景是多種多樣的,因此,目前PolarDB-X 2.0透明分布式有多種不同的工作模式,每種工作模式使用不同的默認分區策略或數據分布策略,這樣用戶就能根據自己的業務及應用的特點,在對接分布式數據庫時(尤其是首次對接分布式數據庫的用戶),選擇最合適自己應用的工作模式。
PolarDB-X 2.0 透明分布式工作模式及其優缺點,如下表所示:
工作模式 | 行為簡述 | 優缺點 |
同一個邏輯庫內的所有表:
| 優點:
不足:
| |
同一個邏輯庫內的所有表,若它們沒顯式指定 MySQL的分區定義,它們將:
| 優點:
不足:
| |
同一個邏輯庫內的所有表:
| 優點:
不足:
|
透明分布式的上述三種工作模式,并不是不相容的互斥關系,而是可以相互地配合使用。例如,手動分區分別可以與單表打散或自動分區配合使用,共同幫助用戶解決問題。
在實際應用中,關于上述三種透明分布式的工作模式分別在什么場景下使用最為合適,可以參考最佳實踐。