淘宝杨志丰:OceanBase--淘宝结构化大数据解决之道
淘寶楊志豐:OceanBase--淘寶結(jié)構(gòu)化大數(shù)據(jù)解決之道
時(shí)至今日,“Big data”(大數(shù)據(jù))時(shí)代的來臨已經(jīng)毋庸置疑,尤其是在電信、金融等行業(yè),幾乎已經(jīng)到了“數(shù)據(jù)就是業(yè)務(wù)本身”的地步。這種趨勢(shì)已經(jīng)讓很多相信數(shù)據(jù)之力量的企業(yè)做出改變。恰逢此時(shí),為了讓更多的人了解和使用分析大數(shù)據(jù),CSDN獨(dú)家承辦的大數(shù)據(jù)技術(shù)大會(huì)于今日在北京中旅大廈召開。本次大會(huì)匯集Hadoop、NoSQL、數(shù)據(jù)分析與挖掘、數(shù)據(jù)倉(cāng)庫(kù)、商業(yè)智能以及開源云計(jì)算架構(gòu)等諸多熱點(diǎn)話題。包括百度、淘寶、新浪等業(yè)界知名專家與參會(huì)者齊聚一堂,共同探討大數(shù)據(jù)浪潮下的行業(yè)應(yīng)對(duì)法則以及大數(shù)據(jù)時(shí)代的抉擇。
淘寶核心系統(tǒng)存儲(chǔ)系統(tǒng)研發(fā)專家楊志豐
楊志豐表示淘寶每天大約有6000萬用戶登錄以及20億PV量。淘寶數(shù)據(jù)庫(kù)對(duì)于淘寶來說非常重要。幾乎所有淘寶業(yè)務(wù)都依賴淘寶數(shù)據(jù)庫(kù)。淘寶數(shù)據(jù)庫(kù)具備數(shù)以千計(jì)的數(shù)據(jù)庫(kù)服務(wù)器同時(shí)要應(yīng)對(duì)單表幾億至幾百億條的記錄以及每天幾億至幾百億次訪問。
為了應(yīng)對(duì)大數(shù)據(jù)的沖擊,淘寶將以前的Oracle、小型機(jī)、高端存儲(chǔ)模式轉(zhuǎn)變到現(xiàn)今的MySQL、OceanBase、Hbase、MongoDB等數(shù)據(jù)庫(kù),并使用普通PC服務(wù)器。楊志豐表示OceanBase可擴(kuò)展數(shù)千億條記錄、數(shù)百TB數(shù)據(jù)、數(shù)十萬QPS以及數(shù)萬TPS。同時(shí)具備實(shí)時(shí)容錯(cuò)、自動(dòng)故障恢復(fù)和99.999%高可用性。
以下為文字實(shí)錄
大家好,我叫楊志豐,其實(shí)我們QceanBase的總架構(gòu)師是楊振坤老師,名字很想象。很高興與大家分享一下我們淘寶的大數(shù)據(jù)解決之道,這個(gè)題目很大,我講的東西很具體,我們思路首先看看淘寶數(shù)據(jù)有多大,然后在淘寶數(shù)據(jù)里面一大塊是在線結(jié)構(gòu)化的存儲(chǔ),這部分我們QceanBase這個(gè)系統(tǒng)就是解決其中的一個(gè)問題。這個(gè)問題一會(huì)我會(huì)著重落講,最后重點(diǎn)是在QceanBase這個(gè)系統(tǒng)上,希望我今天講完之后,大家能夠記住幾點(diǎn),第一,淘寶數(shù)據(jù)有多大,第二,QceanBase的特點(diǎn)在什么地方。
這幅圖上是淘寶網(wǎng)的年度交易額,淘寶成立于2003年,這是每年的交易額,基本上可以看到一年翻一番,有些年份略微不足一點(diǎn),基本上是翻番的,就是指數(shù)增長(zhǎng)。大家猜一下,淘寶現(xiàn)在每天的PV有多少,淘寶每天有6千萬用戶登錄,每天PV大約20億,這是alexa淘寶上流量,縱軸表示每天全球訪問互聯(lián)網(wǎng)的網(wǎng)民中有多少是訪問了淘寶,之后這個(gè)邊邊就是剛剛結(jié)束雙十一的促銷,馬上就上去了。淘寶有這么多PV,每次頁面都要訪問后面數(shù)據(jù)庫(kù)幾十次。
我們運(yùn)營(yíng)人員需要很多報(bào)表,每一個(gè)發(fā)表都要分析幾T,甚至幾百T的數(shù)據(jù)。淘寶數(shù)據(jù)大概可以分成三塊,一個(gè)就是離線的數(shù)據(jù),淘寶離線數(shù)據(jù),其中一塊,我們存在Hadoop機(jī)群里面,有2千多個(gè)集群,這里面存了39P以上的數(shù)據(jù),每天要運(yùn)行4萬多個(gè)MapReduce,一方面產(chǎn)生各種運(yùn)營(yíng)報(bào)表,還有一些可能有利于我們賣家無法開展運(yùn)營(yíng)。舉幾個(gè)例子,淘寶上最暢銷的手機(jī)價(jià)格區(qū)間,1千-2千塊錢。01年的什么年貨最暢銷?糖果類,最后是什么地方的人最愛吃大閘蟹,廣東,上海,這是一些離線數(shù)據(jù)。
另外一些在線數(shù)據(jù),可以分成兩類,第一類非結(jié)構(gòu)化的數(shù)據(jù)。非結(jié)構(gòu)化數(shù)據(jù),主要是圖片,以前的時(shí)候淘寶圖片都是賣家找一些,這種網(wǎng)盤了,都是外列,在外面面向外面網(wǎng)站,極大地影響了用戶體驗(yàn),后來淘寶一些大的賣家都可以把圖片存在淘寶里面,這個(gè)數(shù)據(jù)目前有2700TB,他們都是存到淘寶自主研發(fā)TFS文件系統(tǒng)成本。
TFS文件系統(tǒng),結(jié)構(gòu)比較簡(jiǎn)單,但是實(shí)時(shí)響應(yīng)能力很好,實(shí)現(xiàn)同城熱備和同城備份。在線結(jié)構(gòu)化數(shù)據(jù),這部分?jǐn)?shù)據(jù)是淘寶最核心的數(shù)據(jù),包括商品庫(kù),用戶庫(kù),還有店鋪庫(kù),還有一些評(píng)價(jià)庫(kù)等等,每一個(gè)庫(kù)可能就是一張大表,或者若干張表。舉一個(gè)例子,淘寶的商品庫(kù),淘寶商品庫(kù)現(xiàn)在有,因?yàn)槲覀兩唐穾?kù)里面是分在線和已經(jīng)下線商品,總共加起來有22億商品,峰值QPS是78K,TPS是2.7K,這是一個(gè)商品庫(kù)基本概況。
我們今天在具體一點(diǎn)講的是一個(gè)淘寶的收藏夾,這是用戶瀏覽商品,他如果喜歡這個(gè)寶貝就可以點(diǎn)擊收藏,用戶可以在自己收藏夾里面看到所有收藏寶貝,這個(gè)寶貝可以按照價(jià)格,或者是它的收藏時(shí)間進(jìn)行排序。另外后面有一個(gè)收藏人氣,這個(gè)寶貝被多少人收藏,這個(gè)信息對(duì)于賣家是非常重要的。收藏夾數(shù)據(jù)庫(kù)模型基本上很簡(jiǎn)單,一個(gè)是寶貝的信息,包括每一個(gè)寶貝有一個(gè)唯一的ID,有它的價(jià)格,還有它的收藏人氣等等,還有其他一些屬性,這個(gè)我們叫做寶貝信息表。另外一個(gè)是收藏信息表,就是用戶ID和寶貝之間的關(guān)系,這個(gè)信息表現(xiàn)有65億記錄。
收藏夾這個(gè)應(yīng)用對(duì)于數(shù)據(jù)庫(kù)是有非常大的挑戰(zhàn),挑戰(zhàn)在什么地方呢?首先,收藏夾的里邊,每一個(gè)用戶可能會(huì)收藏上千條的寶貝,另外是一些熱門的寶貝,可能被十幾萬人收藏,其中價(jià)格和收藏人氣是隨時(shí)變化的。所以,每一個(gè)人在收藏的時(shí)候要實(shí)時(shí)把最新價(jià)格,或者人氣展現(xiàn)出來。另外還有一些其他應(yīng)用要按照屬性進(jìn)行排序。收藏夾每天有1.2億次人的訪問,這是平均,響應(yīng)時(shí)間必須要求在100ms之內(nèi)。
現(xiàn)在給大家簡(jiǎn)單講一下收藏夾數(shù)據(jù)模型,左邊是一個(gè)收藏信息表,右邊是收藏寶貝表,收藏信息表里面存了收藏寶貝,如果我們用關(guān)心數(shù)據(jù)庫(kù)去實(shí)現(xiàn)的話,他是一個(gè)很糟糕的情況,你的收藏寶貝表只能按照一種方法去做排序,用戶對(duì)于寶貝的收藏其實(shí)是一個(gè)隨機(jī)的。如果你想展現(xiàn)一個(gè)用戶所有收藏的寶貝,你是要去執(zhí)行一個(gè),對(duì)于收藏寶貝表是一個(gè)隨機(jī)的獨(dú)操作。剛才提到性能指標(biāo),我們?cè)?/span>100mb之內(nèi)必須把這個(gè)結(jié)果返回,有些用戶可以收藏上千條寶貝,也就是說,你要在100ms之內(nèi)完成上千次隨機(jī)讀,這個(gè)對(duì)于普通磁盤100ms,最好的磁盤只能做30次左右的隨機(jī)讀,1毫秒鐘不會(huì)超過300次。
所以,在這個(gè)應(yīng)用對(duì)數(shù)據(jù)庫(kù)是一個(gè)非常大的挑戰(zhàn)。大家有經(jīng)驗(yàn)的就會(huì)想到,我能不能這么做,我把剛才左邊這個(gè)表和右邊的表轉(zhuǎn)起來,存一個(gè)寬表,所謂寬表?就是說我們把寶貝的價(jià)格,人氣這些屬性都存到左邊這個(gè)表里面去,這是一個(gè)很好的方案。但是,剛才提到一個(gè)問題,用戶的收藏人氣是隨時(shí)會(huì)發(fā)生變化的,所以一旦你的寶貝屬性發(fā)生變化的時(shí)候,你對(duì)于左邊這個(gè)表來說要執(zhí)行很多很多的修改操作,這個(gè)基本上很難實(shí)施完成。為了解決,這個(gè)問題是QceanBase這個(gè)系統(tǒng)設(shè)計(jì)的初衷。
下面我們就引出QceanBase海量數(shù)據(jù)庫(kù),剛才講到淘寶數(shù)據(jù)庫(kù),淘寶數(shù)據(jù)庫(kù)有一些特點(diǎn),第一幾乎所有的淘寶業(yè)務(wù)都依賴于數(shù)據(jù)庫(kù),因?yàn)樘詫毱鋵?shí)是從做數(shù)據(jù)庫(kù)開始的,最早的時(shí)候用MySQL,Oracle,這和其他很多互聯(lián)網(wǎng)公司不一樣。但是在電商這一塊很多都是這樣子的,淘寶的數(shù)據(jù)庫(kù)是數(shù)以千計(jì)數(shù)據(jù)庫(kù)服務(wù)器,他的數(shù)據(jù)量非常大,單表可能達(dá)到幾億到幾百億條數(shù)據(jù),訪問量都是幾億到幾百億次訪問。
從最最懵懂的時(shí)候大家都是用MySQL開始,到最后就開始用Oracle,也許一個(gè)商業(yè)數(shù)據(jù)庫(kù)本質(zhì)上是一個(gè)單機(jī)的系統(tǒng)。所以,就要用就開始用很多昂貴硬件,比如IBM小型機(jī),還有一些EMC高端存儲(chǔ),很大機(jī)柜,這一很貴。第二,這種數(shù)據(jù)庫(kù)對(duì)運(yùn)維人員來說是一個(gè)黑匣子,我們遇到問題只能求助于商業(yè)知識(shí)了。還有一個(gè)問題Oracle本身提供的默認(rèn)分片,單個(gè)服務(wù)器承擔(dān)的數(shù)據(jù)量是有一個(gè)上線的,他本身分片對(duì)性能會(huì)有很大影響。對(duì)于數(shù)據(jù)庫(kù)的選型基本上是百花齊放,一個(gè)主要潮流,很多以前用Oracle的,如果你現(xiàn)在允許的話,盡量使用MySQL,還有QceanBase,還有Hbase,QceanBase是我們自主研發(fā)的系統(tǒng),目前有很多應(yīng)用在,最大系統(tǒng)就是我們剛才講的收藏家。如果要用MySQL傳統(tǒng)DPS去支持一個(gè)大的訪問量,大家都知道分庫(kù)和分表,你把數(shù)據(jù)庫(kù)根據(jù)你的組件分成好多小表,存在MySQL里面,MySQL本身又提供備份,所以在換屆訪問量大的挑戰(zhàn)方面,這是一個(gè)解決的辦法。但是,這種一般分庫(kù)分表都需要應(yīng)用業(yè)務(wù)來介入,比如說,實(shí)際上對(duì)應(yīng)用來說不需要關(guān)心你下面,如果你的業(yè)務(wù)增長(zhǎng)了,本來對(duì)應(yīng)用應(yīng)該沒有任何影響的,這種分庫(kù)分表對(duì)他們可見的話,這種分庫(kù)分表的邏輯都需要寫在應(yīng)用里面,業(yè)務(wù)邏輯要支持。
另外是擴(kuò)展性的問題,我們說到分庫(kù)分表一般是用原來的解決方案,你要考慮到擴(kuò)容,就要除以20,想到以后要變成20臺(tái)機(jī)器,就除以20。但是把它存到10臺(tái)機(jī)器上面,我們擴(kuò)容都是機(jī)器要翻倍的,QceanBase這樣系統(tǒng)本身是單機(jī)系統(tǒng),在做容錯(cuò)方面需要很多人工介入??v軸表示數(shù)據(jù)規(guī)模,一般DPS數(shù)據(jù)規(guī)模是千萬量級(jí)的,好的QceanBase數(shù)據(jù)庫(kù)一般都是千億到萬億量級(jí)的。但是,Hbase和Bigtable是支持單行,對(duì)于互聯(lián)網(wǎng)一些應(yīng)用是支持的,對(duì)于淘寶的很多應(yīng)用是不夠的。所以,他們兩個(gè)優(yōu)劣,其中一個(gè)優(yōu)點(diǎn)就是另一個(gè)缺點(diǎn)。理論上你的數(shù)據(jù)規(guī)模上去了,或者性能要求上去了,你就只需要加機(jī)器就可以了。
當(dāng)然還有一個(gè)解決分布式事務(wù)系統(tǒng),在這個(gè)上面可以支持萬億事務(wù),跨行跨表,因?yàn)槭谴钤?/span>QceanBase上面,并且本身解決是分布式事務(wù)的問題。所以,QceanBase我們希望找一個(gè)點(diǎn),我們要提供跨行跨表的事務(wù),在這方面像傳統(tǒng)DBM使看齊。但在可擴(kuò)展性方面,希望找到一個(gè)折中點(diǎn),我們提供不了那么高的數(shù)據(jù)量,但是我們要比傳統(tǒng)DBMS要支持的數(shù)據(jù)量更大。
剛才那個(gè)點(diǎn),QceanBase的設(shè)計(jì)目標(biāo)第一要提供千億級(jí),量級(jí)記錄數(shù),我們假設(shè)每條記錄是1K的話就是數(shù)百TB數(shù)據(jù),數(shù)十萬QPS,數(shù)萬TBS,要支持ACID完整的事務(wù)。因?yàn)槲覀儍?nèi)部有很多要求,所以我們支持的范圍查詢,我們提供實(shí)時(shí)容錯(cuò),自動(dòng)故障恢復(fù),自動(dòng)負(fù)載均衡,實(shí)現(xiàn)5個(gè)9的可用性,要實(shí)現(xiàn)普通PC服務(wù)器能做,不需要特別貴的硬件。
大家都說我們數(shù)據(jù)量很大,但是你每天更新的數(shù)據(jù),其實(shí)沒那么大??赡苣阏f你有100T的數(shù)據(jù),但是你更新的數(shù)據(jù),每天能更新的數(shù)據(jù)不到1%。我們就沒有必要為了這1%而去說,我們數(shù)據(jù)可以看作兩部分組成,一個(gè)是基準(zhǔn)數(shù)據(jù),一個(gè)就是增量數(shù)據(jù),1%就是增量數(shù)據(jù),我們可以對(duì)于基準(zhǔn)數(shù)據(jù)和增量數(shù)據(jù)采用不同做法,不同的體系結(jié)構(gòu)去做。
基準(zhǔn)的數(shù)據(jù)我們使用分布式的存儲(chǔ),把他向QceanBase系統(tǒng)一樣分成很多片,分布到一個(gè)分布式存儲(chǔ)里面去,他是一個(gè)靜態(tài)B+樹作用。增量數(shù)據(jù),我們實(shí)現(xiàn)一個(gè)單點(diǎn)來實(shí)現(xiàn),這是他設(shè)計(jì)最獨(dú)到的地方。下面我就圍繞這幅圖來講一下,最左邊是一個(gè)客戶端,然后我們系統(tǒng)里面有四個(gè)角色,第一個(gè)是叫RootServer,剛才說到靜態(tài)數(shù)據(jù),是要把整個(gè)大數(shù)據(jù)分成很多很多片的,這些分片的位置信息,我們叫做原數(shù)據(jù),這個(gè)原數(shù)據(jù)其實(shí)是一個(gè)數(shù)的根接點(diǎn),這個(gè)根接點(diǎn)是存在RootServer上,同時(shí)在這些機(jī)器上還有一個(gè)UpdateServer,增量數(shù)據(jù)。這個(gè)RootServer跟UpdateServer做了準(zhǔn)備,邏輯上是一個(gè)點(diǎn)。
ChunkServer,是把靜態(tài)數(shù)據(jù)劃成片之后,每一個(gè)小塊有若干個(gè)輔本存到這個(gè)上面去。所以,這上面UpdateServer是所有的寫,所有讀是通過這個(gè)MergeServer而,一個(gè)查詢請(qǐng)求來了之后,他首先要從本地ChunkServer把基本數(shù)據(jù)讀一下,把這個(gè)區(qū)間之內(nèi)新增增量數(shù)據(jù)給我,提供進(jìn)行讀事務(wù)。這個(gè)前面也說了基準(zhǔn)數(shù)據(jù)是一個(gè)靜態(tài)的B+樹,這個(gè)樹的比價(jià)點(diǎn)是存在RootServer,他存在與若干臺(tái)輔本,這個(gè)Tablet就是在其上面的一個(gè)輔本。
增量數(shù)據(jù)存儲(chǔ)方式,不是存到硬盤上,是完全存在內(nèi)存里的,這是邏輯上是完全存在內(nèi)存里的。數(shù)據(jù)分成基準(zhǔn)數(shù)據(jù)和增量數(shù)據(jù)之后,增量數(shù)據(jù)每天都在增加,你必須合到基準(zhǔn)數(shù)據(jù)里面去,這個(gè)做法有總控的節(jié)點(diǎn),通知這些ChunkServer,我們會(huì)選擇一個(gè)低負(fù)載時(shí)段,淘寶數(shù)據(jù)很明顯,因?yàn)槲覀冇脩舳际窃谝粋€(gè)地域之內(nèi)的,所以他有一個(gè)明顯的高分和低谷,在低谷的時(shí)候我們用一些低優(yōu)先級(jí)方式去進(jìn)行合并操作,這個(gè)合并操作是這樣做的?我們數(shù)據(jù)不管是基準(zhǔn)數(shù)據(jù),還是增量數(shù)據(jù)都有一個(gè)版本號(hào)。比如最開始的時(shí)候,這個(gè)基準(zhǔn)數(shù)據(jù)版本是1,我對(duì)應(yīng)于這個(gè)基準(zhǔn)數(shù)據(jù)這個(gè)增量數(shù)據(jù)版本是2,要開始合并了,合并的時(shí)候就把這部分?jǐn)?shù)據(jù)給RootServer發(fā)一個(gè)命令,凍結(jié)之后就不能改了,如果凍結(jié)這個(gè)點(diǎn)做完之后又有新的數(shù)據(jù)來了,這就是一個(gè)新的版本,這個(gè)點(diǎn)做完之后,就通知所有ChunkServer,我現(xiàn)在數(shù)據(jù)是1恩,我要所有版本等于2的數(shù)據(jù),你把那部分?jǐn)?shù)據(jù)給我,這個(gè)過程我們叫做基準(zhǔn)數(shù)據(jù)更新,這個(gè)更新,所有ChunkServer,去RootServer去要增量數(shù)據(jù),將整個(gè)過程做完之后,就可以把這部分的增量數(shù)據(jù)從內(nèi)存中釋放掉了。
所以,會(huì)存在一個(gè)時(shí)刻,一個(gè)很多副本,同一個(gè)版本數(shù)據(jù)必須是一模一樣的。這樣一個(gè)單點(diǎn)結(jié)構(gòu),肯定就會(huì)有質(zhì)疑,你的性能是怎樣的,UpdataServer是用一個(gè)內(nèi)存實(shí)現(xiàn),不考慮后面要寫日志,我們使用Copy的技術(shù),你在修改的時(shí)候先拷貝出來,這個(gè)B樹有一個(gè)特點(diǎn),你的一些讀操作?;趦?nèi)存實(shí)現(xiàn),我們先不考慮為了數(shù)據(jù)持久性要寫日志,光這個(gè)內(nèi)存實(shí)現(xiàn),他的性能是每秒鐘10萬次修改,每秒鐘100萬次讀操作。但是這樣肯定是不夠的,你每次修改之后,都要給用戶返回成功之前要保證這個(gè)數(shù)據(jù)實(shí)際上已經(jīng)持久化了,我們實(shí)際上是寫了一個(gè)操作做的事情先記到日志里面,然后去做修改操作,修改操作做完了,這個(gè)日志要同時(shí)傳過去,那邊也寫到紙板上我們才說成功了。不需要每一個(gè)操作日志都寫,因?yàn)榇疟P有限,你等10毫米可以拒絕幾十個(gè),幾百個(gè)請(qǐng)求了,打包成一個(gè)日志寫進(jìn)去,這個(gè)技術(shù)叫做Group commit,下面用的有RAID卡,RAID卡是帶電池的,一旦寫給他,從軟件角度來看放心就可以了。
剛才說到所有讀操作,每次讀操作都要經(jīng)過UpdateServer,即使你數(shù)據(jù)沒有了,沒有一個(gè)更新數(shù)據(jù)也要去問他,這對(duì)網(wǎng)絡(luò)帶寬是一個(gè)很大壓力。我們現(xiàn)在UpdateServer用的是萬兆網(wǎng)卡,所有修改都是放在內(nèi)存里面,如果內(nèi)存放不下怎么辦,我們會(huì)轉(zhuǎn)儲(chǔ)到本地SSD里面去。我們磁盤有兩種,存儲(chǔ)有兩種系統(tǒng),一個(gè)是磁盤,一個(gè)是SSD,SSD是把內(nèi)存整個(gè)結(jié)合進(jìn)去,如果有了讀操作落到這部分,因此宕不出去內(nèi)容里面,就從SSD上去讀,SSD可以提供很好的隨機(jī)讀的性能。
如果是單機(jī)部署的話,每一個(gè)數(shù)據(jù)是有三個(gè)輔本,我們實(shí)現(xiàn)了多機(jī)群部署,個(gè)集群可以提供位于不同機(jī)房,這兩個(gè)機(jī)房有一個(gè)是同城,還有異地做災(zāi)備的,如果同城兩個(gè)之間需要同步,每一個(gè)機(jī)房里面只需要保存兩個(gè)副本就可以了,如果有遠(yuǎn)程的災(zāi)備就是2+2+2的模式。所有數(shù)據(jù)都是有校驗(yàn),一個(gè)重要特性,因?yàn)槲覀兿到y(tǒng)初期可能會(huì)頻繁有升級(jí),我們現(xiàn)在已經(jīng)可以做到升級(jí),或者你要切換的時(shí)候不停機(jī)。如果一個(gè)應(yīng)用他同時(shí)部署兩個(gè)集群,那么他可以先把一個(gè)停掉,把另外一個(gè)變成主,然后你把那邊升級(jí)好之后再接上來,這樣倒一下就可以把整個(gè)系統(tǒng)升級(jí)了。
收藏夾應(yīng)用在半年多前上線,我剛才給大家講的收藏信息表,里面有65億條記錄,每天有1.2億次訪問,我們平均響應(yīng)時(shí)間大約在80毫秒左右。在使用QceanBase之前,我們是有16臺(tái)機(jī)器,現(xiàn)在已經(jīng)降到,使用QceanBase之后只需要6臺(tái)機(jī)器就可以支撐同樣的訪問量。這是我們實(shí)際運(yùn)行的一個(gè)監(jiān)控圖,給大家一個(gè)直觀的概念,這是每一天訪問量,大概在晚上有一個(gè)高峰,在高峰的時(shí)候大概700,800左右。這是查詢,這是平均響應(yīng)時(shí)間,可以看到平均響應(yīng)時(shí)間是在80毫秒左右。
剛剛結(jié)束的世紀(jì)光棍節(jié),我們叫雙十一網(wǎng)購(gòu)狂歡節(jié),就在那一天,我們整個(gè)收藏夾總庫(kù)量是170億條,一天有1.85億次更新操作,查詢有兩種,scan是順序讀,get可以看成一個(gè)隨機(jī)讀,分別達(dá)到2.3億和2.9億次。峰值QPS是9000+5000,一共14000次。
下一步工作里面第一個(gè)是SSD,最新數(shù)據(jù)可以號(hào)稱達(dá)到100萬次隨機(jī)讀。ChunkServer有一個(gè)特點(diǎn),沒有隨機(jī)寫,對(duì)于SSD來說,表面上比較怕隨機(jī)寫,我們ChunkServer沒有隨機(jī)寫,我們把這個(gè)也改成ChunkServer使用SSD單機(jī)QPS可以達(dá)到5萬次,雖然你多花了一點(diǎn)錢,但是你的機(jī)器數(shù)降下來了。使用SSD之后,我們由14臺(tái)機(jī)器變成6臺(tái)。
另外一塊是OLAP,從我們系統(tǒng)角度來看,剛才已經(jīng)給大家說了,在收藏夾里面主要是UpdataServer,OLAP對(duì)于UpdateServer沒有多大差別,但是有一些BI用的比較復(fù)雜的查詢,實(shí)際上現(xiàn)在我們已經(jīng)實(shí)現(xiàn)了,現(xiàn)在基于這么一個(gè)SQL的依據(jù),SELECT,FROM,WHERE,還有GROUP BY聚合請(qǐng)求,還有一個(gè)符合鏈,都是已經(jīng)支持的。這部分支持主要是剛才講的那四個(gè)方面功能點(diǎn),對(duì)于其他模塊沒有什么影響。
比如現(xiàn)在收藏夾里面都有很多數(shù)據(jù),要從線上數(shù)據(jù)庫(kù)里面導(dǎo)出,導(dǎo)出Hadoop機(jī)群里面做計(jì)算,結(jié)算完之后再倒回來,對(duì)于數(shù)據(jù)倒來倒去是非常耗帶寬,可能會(huì)影響其他利用。我們希望能不能把MapReduce和我們本身QceanBase結(jié)合到一起。做法其實(shí)很簡(jiǎn)單,首先Hadoop機(jī)群本身和QceanBase處于一個(gè)機(jī)群,另外去定制MapReduce程序的輸入輸出,這個(gè)已經(jīng)在開發(fā)中了。
QceanBase現(xiàn)在不足,主要是功能上的一些問題。比如不支持,只實(shí)現(xiàn)部分的join,沒有實(shí)現(xiàn)一些高級(jí)特性。比如說一個(gè)缺陷,不支持輔助索引,這是很多問題。我們做QceanBase是一個(gè)非常開放的心態(tài),我們所有代碼都是開源的,包括設(shè)計(jì)文檔,我們每次有一個(gè)新的版本,在內(nèi)部升級(jí)完之后,都是把它立即更新到開源的網(wǎng)站上去。在淘蝌蚪上還有很多淘寶核心系統(tǒng)部做的很多系統(tǒng),比如存儲(chǔ)圖片還有,還有一些其他服務(wù)。
我們總結(jié)一下,今天講的兩個(gè)問題,第一希望大家記住淘寶的離線數(shù)據(jù)有39T,圖片有2700T,商品有14億+8億,下線的和在線的。QceanBase最大的特點(diǎn)是把基準(zhǔn)數(shù)據(jù)和增量數(shù)據(jù)分開,把讀事務(wù)和寫事務(wù)分開,這是QceanBase最大的特點(diǎn),謝謝大家。
總結(jié)
以上是生活随笔為你收集整理的淘宝杨志丰:OceanBase--淘宝结构化大数据解决之道的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于PredictionIO的推荐引擎打
- 下一篇: 亚马逊给创业者5条建议:开会杜绝PPT