數(shù)據(jù)庫(kù)水平切分架構(gòu)方案_第1頁(yè)
數(shù)據(jù)庫(kù)水平切分架構(gòu)方案_第2頁(yè)
數(shù)據(jù)庫(kù)水平切分架構(gòu)方案_第3頁(yè)
數(shù)據(jù)庫(kù)水平切分架構(gòu)方案_第4頁(yè)
數(shù)據(jù)庫(kù)水平切分架構(gòu)方案_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 數(shù)據(jù)庫(kù)水平切分架構(gòu)方案我是架構(gòu)師 微信號(hào) Architect-msup功能介紹 經(jīng)過(guò)多年的積淀,已有互聯(lián)網(wǎng)、金融、電信、能源、制造等領(lǐng)域近千名架構(gòu)師、CTO、開(kāi)發(fā)人員通過(guò)本平臺(tái)發(fā)布最前沿的技術(shù),這里將有各位大牛的干貨分享,相信人人都會(huì)有收獲,人人都是架構(gòu)師!數(shù)據(jù)庫(kù)水平切分是一個(gè)很有意思的話題,不同業(yè)務(wù)類型,數(shù)據(jù)庫(kù)水平切分的方法不同。本篇將以“訂單中心”為例,介紹“多key”類業(yè)務(wù),隨著數(shù)據(jù)量的逐步增大,數(shù)據(jù)庫(kù)性能顯著降低,數(shù)據(jù)庫(kù)水平切分相關(guān)的架構(gòu)實(shí)踐。一、什么是“多key”類業(yè)務(wù)所謂的“多key”,是指一條元數(shù)據(jù)中,有多個(gè)屬性上存在前臺(tái)在線查詢需求。訂單中心業(yè)務(wù)分析訂單中心是一個(gè)非常常見(jiàn)的“

2、多key”業(yè)務(wù),主要提供訂單的查詢與修改的服務(wù),其核心元數(shù)據(jù)為:Order(oid, buyer_uid, seller_uid, time,money, detail);其中:oid為訂單ID,主鍵buyer_uid為買家uidseller_uid為賣家uidtime, money, detail, 等為訂單屬性數(shù)據(jù)庫(kù)設(shè)計(jì)上,一般來(lái)說(shuō)在業(yè)務(wù)初期,單庫(kù)單表就能夠搞定這個(gè)需求,典型的架構(gòu)設(shè)計(jì)為:order-center:訂單中心服務(wù),對(duì)調(diào)用者提供友好的RPC接口order-db:對(duì)訂單進(jìn)行數(shù)據(jù)存儲(chǔ)隨著訂單量的越來(lái)越大,數(shù)據(jù)庫(kù)需要進(jìn)行水平切分,由于存在多個(gè)key上的查詢需求,用哪個(gè)字段進(jìn)行切分,成

3、了需要解決的關(guān)鍵技術(shù)問(wèn)題:如果用oid來(lái)切分,buyer_uid和seller_uid上的查詢則需要遍歷多庫(kù)如果用buyer_uid或seller_uid來(lái)切分,其他屬性上的查詢則需要遍歷多庫(kù)總之,很難有一個(gè)完全之策,在展開(kāi)技術(shù)方案之前,先一起梳理梳理查詢需求。二、訂單中心屬性查詢需求分析在進(jìn)行架構(gòu)討論之前,先來(lái)對(duì)業(yè)務(wù)進(jìn)行簡(jiǎn)要分析,看哪些屬性上有查詢需求。前臺(tái)訪問(wèn),最典型的有三類需求:訂單實(shí)體查詢:通過(guò)oid查詢訂單實(shí)體,90%流量屬于這類需求用戶訂單列表查詢:通過(guò)buyer_uid分頁(yè)查詢用戶歷史訂單列表,9%流量屬于這類需求商家訂單列表查詢:通過(guò)seller_uid分頁(yè)查詢商家歷史訂單列表

4、,1%流量屬于這類需求前臺(tái)訪問(wèn)的特點(diǎn):吞吐量大,服務(wù)要求高可用,用戶對(duì)訂單的訪問(wèn)一致性要求高,商家對(duì)訂單的訪問(wèn)一致性要求相對(duì)較低,可以接受一定時(shí)間的延時(shí)。后臺(tái)訪問(wèn),根據(jù)產(chǎn)品、運(yùn)營(yíng)需求,訪問(wèn)模式各異:按照時(shí)間,架構(gòu),商品,詳情來(lái)進(jìn)行查詢后臺(tái)訪問(wèn)的特點(diǎn):運(yùn)營(yíng)側(cè)的查詢基本上是批量分頁(yè)的查詢,由于是內(nèi)部系統(tǒng),訪問(wèn)量很低,對(duì)可用性的要求不高,對(duì)一致性的要求也沒(méi)這么嚴(yán)格,允許秒級(jí)甚至十秒級(jí)別的查詢延時(shí)。這兩類不同的業(yè)務(wù)需求,應(yīng)該使用什么樣的架構(gòu)方案來(lái)解決呢?三、前臺(tái)與后臺(tái)分離的架構(gòu)設(shè)計(jì)如果前臺(tái)業(yè)務(wù)和后臺(tái)業(yè)務(wù)公用一批服務(wù)和一個(gè)數(shù)據(jù)庫(kù),有可能導(dǎo)致,由于后臺(tái)的“少數(shù)幾個(gè)請(qǐng)求”的“批量查詢”的“低效”訪問(wèn),導(dǎo)致數(shù)

