
業(yè)務(wù)場景
在實(shí)際工作中,由于企業(yè)的業(yè)務(wù)量會逐漸增多,企業(yè)后端的單個關(guān)系型數(shù)據(jù)庫經(jīng)常會面臨如下問題:
存儲容量瓶頸問題:大量的歷史訂單存儲在某個數(shù)據(jù)庫,可能導(dǎo)致數(shù)據(jù)庫存儲容量達(dá)到瓶頸,通常我們可以通過在一臺機(jī)器下面掛載多塊磁盤,達(dá)到10TB/20TB/30TB的容量。然后再使用一個MySQL實(shí)例支持,但數(shù)據(jù)備份,數(shù)據(jù)管理(DDL),數(shù)據(jù)檢索與更新性能(DML)都會出現(xiàn)大幅下滑。
訪問容量瓶頸問題:當(dāng)大量客戶的訪問請求發(fā)送到單個數(shù)據(jù)庫,數(shù)據(jù)庫響應(yīng)連接的進(jìn)程數(shù)達(dá)到瓶頸,導(dǎo)致數(shù)據(jù)庫無法響應(yīng)客戶端的請求,影響業(yè)務(wù)的正常處理。雖然我們可以通過增加CPU/內(nèi)存/磁盤/網(wǎng)絡(luò)等硬件緩解這種情況,但是廉價X86 PC做到幾十核目前就是頂配了,內(nèi)存幾百G也無法容納幾十T數(shù)據(jù)的各種索引,磁盤IO畢竟比內(nèi)存還是差一些,通用網(wǎng)絡(luò)也就到萬兆,本質(zhì)上是無法避免數(shù)據(jù)庫單機(jī)瓶頸的。
容災(zāi)問題:單機(jī)總存在著0或者1的問題,所以做熱備冷備,以求出故障時能夠快速切換,但是數(shù)據(jù)庫并不是應(yīng)用,數(shù)據(jù)庫存在狀態(tài),存在事務(wù),真正宕機(jī)切換對于核心業(yè)務(wù)來說真的是一個很艱難的決定。
對于阿里云的客戶,可以使用分布式數(shù)據(jù)庫DRDS服務(wù)解決如上問題:
利用DRDS的分庫分表功能分散單個數(shù)據(jù)庫的整體訪問壓力;
由于DRDS的數(shù)據(jù)水平拆分對用戶使用有一定的限制,所以DRDS還提供更低業(yè)務(wù)侵入性的讀寫分離功能;
DRDS自動繼承快速擴(kuò)展能力,穩(wěn)定性監(jiān)控,資源隔離,災(zāi)備恢復(fù)等特性。
總體來說,解決數(shù)據(jù)庫容量問題的產(chǎn)品都是基于share anything或者share nothing架構(gòu):
share anything 架構(gòu)使用共享內(nèi)存、共享存儲、infinibind、高配物理機(jī)結(jié)合出一個全功能數(shù)據(jù)庫。這樣的架構(gòu)能夠滿足大部分用戶的數(shù)據(jù)容量需求,但是本質(zhì)上如同小型機(jī)+數(shù)據(jù)庫,因此,這樣的架構(gòu)仍然會碰到容量天花板,并且相當(dāng)昂貴;
share nothing架構(gòu)使用多個廉價PC做數(shù)據(jù)拆分,服務(wù)和數(shù)據(jù)存儲節(jié)點(diǎn)之間并不完全同步狀態(tài)。這樣的架構(gòu)能夠做到數(shù)據(jù)和訪問容量通過簡單堆疊機(jī)器進(jìn)行擴(kuò)展。DRDS就是利用這種架構(gòu),通過SQL引擎和自助管控系統(tǒng)盡可能降低用戶對分布式細(xì)節(jié)的感知。
DRDS基本介紹
分布式數(shù)據(jù)庫DRDS目前定位成一個中間件,在業(yè)務(wù)應(yīng)用和RDS之間,本身不承擔(dān)數(shù)據(jù)存儲,只負(fù)責(zé)解決分布式情況下的數(shù)據(jù)操作、執(zhí)行、數(shù)據(jù)處理等功能。DRDS的使用與MySQL非常接近,建實(shí)例、建庫、建表、執(zhí)行SQL操作,唯一比較大的區(qū)別在于水平拆分模式下,DRDS對于建表需要指定拆分字段(類似索引),只要帶上這個拆分字段,SQL只會在部分?jǐn)?shù)據(jù)分片上執(zhí)行,從而加速SQL執(zhí)行速度。
“分庫分表”在DRDS里面是一個很重要的概念。DRDS在后端將數(shù)據(jù)量較大的數(shù)據(jù)表水平拆分到后端的每個RDS數(shù)據(jù)庫中,這些拆分到RDS中的數(shù)據(jù)庫被稱為分庫,分庫中的表稱為分表。DRDS由每個數(shù)據(jù)庫負(fù)責(zé)每一部分?jǐn)?shù)據(jù)的讀寫操作,從而有效的分散了整體訪問壓力,在系統(tǒng)擴(kuò)容時,只需要水平增加分庫的數(shù)量,并遷移相關(guān)數(shù)據(jù),就可以提高DRDS系統(tǒng)的總?cè)萘俊?/p>
“拆分鍵”是分庫分表的重要概念,拆分鍵也稱為分庫/分表字段。DRDS根據(jù)拆分鍵的值將數(shù)據(jù)表水平拆分到后端的每個RDS分庫里。也就是,鍵值相同的數(shù)據(jù),一定會位于同一個RDS數(shù)據(jù)庫里。DRDS除了可以定義分庫鍵以外,每一張邏輯表都可以定義自己的拆分鍵。拆分鍵暫時只能是單個字段。如果分庫鍵與分表鍵相同,那么在插入時只需要指定該分庫/分表鍵。如果分庫鍵與分表鍵不同,則在插入時需要分別指定分庫鍵和分表鍵。
DRDS水平拆分原理
拆分字段:是DRDS中數(shù)據(jù)分布和SQL路由的憑證。

