OceanBase是什么
OceanBase是一個(gè)支持海量數(shù)據(jù)的高性能數(shù)據(jù)庫系統(tǒng),實(shí)現(xiàn)了數(shù)千億條記錄、數(shù)百TB數(shù)據(jù)上的跨行跨表事務(wù),由淘寶核心系統(tǒng)研發(fā)部、運(yùn)維、DBA、廣告、應(yīng)用研發(fā)等部門共同完成。
OceanBase解決什么問題
許多公司的核心資產(chǎn)是各種各樣的商業(yè)數(shù)據(jù),例如淘寶的商品、交易、訂單、購物愛好等等,這些數(shù)據(jù)通常是結(jié)構(gòu)化的,并且數(shù)據(jù)之間存在各種各樣的關(guān)聯(lián),傳統(tǒng)的關(guān)系數(shù)據(jù)庫曾經(jīng)是這些數(shù)據(jù)的最佳載體。然而,隨著業(yè)務(wù)的快速發(fā)展,這些數(shù)據(jù)急劇膨脹,記錄數(shù)從幾千萬條增加到數(shù)十億條,數(shù)據(jù)量從百GB增加到數(shù)TB,未來還可能增加到數(shù)千億條和數(shù)百TB,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫已經(jīng)無法承擔(dān)如此海量的數(shù)據(jù)。許多公司,尤其是互聯(lián)網(wǎng)公司,正在探索各自的解決之路。
一個(gè)思路是通過類似map-reduce模型進(jìn)行處理,例如Google的 GFS+MapReduce以及Hadoop的HDFS+MapReduce。這類方式為離線數(shù)據(jù)處理及挖掘提供了一個(gè)不錯(cuò)的選擇,但難以滿足在線實(shí)時(shí)服務(wù)系統(tǒng)的需求。
另一個(gè)思路降低一致性來換取數(shù)據(jù)規(guī)模,例如BigTable和HBase實(shí)現(xiàn)了單行事務(wù)的海量數(shù)據(jù)的存儲(chǔ)訪問,Amazon的Dynamo以及由Facebook開源的Cassandra實(shí)現(xiàn)了最終一致性,這類系統(tǒng)常常被稱為NoSQL數(shù)據(jù)庫,它們?cè)谝恍┚W(wǎng)站(例如Google,F(xiàn)acebook和Twitter等)得到了應(yīng)用。
一個(gè)新近出現(xiàn)的系統(tǒng)是Google的Percolator,它在GFS/BigTable基礎(chǔ)上實(shí)現(xiàn)了海量數(shù)據(jù)(PB級(jí))的分布式事務(wù)。由于Google并沒有把Percolator開源,其他公司無法使用它,此外事務(wù)響應(yīng)時(shí)間偏長(平均2s-5s)以及單機(jī)效率低(Google聲稱Percolator的效率大致為DBMS的1/30)也限制了Percolator的使用(更多信息,請(qǐng)參見Daniel Peng和Frank Dabek的“Large-scale Incremental Processing Using Distributed Transactions and Notifications”一文)。
從Eric Brewer教授的CAP(一致性C: Consistency, 可用性A: Availability,分區(qū)容錯(cuò)性P: Tolerance of network Partition)理論來看,第一種思路重點(diǎn)在于支持CP特性,第二種思路重點(diǎn)在于支持AP特性。作為電子商務(wù)企業(yè),淘寶和其他公司的業(yè)務(wù)對(duì)一致性和可用性的要求高于分區(qū)容錯(cuò)性,數(shù)據(jù)總量龐大且逐步增加,單位時(shí)間內(nèi)的數(shù)據(jù)更新量并不大,但實(shí)時(shí)性要求很高。這些需求建議我們提供一套更加偏重于支持CA特性的系統(tǒng),同時(shí)兼顧可分區(qū)性,并且在實(shí)時(shí)性、成本、性能等方面表現(xiàn)良好。
OceanBase的一些基本概念
OceanBase邏輯架構(gòu)簡(jiǎn)圖
主鍵
row key,也稱為primary key,類似于DBMS的主鍵,與DBMS不同的是,OceanBase的主鍵總是二進(jìn)制字符串(binary string),但可以有某種結(jié)構(gòu)。OceanBase以主鍵為順序存放表格數(shù)據(jù)
sstable
一種數(shù)據(jù)存儲(chǔ)格式,OceanBase用來存儲(chǔ)一個(gè)或幾個(gè)表的一段按主鍵連續(xù)的數(shù)據(jù)
tablet
一個(gè)表按主鍵劃分的一個(gè)(前開后閉的)范圍,通常包含一個(gè)或幾個(gè)sstable,一個(gè)tablet的數(shù)據(jù)量通常在256MB左右
基準(zhǔn)數(shù)據(jù)和動(dòng)態(tài)數(shù)據(jù)
OceanBase以增量方式記錄一段時(shí)間內(nèi)的表格數(shù)據(jù)的增刪改,從而保持著表格主體數(shù)據(jù)在一段時(shí)間內(nèi)相對(duì)穩(wěn)定,其中增刪改的數(shù)據(jù)稱為動(dòng)態(tài)數(shù)據(jù)(通常在內(nèi)存,也稱為內(nèi)存表),而一段時(shí)間內(nèi)相對(duì)穩(wěn)定的主體數(shù)據(jù)稱為基準(zhǔn)數(shù)據(jù),基準(zhǔn)數(shù)據(jù)和轉(zhuǎn)儲(chǔ)后(保存到SSD固態(tài)盤或磁盤)的動(dòng)態(tài)數(shù)據(jù)以sstable格式存儲(chǔ)
ChunkServer
保存基準(zhǔn)數(shù)據(jù)的服務(wù)器,通常是多臺(tái),為了避免軟件硬件故障導(dǎo)致的服務(wù)中斷,同一份基準(zhǔn)數(shù)據(jù)通常保存了3份并存儲(chǔ)在不同ChunkServer上
UpdateServer
保存動(dòng)態(tài)數(shù)據(jù)的服務(wù)器,一般是單臺(tái)服務(wù)器。為了避免軟件硬件故障導(dǎo)致的服務(wù)中斷,UpdateServer記錄commit log并通常使用雙機(jī)熱備
MergeServer
進(jìn)行靜態(tài)動(dòng)態(tài)數(shù)據(jù)合并的服務(wù)器,常常與ChunkServer共用一臺(tái)物理服務(wù)器。MergeServer使得用戶能夠訪問到完整的最新的數(shù)據(jù)
RootServer
配置服務(wù)器,一般是單臺(tái)服務(wù)器。為了避免軟件硬件故障導(dǎo)致的服務(wù)中斷,RootServer記錄commit log并通常采用雙機(jī)熱備。由于RootServer負(fù)載一般都很輕,所以它常常與UpdateServer共用物理機(jī)器
凍結(jié)
指動(dòng)態(tài)數(shù)據(jù)(也稱為內(nèi)存表)的更新到一定時(shí)間或者數(shù)據(jù)量達(dá)到一定規(guī)模后,OceanBase停止該塊動(dòng)態(tài)數(shù)據(jù)的修改,后續(xù)的更新寫入新的動(dòng)態(tài)數(shù)據(jù)塊(即新的內(nèi)存表),舊的動(dòng)態(tài)數(shù)據(jù)塊不再修改,這個(gè)過程稱為凍結(jié)
轉(zhuǎn)儲(chǔ)
出于節(jié)省內(nèi)存或者持久化等原因?qū)⒁粋€(gè)凍結(jié)的動(dòng)態(tài)數(shù)據(jù)塊(內(nèi)存表)持久化(轉(zhuǎn)化為sstable并保存到SSD固態(tài)盤貨磁盤上)的過程
數(shù)據(jù)合并(merge)
查詢時(shí),查詢項(xiàng)的基準(zhǔn)數(shù)據(jù)與其動(dòng)態(tài)數(shù)據(jù)(即增刪改操作)合并以得到該數(shù)據(jù)項(xiàng)的最新結(jié)果的過程。此外,把舊的基準(zhǔn)數(shù)據(jù)與凍結(jié)的動(dòng)態(tài)數(shù)據(jù)進(jìn)行合并生成新的基準(zhǔn)數(shù)據(jù)的過程也稱為數(shù)據(jù)合并
聯(lián)表(join)
一張表與另一張或幾表連接的關(guān)系,類似于DBMS的自然連接
COW
Copy on Write的縮寫,在OceanBase中特指BTree在更新時(shí)復(fù)制數(shù)據(jù)備份寫入,避免系統(tǒng)鎖的技術(shù)手段
OceanBase有什么特點(diǎn)
OceanBase設(shè)計(jì)和實(shí)現(xiàn)的時(shí)候暫時(shí)摒棄了許多不需要的DBMS的功能,例如臨時(shí)表,視圖(view),SQL語言支持等,這使得研發(fā)團(tuán)隊(duì)能夠把有限的資源集中到關(guān)鍵的功能上,例如數(shù)據(jù)一致性、高性能的跨表事務(wù)、范圍查詢、join等。
雖然數(shù)據(jù)總量比較大,但跟許多行業(yè)一樣,淘寶業(yè)務(wù)一段時(shí)間(例如小時(shí)或天)內(nèi)數(shù)據(jù)的增刪改是有限的(通常一天不超過幾千萬次到幾億次),根據(jù)這個(gè)特點(diǎn),OceanBase把一段時(shí)間內(nèi)的增刪改等修改操作以增量形式記錄下來(稱之為動(dòng)態(tài)數(shù)據(jù),通常保存在內(nèi)存中),這樣也使得了主體數(shù)據(jù)在一段時(shí)間內(nèi)保持了相對(duì)穩(wěn)定(稱之為基準(zhǔn)數(shù)據(jù))。
由于動(dòng)態(tài)數(shù)據(jù)相對(duì)較小,通常情況下,OceanBase把它保存在獨(dú)立的服務(wù)器UpdateServer的內(nèi)存中。以內(nèi)存保存增刪改記錄極大地提高了系統(tǒng)寫事務(wù)的性能。此外,假如每條修改平均消耗100 Bytes,那么10GB內(nèi)存可以記錄100M(即1億)條修改,且擴(kuò)充UpdateServer內(nèi)存即增加了內(nèi)存中容納的修改量。不僅如此,由于凍結(jié)后的內(nèi)存表不再修改,它也可以轉(zhuǎn)換成sstable格式并保存到SSD固態(tài)盤或磁盤上。轉(zhuǎn)儲(chǔ)到SSD固態(tài)盤后所占內(nèi)存即可釋放,并仍然可以提供較高性能的讀服務(wù),這也緩解了極端情況下UpdateServer的內(nèi)存需求。為了應(yīng)對(duì)機(jī)器故障,動(dòng)態(tài)數(shù)據(jù)服務(wù)器UpdateServer寫commit log并采取雙機(jī)(甚至多機(jī))熱備。由于UpdateServer的主備機(jī)是同步的,因此備機(jī)也可同時(shí)提供讀服務(wù)。
因?yàn)榛鶞?zhǔn)數(shù)據(jù)相對(duì)穩(wěn)定,OceanBase把它按照主鍵(primary key,也稱為row key)分段(即tablet)后保存多個(gè)副本(一般是3個(gè))到多臺(tái)機(jī)器(ChunkServer)上,避免了單臺(tái)機(jī)器故障導(dǎo)致的服務(wù)中斷,多個(gè)副本也提升了系統(tǒng)服務(wù)能力。單個(gè)tablet的尺寸可以根據(jù)應(yīng)用數(shù)據(jù)特點(diǎn)進(jìn)行配置,相對(duì)配置過小的tablet會(huì)合并,過大的tablet則會(huì)分裂。
由于tablet按主鍵分塊連續(xù)存放,因此OceanBase按主鍵的范圍查詢對(duì)應(yīng)著連續(xù)的磁盤讀,十分高效。
對(duì)于已經(jīng)凍結(jié)/轉(zhuǎn)儲(chǔ)的動(dòng)態(tài)數(shù)據(jù),OceanBase的ChunkServer會(huì)在自己不是太繁忙的時(shí)候啟動(dòng)基準(zhǔn)數(shù)據(jù)與凍結(jié)/轉(zhuǎn)儲(chǔ)內(nèi)存表的合并,并生成新的基準(zhǔn)數(shù)據(jù)。這種合并過程其實(shí)是一種范圍查詢,是一串連續(xù)的磁盤讀和連續(xù)的磁盤寫,也是很高效的。
傳統(tǒng)DBMS提供了強(qiáng)大的事務(wù)性、良好的一致性和很短的查詢修改響應(yīng)時(shí)間,但數(shù)據(jù)規(guī)模受到嚴(yán)重制約,缺乏擴(kuò)展性;現(xiàn)代云計(jì)算提供了極大的數(shù)據(jù)規(guī)模、良好的擴(kuò)展性,但缺乏跨行跨表事務(wù)、數(shù)據(jù)一致性也較弱、查詢修改響應(yīng)時(shí)間通常也較長,OceanBase的設(shè)計(jì)和實(shí)現(xiàn)融合了二者的優(yōu)勢(shì):
- UpdateServer:類似于DBMS中的DB角色,提供跨行跨表事務(wù)和很短的查詢修改的響應(yīng)時(shí)間以及良好的一致性
- ChunkServer:類似于云計(jì)算中的工作機(jī)(如GFS的chunk server),具有數(shù)據(jù)多副本(通常是3)、中等規(guī)模數(shù)據(jù)粒度(tablet大小約256MB)、自動(dòng)負(fù)載平衡、宕機(jī)恢復(fù)、機(jī)器plug and play等特點(diǎn),系統(tǒng)容量及性能可隨時(shí)擴(kuò)展
- MergeServer:結(jié)合ChunkServer和UpdateServer,獲得最新數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)一致性
- RootServer:類似于云計(jì)算中的主控機(jī)(如GFS master),進(jìn)行機(jī)器故障檢測(cè)、負(fù)載平衡計(jì)算、負(fù)載遷移調(diào)度等
上述的DBMS和云計(jì)算技術(shù)的優(yōu)勢(shì)互補(bǔ)使得OceanBase既具有傳統(tǒng)DBMS的跨行跨表事務(wù)、數(shù)據(jù)的強(qiáng)一致性以及很短的查詢修改響應(yīng)時(shí)間,還有云計(jì)算的海量數(shù)據(jù)管理能力、自動(dòng)故障恢復(fù)、自動(dòng)負(fù)載平衡以及良好的擴(kuò)展性。
OceanBase現(xiàn)在有什么應(yīng)用
OceanBase現(xiàn)在已經(jīng)應(yīng)用于淘寶收藏夾,用于存儲(chǔ)淘寶用戶收藏條目和具體的商品、店鋪信息,每天支持4~5千萬的更新操作。后續(xù)將陸續(xù)推廣至其他淘寶應(yīng)用。
根據(jù)規(guī)劃,OceanBase將于2011年5月份進(jìn)行開源,希望能夠和大家一起,為互聯(lián)網(wǎng)數(shù)據(jù)服務(wù)提供新的選擇。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