5、據(jù)庫(kù)的cpu偶爾瞬時(shí)100%,影響前臺(tái)正常用戶的訪問(wèn)(例如,訂單查詢超時(shí))。前臺(tái)與后臺(tái)訪問(wèn)的查詢需求不同,對(duì)系統(tǒng)的要求也不一樣,故應(yīng)該兩者解耦,實(shí)施“前臺(tái)與后臺(tái)分離”的架構(gòu)設(shè)計(jì)。前臺(tái)業(yè)務(wù)架構(gòu)不變,站點(diǎn)訪問(wèn),服務(wù)分層,數(shù)據(jù)庫(kù)水平切分。后臺(tái)業(yè)務(wù)需求則抽取獨(dú)立的web/service/db來(lái)支持,解除系統(tǒng)之間的耦合,對(duì)于“業(yè)務(wù)復(fù)雜”“并發(fā)量低”“無(wú)需高可用”“能接受一定延時(shí)”的后臺(tái)業(yè)務(wù):可以去掉service層,在運(yùn)營(yíng)后臺(tái)web層通過(guò)dao直接訪問(wèn)數(shù)據(jù)層可以不需要反向代理,不需要集群冗余可以通過(guò)MQ或者線下異步同步數(shù)據(jù),犧牲一些數(shù)據(jù)的實(shí)時(shí)性可以使用更契合大量數(shù)據(jù)允許接受更高延時(shí)的“索引外置”或者“H

6、IVE”的設(shè)計(jì)方案解決了后臺(tái)業(yè)務(wù)的訪問(wèn)需求,問(wèn)題轉(zhuǎn)化為,前臺(tái)的oid,buyer_uid,seller_uid如何來(lái)進(jìn)行數(shù)據(jù)庫(kù)水平切分呢?多個(gè)維度的查詢較為復(fù)雜,對(duì)于復(fù)雜系統(tǒng)設(shè)計(jì),可以逐步簡(jiǎn)化。四、假設(shè)沒(méi)有seller_uid訂單中心,假設(shè)沒(méi)有seller_uid上的查詢需求,而只有oid和buyer_uid上的查詢需求,就蛻化為一個(gè)“1對(duì)多”的業(yè)務(wù)場(chǎng)景,對(duì)于“1對(duì)多”的業(yè)務(wù),水平切分應(yīng)該使用“基因法”。再次回顧一下,什么是分庫(kù)基因?通過(guò)buyer_uid分庫(kù),假設(shè)分為16個(gè)庫(kù),采用buyer_uid%16的方式來(lái)進(jìn)行數(shù)據(jù)庫(kù)路由,所謂的模16,其本質(zhì)是buyer_uid的最后4個(gè)bit決定這行

7、數(shù)據(jù)落在哪個(gè)庫(kù)上,這4個(gè)bit,就是分庫(kù)基因。也再次回顧一下,什么是基因法分庫(kù)?在訂單數(shù)據(jù)oid生成時(shí),oid末端加入分庫(kù)基因,讓同一個(gè)buyer_uid下的所有訂單都含有相同基因,落在同一個(gè)分庫(kù)上。如上圖所示,buyer_uid=666的用戶下了一個(gè)訂單:使用buyer_uid%16分庫(kù),決定這行數(shù)據(jù)要插入到哪個(gè)庫(kù)中分庫(kù)基因是buyer_uid的最后4個(gè)bit,即1010在生成訂單標(biāo)識(shí)oid時(shí),先使用一種分布式ID生成算法生成前60bit(上圖中綠色部分)將分庫(kù)基因加入到oid的最后4個(gè)bit(上圖中粉色部分),拼裝成最終64bit的訂單oid(上圖中藍(lán)色部分)通過(guò)這種方法保證,同一個(gè)用戶下

