PolarDB-X 2.0:使用一个透明的分布式数据库是一种什么体验?
PolarDB-X 2.0視頻解讀:https://yqh.aliyun.com/live/polardbx2021
透明分布式,是PolarDB-X即將發(fā)布的能力,它能讓應(yīng)用在使用PolarDB-X的過(guò)程中,猶如使用單機(jī)數(shù)據(jù)庫(kù)一般的體驗(yàn)。
與傳統(tǒng)的中間件類型的“分布式數(shù)據(jù)庫(kù)”相比,有了透明分布式能力的PolarDB-X,不再需要應(yīng)用考慮分區(qū)鍵的概念,應(yīng)用可以完全將單機(jī)MySQL上開發(fā)的建表語(yǔ)句、應(yīng)用代碼直接遷移到PolarDB-X上運(yùn)行起來(lái)。
本文將為大家介紹PolarDB-X透明分布式的新體驗(yàn)。
在PolarDB-X上安裝一個(gè)WordPress
WordPress是一個(gè)開源的博客軟件,它使用MySQL作為其數(shù)據(jù)庫(kù)。操作是在PolarDB-X上安裝一個(gè)WordPress,來(lái)體驗(yàn)PolarDB-X的透明分布式能力。
我們將遵循簡(jiǎn)單的三步走:
總結(jié)如下:
PolarDB-X實(shí)現(xiàn)透明分布式的武器
下面為大家分享下,PolarDB-X是如何實(shí)現(xiàn)透明分布式的。
透明數(shù)據(jù)分區(qū)
PolarDB-X是一個(gè)典型的Share Nothing的分布式數(shù)據(jù)庫(kù),其簡(jiǎn)化架構(gòu)如下:
其核心組件為無(wú)狀態(tài)的計(jì)算節(jié)點(diǎn)CN,與有狀態(tài)的存儲(chǔ)節(jié)點(diǎn)DN。
要了解PolarDB-X的透明分布式能力,首先要了解數(shù)據(jù)在PolarDB-X上是如何分布的。
在PolarDB-X中,一個(gè)表由多個(gè)索引組成,包括主鍵、二級(jí)索引等。PolarDB-X會(huì)對(duì)每個(gè)索引進(jìn)行獨(dú)立的進(jìn)行分區(qū),其分區(qū)鍵為索引的key。
例如一個(gè)典型的電商場(chǎng)景,訂單表,擁有一個(gè)主鍵(id),兩個(gè)索引(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) )- 對(duì)于主鍵索引,會(huì)按照id對(duì)其進(jìn)行分區(qū)
- 對(duì)于索引sdx,會(huì)按照seller_id進(jìn)行分區(qū)
- 對(duì)于索引bdx,會(huì)按照buyer_id進(jìn)行分區(qū)
如下圖所示:?
對(duì)索引進(jìn)行分片之后,PolarDB-X會(huì)將這些分片打散到不同的存儲(chǔ)節(jié)點(diǎn)里,并會(huì)按照數(shù)據(jù)量等信息進(jìn)行負(fù)載均衡,如下圖所示:
在PolarDB-X中,建表語(yǔ)句中可以不考慮分區(qū)鍵,PolarDB-X也能自動(dòng)的對(duì)表進(jìn)行分片與負(fù)載均衡。
因此,應(yīng)用遷移PolarDB-X時(shí),可以將單機(jī)MySQL中的建表語(yǔ)句導(dǎo)出,不需要修改直接在PolarDB-X中執(zhí)行即可。
透明的分布式事務(wù)
分布式事務(wù)是PolarDB-X中的最重要的基礎(chǔ)能力,它廣泛的應(yīng)用于業(yè)務(wù)內(nèi),避免了業(yè)務(wù)對(duì)事務(wù)代碼進(jìn)行改造;同時(shí),PolarDB-X內(nèi)部也用事務(wù)來(lái)實(shí)現(xiàn)索引。
PolarDB-X的分布式事務(wù)有以下幾個(gè)特征:
PolarDB-X分布式事務(wù)的原理我們專欄有很多介紹的文章,在此不再贅述。對(duì)其原理感興趣的同學(xué)可以參考這幾篇文章:
https://zhuanlan.zhihu.com/p/329978215
https://zhuanlan.zhihu.com/p/338535541
https://zhuanlan.zhihu.com/p/355413022
Online DDL
PolarDB-X支持類型豐富的Online DDL,這里介紹一些有代表性的DDL類型。
索引維護(hù)
與單機(jī)MySQL的索引有所差異,PolarDB-X的索引均為全局索引,包含以下幾種類型:
- 普通索引
- 唯一索引
- 聚簇索引
其中聚簇索引是PolarDB-X相對(duì)于MySQL的一種新類型的索引,它會(huì)包含表中的所有列,從而避免了回表的代價(jià)。
PolarDB-X中對(duì)索引的創(chuàng)建都通過(guò)DDL來(lái)完成,并且都是Online的,不會(huì)阻塞業(yè)務(wù)。
例如:
- 創(chuàng)建一個(gè)普通的索引:CREATE INDEX idx1 ON t1(name)
- 創(chuàng)建一個(gè)聚簇的索引:CREATE CLUSTERED INDEX idx1 ON t1(name)
INSTANT ADD COLUMN
加列操作是業(yè)務(wù)中最為常見的DDL類型。在MySQL中,加列操作的耗時(shí)是與數(shù)據(jù)量相關(guān)的(MySQL8.0中在表的最后面加列是INSTANT的)。
在PolarDB-X中,在任意位置加列都是INSTANT的,這個(gè)代表加列操作為恒定的秒級(jí)耗時(shí),與數(shù)據(jù)量無(wú)關(guān),不會(huì)對(duì)業(yè)務(wù)產(chǎn)生任何影響。
分區(qū)調(diào)整
PolarDB-X支持4種表的分布策略,Hash、Range、List、Broadcast。由于Hash能避免連續(xù)寫入的熱點(diǎn),PolarDB-X默認(rèn)使用Hash策略,大多數(shù)情況下,此策略能夠很好的滿足系統(tǒng)的性能需要。
但是如果業(yè)務(wù)在運(yùn)行期間,希望選擇合適的分區(qū)策略來(lái)提升系統(tǒng)性能,在PolarDB-X中可以方便的通過(guò)DDL語(yǔ)句進(jìn)行調(diào)整,PolarDB-X會(huì)按照新的分區(qū)策略重新組織表的數(shù)據(jù)。
例如:
- 修改表的分區(qū)策略為Hash:ALTER TABLE t1 PARTITION BY HASH(name)
- 修改表的分片數(shù)為32:ALTER TABLE t1 PARTITION BY HASH(name) PARTITIONS 32
- 將表變?yōu)閺V播表:ALTER TABLE t1 BROADCAST
- 修改表的分區(qū)策略為RANGE:ALTER TABLE t1 PARTITION BY RANGE(id)
任意兩種分區(qū)策略之間都可以通過(guò)DDL語(yǔ)句進(jìn)行轉(zhuǎn)換:
回填速度自適應(yīng)
想必很多同學(xué)有過(guò)這樣的經(jīng)驗(yàn):一個(gè)超大的表進(jìn)行DDL操作,由于數(shù)據(jù)量比較大,這個(gè)DDL操作無(wú)法在一天內(nèi)完成,為了避免對(duì)業(yè)務(wù)影響,人肉在白天業(yè)務(wù)高峰期來(lái)臨的時(shí)候,調(diào)整參數(shù),降低DDL的回填速度,晚上在業(yè)務(wù)高峰期結(jié)束后,提高DDL的回填速度。
PolarDB-X中的回填,會(huì)根據(jù)當(dāng)前的系統(tǒng)負(fù)載,自動(dòng)調(diào)節(jié)速度。
例如:
在這個(gè)例子中,分了四個(gè)階段:
從這個(gè)例子中,我們可以看到PolarDB-X DDL的回填速度會(huì)自動(dòng)根據(jù)業(yè)務(wù)負(fù)載進(jìn)行調(diào)整,并且DDL期間,對(duì)業(yè)務(wù)的TPS影響很小。
讓Online更Online
為了進(jìn)一步減少DDL期間對(duì)業(yè)務(wù)的影響,PolarDB-X還使用了多項(xiàng)技術(shù),例如:
- 元數(shù)據(jù)多版本,詳見:https://zhuanlan.zhihu.com/p/347885003
- 可暫停、可取消
- MDL死鎖檢測(cè)
我們會(huì)在今后的文章里詳細(xì)介紹這些技術(shù)的細(xì)節(jié),請(qǐng)關(guān)注我們的知乎專欄:https://www.zhihu.com/org/polardb-x
總結(jié)
PolarDB-X的透明分布式能力,將極大的減少應(yīng)用從單機(jī)數(shù)據(jù)庫(kù)遷移分布式數(shù)據(jù)庫(kù)的成本。同時(shí),我們未來(lái)也會(huì)讓它變得更透明,我們正在做的一些事情包括:
- 更精細(xì)的調(diào)度策略
- 熱點(diǎn)數(shù)據(jù)的可視化展示,與SQL審計(jì)分析聯(lián)動(dòng)的智能診斷
- 在有全局索引的情況下,支持分區(qū)級(jí)的truncate
- 數(shù)據(jù)的按時(shí)間滾動(dòng)、清理
- 等等
原文鏈接:https://developer.aliyun.com/article/784855?
版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊(cè)用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請(qǐng)查看《阿里云開發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫侵權(quán)投訴表單進(jìn)行舉報(bào),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。總結(jié)
以上是生活随笔為你收集整理的PolarDB-X 2.0:使用一个透明的分布式数据库是一种什么体验?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 唯品会在 Flink 容器化与平台化上的
- 下一篇: 技术解密|阿里云多媒体 AI 团队是凭借