簡介:透明分佈式,是PolarDB-X即將發佈的能力,它能讓應用在使用PolarDB-X的過程當中,猶如使用單機數據庫通常的體驗。與傳統的中間件類型的「分佈式數據庫」相比,有了透明分佈式能力的PolarDB-X,再也不須要應用考慮分區鍵的概念,應用能夠徹底將單機MySQL上開發的建表語句、應用代碼直接遷移到PolarDB-X上運行起來。本文將爲你們介紹PolarDB-X透明分佈式的新體驗。
PolarDB-X 2.0視頻解讀:https://yqh.aliyun.com/live/polardbx2021數據庫
透明分佈式,是PolarDB-X即將發佈的能力,它能讓應用在使用PolarDB-X的過程當中,猶如使用單機數據庫通常的體驗。架構
與傳統的中間件類型的「分佈式數據庫」相比,有了透明分佈式能力的PolarDB-X,再也不須要應用考慮分區鍵的概念,應用能夠徹底將單機MySQL上開發的建表語句、應用代碼直接遷移到PolarDB-X上運行起來。負載均衡
本文將爲你們介紹PolarDB-X透明分佈式的新體驗。分佈式
WordPress是一個開源的博客軟件,它使用MySQL做爲其數據庫。操做是在PolarDB-X上安裝一個WordPress,來體驗PolarDB-X的透明分佈式能力。工具
咱們將遵循簡單的三步走:性能
總結以下:優化
下面爲你們分享下,PolarDB-X是如何實現透明分佈式的。阿里雲
PolarDB-X是一個典型的Share Nothing的分佈式數據庫,其簡化架構以下:spa
其核心組件爲無狀態的計算節點CN,與有狀態的存儲節點DN。code
要了解PolarDB-X的透明分佈式能力,首先要了解數據在PolarDB-X上是如何分佈的。
在PolarDB-X中,一個表由多個索引組成,包括主鍵、二級索引等。PolarDB-X會對每一個索引進行獨立的進行分區,其分區鍵爲索引的key。
例如一個典型的電商場景,訂單表,擁有一個主鍵(id),兩個索引(seller\_id與buyer\_id):
create table orders ( id bigint, buyer_id varchar comment '買家', seller_id varchar comment '賣家', primary key(id), index sdx(seller_id), index bdx(buyer_id) )
以下圖所示:
對索引進行分片以後,PolarDB-X會將這些分片打散到不一樣的存儲節點裏,並會按照數據量等信息進行負載均衡,以下圖所示:
在PolarDB-X中,建表語句中能夠不考慮分區鍵,PolarDB-X也能自動的對錶進行分片與負載均衡。
所以,應用遷移PolarDB-X時,能夠將單機MySQL中的建表語句導出,不須要修改直接在PolarDB-X中執行便可。
分佈式事務是PolarDB-X中的最重要的基礎能力,它普遍的應用於業務內,避免了業務對事務代碼進行改造;同時,PolarDB-X內部也用事務來實現索引。
PolarDB-X的分佈式事務有如下幾個特徵:
PolarDB-X分佈式事務的原理咱們專欄有不少介紹的文章,在此再也不贅述。對其原理感興趣的同窗能夠參考這幾篇文章:
https://zhuanlan.zhihu.com/p/329978215
https://zhuanlan.zhihu.com/p/338535541
https://zhuanlan.zhihu.com/p/355413022
PolarDB-X支持類型豐富的Online DDL,這裏介紹一些有表明性的DDL類型。
與單機MySQL的索引有所差別,PolarDB-X的索引均爲全局索引,包含如下幾種類型:
其中聚簇索引是PolarDB-X相對於MySQL的一種新類型的索引,它會包含表中的全部列,從而避免了回表的代價。
PolarDB-X中對索引的建立都經過DDL來完成,而且都是Online的,不會阻塞業務。
例如:
加列操做是業務中最爲常見的DDL類型。在MySQL中,加列操做的耗時是與數據量相關的(MySQL8.0中在表的最後面加列是INSTANT的)。
在PolarDB-X中,在任意位置加列都是INSTANT的,這個表明加列操做爲恆定的秒級耗時,與數據量無關,不會對業務產生任何影響。
PolarDB-X支持4種表的分佈策略,Hash、Range、List、Broadcast。因爲Hash能避免連續寫入的熱點,PolarDB-X默認使用Hash策略,大多數狀況下,此策略可以很好的知足系統的性能須要。
可是若是業務在運行期間,但願選擇合適的分區策略來提高系統性能,在PolarDB-X中能夠方便的經過DDL語句進行調整,PolarDB-X會按照新的分區策略從新組織表的數據。
例如:
任意兩種分區策略之間均可以經過DDL語句進行轉換:
想必不少同窗有過這樣的經驗:一個超大的表進行DDL操做,因爲數據量比較大,這個DDL操做沒法在一天內完成,爲了不對業務影響,人肉在白天業務高峯期來臨的時候,調整參數,下降DDL的回填速度,晚上在業務高峯期結束後,提升DDL的回填速度。
PolarDB-X中的回填,會根據當前的系統負載,自動調節速度。
例如:
在這個例子中,分了四個階段:
從這個例子中,咱們能夠看到PolarDB-X DDL的回填速度會自動根據業務負載進行調整,而且DDL期間,對業務的TPS影響很小。
爲了進一步減小DDL期間對業務的影響,PolarDB-X還使用了多項技術,例如:
咱們會在從此的文章裏詳細介紹這些技術的細節,請關注咱們的知乎專欄:https://www.zhihu.com/org/polardb-x
PolarDB-X的透明分佈式能力,將極大的減小應用從單機數據庫遷移分佈式數據庫的成本。同時,咱們將來也會讓它變得更透明,咱們正在作的一些事情包括:
本文內容由阿里雲實名註冊用戶自發貢獻,版權歸原做者全部,阿里雲開發者社區不擁有其著做權,亦不承擔相應法律責任。具體規則請查看《阿里雲開發者社區用戶服務協議》和《阿里雲開發者社區知識產權保護指引》。若是您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將馬上刪除涉嫌侵權內容。