本文介紹PolarDB-X透明分布式的概念、工作模式。
背景
傳統單機MySQL資料庫的應用,在遇到一些資源瓶頸或效能瓶頸,並且無法滿足業務要求時,考慮將單機資料庫升級為分散式資料庫並突破資源瓶頸,是一個行之有效解決方案。
但是,傳統單機資料庫的使用者使用接分散式資料庫時,普遍會遇到一些共性的問題,比如:
應用的資料在分散式資料庫應該如何分布?
哪些表需要進行水平切分?資料分割配置及分區列如何選擇?分區數目如何確定?
哪些表會落在哪些資料節點?資源不均衡如何處理?
要解決好上述的這些問題,往往要求使用者對分散式資料庫的原理及其適用情境都有一定的背景知識。所以,使用者要使用好分散式資料庫,是有一定的門檻要求的。
為了降低使用者使用分散式資料庫的門檻,方便使用者更好地從傳統單機資料庫切換到分散式資料庫,PolarDB-X 2.0向使用者提供了透明分布式的核心能力。
透明分布式僅支援AUTO模式資料庫。
什麼是透明分布式
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的分區定義,它們將:
| 優點:
不足:
| |
手動分區(預設) | 同一個邏輯庫內的所有表:
| 優點:
不足:
|
透明分布式的上述三種工作模式,並不是不相容的互斥關係,而是可以相互地配合使用。例如,手動分區分別可以與單表打散或自動分區配合使用,共同協助使用者解決問題。
在實際應用中,關於上述三種透明分布式的工作模式分別在什麼情境下使用最為合適,可以參考最佳實務。