《淘寶數(shù)據(jù)庫架構(gòu)演進(jìn)過程PPT課件》由會員分享,可在線閱讀,更多相關(guān)《淘寶數(shù)據(jù)庫架構(gòu)演進(jìn)過程PPT課件(42頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,淘寶數(shù)據(jù)庫架構(gòu)演進(jìn)過程,丹臣,/,趙林,數(shù)據(jù)架構(gòu)師,提綱,淘寶數(shù)據(jù)庫發(fā)展的三個階段,用戶,商品,交易現(xiàn)在的架構(gòu),2010雙11大促的挑戰(zhàn),MySQL源代碼研究的一些思路,淘寶自主數(shù)據(jù)庫Oceanbase原理介紹,淘寶的數(shù)據(jù)很美麗,淘寶數(shù)據(jù)庫發(fā)展三階段,SQL語句變化,多表關(guān)聯(lián),Join,單表復(fù)雜查詢,主鍵查詢,SQL,語句復(fù)雜程度由繁到簡的過程,折射出淘寶數(shù)據(jù)架構(gòu)的一些變化。,淘寶電子商務(wù)網(wǎng)站的特點(diǎn),高并發(fā),PV13億,光棍節(jié)促
2、銷PV達(dá)到了17億,數(shù)據(jù)實時性要求高,數(shù)據(jù)準(zhǔn)確性要求高,大多數(shù)頁面屬于動態(tài)網(wǎng)頁,網(wǎng)站需要大量商品圖片展示,用戶通過搜索引擎,廣告,類目導(dǎo)航尋找商品,網(wǎng)站讀多寫少,比例超過10:1,賣家相關(guān)的數(shù)據(jù)量較大,比如商品數(shù),評價數(shù),業(yè)務(wù)量快速增長,不同的時期,不同的策略,正是因為如上的業(yè)務(wù)特點(diǎn):,早期的淘寶前端應(yīng)用系統(tǒng),嚴(yán)重依賴于數(shù)據(jù)庫系統(tǒng),早期單機(jī)式的,mysql,的使用方式,在業(yè)務(wù)的高速發(fā)展下,很快達(dá)到瓶頸,Mysql,遷移到,Oracle,,并升級到小型機(jī),高端存儲后,幾年的時間里,滿足了淘寶業(yè)務(wù)快速變化發(fā)展的需要。,我們的業(yè)務(wù)發(fā)展很快,但我們的技術(shù)沒有成長,數(shù)據(jù)庫里的數(shù)據(jù),第一,二階段的單臺數(shù)據(jù)
3、庫里,用戶,商品,交易等數(shù)據(jù)都在一起,存在許多的關(guān)聯(lián)查詢,應(yīng)用完全耦合,用戶,商品,交易,評價,收藏,連接數(shù)問題,Oracle,數(shù)據(jù)庫,太多的應(yīng)用機(jī)器,有限的鏈接池,需要數(shù)據(jù)庫連接,小型機(jī)的內(nèi)存有限,發(fā)現(xiàn)了,Oracle,數(shù)據(jù)庫有連接數(shù)瓶頸,,5000,個以后相當(dāng)吃力。,中心化,服務(wù)化,用戶,商品,交易三大中心的建設(shè),HSF的誕生,中心化后面臨另一個問題,服務(wù)調(diào)用者,與服務(wù)者之間如何進(jìn)行遠(yuǎn)程通信,淘寶,HSF,誕生,數(shù)據(jù)庫一些,OLTP join,問題解決。,A,服務(wù),B,服務(wù),HSF,數(shù)據(jù)垂直化,應(yīng)用中心化之后,底層數(shù)據(jù)庫系統(tǒng)按照不同的業(yè)務(wù)數(shù)據(jù)進(jìn)行了一系列的垂直拆分,.,此類拆分方式具有如下
4、的特點(diǎn):,a.,拆分方式簡單,只需要把不同的業(yè)務(wù)數(shù)據(jù)進(jìn)行分離,b.,避免了不同的業(yè)務(wù)數(shù)據(jù)讀寫操作時的相互影響,c.,該業(yè)務(wù)內(nèi)部及其所導(dǎo)致的問題依舊,用戶,商品,交易,評價,問題,單庫IOPS 3w,單庫連接數(shù)已經(jīng)4k個了,應(yīng)用還在不斷加機(jī)器?,單庫每秒SQL執(zhí)行次數(shù)到4w次,搜索dump數(shù)據(jù)緩慢,DW ETL緩慢,用硬盤來拼,IOPS,?,一臺高端存儲的處理能力,480,塊盤的,hdisk,max IOPS 6w,注意應(yīng)用可以接受的,IO response time,以及,IOPS,點(diǎn)。比如,3w IOPS,以上,會達(dá)到,20ms,以上,數(shù)據(jù)庫架構(gòu)發(fā)展新思路,異構(gòu)數(shù)據(jù)庫讀寫分離原始架構(gòu)圖(,0
5、8,年,8,月份),:,異構(gòu)的讀寫分離,a.,寫庫為集中式的,oracle,環(huán)境,提供數(shù)據(jù)安全性保障,b.,讀庫使用,mysql,采用數(shù)據(jù)分片,分庫分表,每臺,mysql,放少量的數(shù)據(jù),單個數(shù)據(jù)分片內(nèi)部采用,mysql,復(fù)制機(jī)制,c.,讀庫的超大,memory,容量,起到了很好的,cache,作用,在內(nèi)存中的數(shù)據(jù)查詢性能遠(yuǎn)遠(yuǎn)高于在硬盤上的性能,d.oracle,到多臺,mysql,按規(guī)則復(fù)制,由,TDDL,完成,e.,分區(qū)鍵的選擇至關(guān)重要,盡量讓數(shù)據(jù)訪問落在單臺數(shù)據(jù)庫上,g.,利用好當(dāng)前的高端硬件,保護(hù)好自己的投資,構(gòu)建數(shù)據(jù)查詢的高速公路,應(yīng)用到DB的數(shù)據(jù)寫入與查詢從雙向通行變成了單向通行,通
6、行效率更高,大大避免了相互影響。“借道行駛”的情況不再出現(xiàn)。,跨不過去的坎,為什么不直接遷到,MySQL,上面去呢?,a.,對于核心業(yè)務(wù),停機(jī)時間有限,寵大的數(shù)據(jù)無法短時間內(nèi)遷移,b.,無法在短時間內(nèi)完成項目發(fā)布過程中的測試,c.,沒有搞過,mysql,分布式系統(tǒng),對完全使用,MySQL,還沒有信心,大數(shù)據(jù)量核心業(yè)務(wù)數(shù)據(jù)遷移思路,采用兩步走戰(zhàn)略,不僅走得穩(wěn),而且走得好:,先采用異構(gòu)的數(shù)據(jù)庫讀寫分離,將數(shù)據(jù)復(fù)制到目標(biāo),mysql,各結(jié)點(diǎn),不斷切換應(yīng)用相關(guān)的讀服務(wù)到,mysql,結(jié)點(diǎn)上,驗證可靠性,機(jī)器壓力,服務(wù)響應(yīng)時間,將寫壓力從,oracle,結(jié)點(diǎn)遷移到,mysql,各結(jié)點(diǎn),,oracle,停
7、止寫,對于一些不太核心,業(yè)務(wù)不太復(fù)雜,相關(guān)影響點(diǎn)不多的數(shù)據(jù),可以直接進(jìn)行遷移。,水庫模型,你的系統(tǒng)可以撐多少?系統(tǒng)余量還有多少?,數(shù)據(jù)庫系統(tǒng)余量,兩輪測試過程,確保上線穩(wěn)定:,底層數(shù)據(jù)庫環(huán)境性能,穩(wěn)定性的基礎(chǔ)測試,常用的工具可以采用,sysbench,orion,supersmack,選擇不同的硬件,軟件組合,模擬應(yīng)用的壓力測試,要超越當(dāng)前業(yè)務(wù)壓力的幾倍進(jìn)行,這個壓力的幅度可以根據(jù)自己的業(yè)務(wù)增長設(shè)計一個合理的值。,我們?nèi)绾巫龅接脭?shù)據(jù)來說話?靠測試拿數(shù)據(jù),不靠經(jīng)驗,數(shù)據(jù)庫系統(tǒng)余量,數(shù)據(jù)生命周期之歷史遷移,Data,Online Data,History Data,商品,交易,評價,物流等數(shù)據(jù)都有
8、自己的生命周期。通過數(shù)據(jù)歷史遷移,減少在線庫的容量,提高在線庫的性能。,在線與歷史應(yīng)用分離,Online Data,Database,History Data,Database,Online Application,History Application,數(shù)據(jù)遷移程序,在線庫與歷史庫重要等到級不同,在線庫更高,同一應(yīng)用的在線應(yīng)用與歷史應(yīng)用分離,高級別的應(yīng)用不能直接依賴于低級別的數(shù)據(jù)庫,商品訪問框架,主鍵查詢,賣家查詢,淘寶商品的幾個主要的查詢:,a.,主鍵查詢通過分布式數(shù)據(jù)庫,以及分布式緩存系統(tǒng)解決,b.,賣家商品管理類查詢,這一類的查詢數(shù)據(jù)量大,并且還有,like,查詢的需求,通過實時搜索解
9、決,商品,分布式緩存,分布式數(shù)據(jù)庫,實時搜索,注:考慮不同的讀載體的技術(shù)實現(xiàn),性能,成本,用戶,用戶登陸事件數(shù)據(jù)(日志量90%)與用戶主數(shù)據(jù)(日志量10%)分離,不僅要分表,而且要放到不同的數(shù)據(jù)庫集群中,并且作好不同數(shù)據(jù)等級的容災(zāi)處理。,用戶信息,用戶主信息,用戶信息擴(kuò)展,用戶主信息數(shù)據(jù)庫集群,用戶信息擴(kuò)展數(shù)據(jù)庫集群,過度中心化,用戶中心,Tair,分布式緩存,商品中心,交易中心,評價中心,用戶中心調(diào)用次數(shù),高峰時期達(dá)到了每天,60,億次,用戶中心的過度中心化問題越來越顯著,成為各種操作的關(guān)鍵路徑。,Mysql,集群,用戶中心中的讀寫分離,用戶中心,Tair,分布式緩存,商品中心,交易中心,評
10、價中心,Mysql,集群,在其它中心中內(nèi)置可以訪問,tair,的客戶端,大部份的讀不需要經(jīng)過用戶中心,直接讀,tair,,寫需要經(jīng)過用戶中心。,交易的讀寫分離框架,主庫按照買家拆分,讀庫按照賣家拆分。,一些難題,數(shù)據(jù)庫集群自動擴(kuò)展仍然是個難題,但是是可以忍受的,底層數(shù)據(jù)庫集群經(jīng)過評估,擴(kuò)展的頻率并不高。,MySQL DDL操作不便,鎖表,對寫操作影響較大,為了減少影響,分了比較多的表,進(jìn)一步加重了維護(hù)的負(fù)擔(dān)。,其它。,光棍節(jié)大促,活動前,經(jīng)過了充分的準(zhǔn)備與系統(tǒng)評估工作:,CDN,面臨的壓力最大,預(yù)估流量將會達(dá)到,280G,左右,準(zhǔn)備了各個層面的系統(tǒng)降級方案。,一個小意外,Dataguard+m
11、irror redo對寫的影響比較大,臨時刪除遠(yuǎn)程的redo member解決這個問題,MySQL源代碼研究,我們主要從兩方面著手:,MySQL,內(nèi)部,源代碼熟悉,性能優(yōu)化,新增功能,MySQL,外部,比如利用,binlog,做數(shù)據(jù)復(fù)制,MySQL源代碼研究,內(nèi)部新增的一些功能:,a.,給,innodb,動態(tài)加數(shù)據(jù)文件,b.,禁止新連接,c.,表的訪問統(tǒng)計,d.Innodb ssd,加速,e.Mysql replication,并行復(fù)制,MySQL Binlog解析數(shù)據(jù)復(fù)制中心,解決商品,用戶,評價,收藏夾等應(yīng)用向數(shù)據(jù)倉庫,搜索增量同步數(shù)據(jù)的需求,MySQL Binlog解析數(shù)據(jù)復(fù)制中心,C
12、client,端特性:,a.,支持,mysql master,slave,主備切換,獲取,binlog,不受影響,b.,自動重連主機(jī),c.,支持,checkpoint,支持?jǐn)帱c(diǎn)續(xù)傳,binlog,Java,端復(fù)制代碼特性:,a.,支持,statement,row,兩種復(fù)制模式,b.,支持按規(guī)則復(fù)制,c.,支持一定條件下的并行復(fù)制,c.,支持,checkpoint,異地多數(shù)據(jù)中心的數(shù)據(jù)同步,杭州,青島,other,異地多數(shù)據(jù)中心的數(shù)據(jù)同步,除了oracle dataguard,master-slave replication數(shù)據(jù)復(fù)制,我們還有其它哪些可選方案?,淘寶自主數(shù)據(jù)庫Oceanbase,動態(tài)數(shù)據(jù)與靜態(tài)數(shù)據(jù)進(jìn)行分離,動態(tài)數(shù)據(jù)采用集中式,靜態(tài)數(shù)據(jù)存放與服務(wù)采用分布式,設(shè)計了一個寬表,冗余數(shù)據(jù),將離散型IO合并成連續(xù)型IO,每晚動態(tài)數(shù)據(jù),與靜態(tài)數(shù)據(jù)合并一次,將首先在收藏夾應(yīng)用上試點(diǎn),總結(jié),架構(gòu)就是用一些簡單的道理,去解決問題,對多種技術(shù),業(yè)務(wù)特征,細(xì)節(jié)都要有所了解,考慮周全,識別系統(tǒng)的主要問題,花,80%,的精力去解決,80%,的問題,架構(gòu)都是有時效性的,需要不斷探索或者接受新的思路,Follow me,Taobao dba,團(tuán)隊,blog,我的,blog subject:Data&Architecture,我的新浪微博,:,丹臣,我的,msn:,Questions?,