圖 1
數(shù)據(jù)分布:DRDS中的數(shù)據(jù)是按照拆分字段值,加上特定的算法進(jìn)行計算,根據(jù)結(jié)果存儲數(shù)據(jù)到對應(yīng)分片

圖 2
SQL路由:當(dāng)用戶SQL遇到DRDS時,DRDS會理解整個SQL含義,然后按照拆分字段的值和執(zhí)行策略將SQL路由到對應(yīng)分區(qū)進(jìn)行執(zhí)行。

圖 3
數(shù)據(jù)合并:如果一個SQL對應(yīng)多個分片數(shù)據(jù)執(zhí)行,DRDS會將各個分片返回的數(shù)據(jù)按照原始SQL語義進(jìn)行合并。

圖 4
云中沙箱DRDS初級實(shí)驗介紹
云中沙箱(http://www.aliyunedu.net)為學(xué)員提供一個云端實(shí)驗平臺,幫助用戶熟練運(yùn)用阿里云產(chǎn)品、技術(shù)、服務(wù)與解決方案,提升用戶在阿里云上工作的操作能力。
云中沙箱提供 “SL034 使用分布式數(shù)據(jù)庫DRDS突破單個數(shù)據(jù)庫瓶頸” 自助實(shí)驗,沙箱平臺會在實(shí)驗開始時,創(chuàng)建一臺RDS實(shí)例和一臺DRDS共享實(shí)例。首先,將數(shù)據(jù)樣本導(dǎo)入到RDS新建數(shù)據(jù)庫。模擬客戶實(shí)際工作中,將百萬行數(shù)據(jù)存儲在單個RDS數(shù)據(jù)庫中的場景。然后,使用DRDS建立拆分?jǐn)?shù)據(jù)庫和拆分?jǐn)?shù)據(jù)表,也就是利用DRDS中的hash方法對單個RDS數(shù)據(jù)庫進(jìn)行拆分。之后,導(dǎo)入數(shù)據(jù),開始進(jìn)行拆分,將單個表中的數(shù)據(jù)可以拆分到分表中。最后,通過DMS查看分庫分表的結(jié)果。
通過此實(shí)驗,用戶有能力掌握:
在阿里云上使用DRDS拆分鍵,將RDS水平拆分;
通過 hint 方式實(shí)現(xiàn)對拆分的數(shù)據(jù)庫進(jìn)行查詢。
實(shí)驗架構(gòu)圖:

圖 5
手癢癢了嗎?想來試試手怎么玩轉(zhuǎn)DRDS嗎,趕緊訂閱我們微信公眾號去玩轉(zhuǎn)沙箱實(shí)驗把~我們的微信公眾號:架構(gòu)云專家頻道
如果喜歡我們的話就趕緊訂閱我們吧~~~每天定時推送新鮮干貨~~~注我們的微信公眾號:架構(gòu)云專家頻道 每天同步更新喲~~~
您也可以關(guān)注我們的官方微信公眾號(ID:ctoutiao),給您更多好看的內(nèi)容。