8、的所有訂單oid,都落在同一個(gè)庫(kù)上,oid的最后4個(gè)bit都相同,于是:通過(guò)buyer_uid%16能夠定位到庫(kù)通過(guò)oid%16也能定位到庫(kù)五、假設(shè)沒(méi)有oid訂單中心,假設(shè)沒(méi)有oid上的查詢需求,而只有buyer_uid和seller_uid上的查詢需求,就蛻化為一個(gè)“多對(duì)多”的業(yè)務(wù)場(chǎng)景,對(duì)于“多對(duì)多”的業(yè)務(wù),水平切分應(yīng)該使用“數(shù)據(jù)冗余法”。如上圖所示:當(dāng)有訂單生成時(shí),通過(guò)buyer_uid分庫(kù),oid中融入分庫(kù)基因,寫入DB-buyer庫(kù)通過(guò)線下異步的方式,通過(guò)binlog+canal,將數(shù)據(jù)冗余到DB-seller庫(kù)中buyer庫(kù)通過(guò)buyer_uid分庫(kù),seller庫(kù)通過(guò)seller_

9、uid分庫(kù),前者滿足oid和buyer_uid的查詢需求,后者滿足seller_uid的查詢需求數(shù)據(jù)冗余的方法有很多種:服務(wù)同步雙寫服務(wù)異步雙寫線下異步雙寫(上圖所示,是線下異步雙寫)不管哪種方案,因?yàn)閮刹讲僮鞑荒鼙WC原子性,總有出現(xiàn)數(shù)據(jù)不一致的可能,高吞吐分布式事務(wù)是業(yè)內(nèi)尚未解決的難題,此時(shí)的架構(gòu)優(yōu)化方向,并不是完全保證數(shù)據(jù)的一致,而是盡早的發(fā)現(xiàn)不一致,并修復(fù)不一致。最終一致性,是高吞吐互聯(lián)網(wǎng)業(yè)務(wù)一致性的常用實(shí)踐。保證數(shù)據(jù)最終一致性的方案有三種:冗余數(shù)據(jù)全量定時(shí)掃描冗余數(shù)據(jù)增量日志掃描冗余數(shù)據(jù)線上消息實(shí)時(shí)檢測(cè)這些方案細(xì)節(jié)在“多對(duì)多”業(yè)務(wù)水平拆分的文章里詳細(xì)展開(kāi)分析過(guò),便不再贅述。六、oid/

10、buyer_uid/seller_uid同時(shí)存在通過(guò)上述分析:如果沒(méi)有seller_uid,“多key”業(yè)務(wù)會(huì)蛻化為“1對(duì)多”業(yè)務(wù),此時(shí)應(yīng)該使用“基因法”分庫(kù):使用buyer_uid分庫(kù),在oid中加入分庫(kù)基因如果沒(méi)有oid,“多key”業(yè)務(wù)會(huì)蛻化為“多對(duì)多”業(yè)務(wù),此時(shí)應(yīng)該使用“數(shù)據(jù)冗余法”分庫(kù):使用buyer_uid和seller_uid來(lái)分別分庫(kù),冗余數(shù)據(jù),滿足不同屬性上的查詢需求如果oid/buyer_uid/seller_uid同時(shí)存在,可以使用上述兩種方案的綜合方案,來(lái)解決“多key”業(yè)務(wù)的數(shù)據(jù)庫(kù)水平切分難題七、總結(jié)任何復(fù)雜難題的解決,都是一個(gè)化繁為簡(jiǎn),逐步擊破的過(guò)程。對(duì)于像訂單中心

11、一樣復(fù)雜的“多key”類業(yè)務(wù),在數(shù)據(jù)量較大,需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行水平切分時(shí),對(duì)于后臺(tái)需求,采用“前臺(tái)與后臺(tái)分離”的架構(gòu)設(shè)計(jì)方法:前臺(tái)、后臺(tái)系統(tǒng)web/service/db分離解耦,避免后臺(tái)低效查詢引發(fā)前臺(tái)查詢抖動(dòng)采用前臺(tái)與后臺(tái)數(shù)據(jù)冗余的設(shè)計(jì)方式,分別滿足兩側(cè)的需求采用“外置索引”(例如ES搜索系統(tǒng))或者“大數(shù)據(jù)處理”(例如HIVE)來(lái)滿足后臺(tái)變態(tài)的查詢需求對(duì)于前臺(tái)需求,化繁為簡(jiǎn)的設(shè)計(jì)思路,將“多key”類業(yè)務(wù),分解為“1對(duì)多”類業(yè)務(wù)和“多對(duì)多”類業(yè)務(wù)分別解決:使用“基因法”,解決“1對(duì)多”分庫(kù)需求:使用buyer_uid分庫(kù),在oid中加入分庫(kù)基因,同時(shí)滿足oid和buyer_uid上的查詢需求使用“數(shù)據(jù)冗余法”,解決“多對(duì)多”分庫(kù)需求:使用bu

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論