http://www.lupaworld.com/article-213231-1.html
OceanBase是一個支援海量資料的高效能分散式資料庫系統,實現了數千億條記錄、數百TB資料上的跨行跨表事務,由淘寶核心系統研發部、營運、DBA、廣告、應用研發等部門共同完成。
OceanBase解決什麼問題
許多公司的核心資產是各種各樣的商業資料,例如淘寶的商品、交易、訂單、購物愛好等等,這些資料通常是結構化的,並且資料之間存在各種各樣的關聯,傳統的關聯式資料庫曾經是這些資料的最佳載體。然而,隨著業務的快速發展,這些資料急劇膨脹,記錄數從幾千萬條增加到數十億條,資料量從百GB增加到數TB,未來還可能增加到數千億條和數百TB,傳統的關係型資料庫已經無法承擔如此海量的資料。OceanBase解決不斷增加的結構化資料存放區與查詢的問題。
從Eric Brewer教授的CAP(一致性C: Consistency, 可用性A: Availability,分區容錯性P: Tolerance of network Partition)理論角度分析,作為電子商務企業,淘寶和其他公司的業務對一致性和可用性的要求高於分區容錯性,資料特徵是資料總量龐大且逐步增加,單位時間內的資料更新量並不大,但即時性要求很高。這就要求我們提供一套更加偏重於支援CA特性的系統,同時兼顧可分區性,並且在即時性、成本、效能等方面表現良好。
OceanBase的架構
OceanBase的邏輯架構簡圖
▲
OceanBase架構的一些基本概念
主鍵
row key,也稱為primary key,類似於DBMS的主鍵,與DBMS不同的是,OceanBase的主鍵總是二進位字串(binary string),但可以有某種結構。OceanBase以主鍵為順序存放表格式資料
sstable
一種資料存放區格式,OceanBase用來儲存一個或幾個表的一段按主鍵連續的資料
tablet
一個表按主鍵劃分的一個(前開後閉的)範圍,通常包含一個或幾個sstable,一個tablet的資料量通常在256MB左右
基準資料和動態資料
OceanBase以增量方式記錄一段時間內的表格式資料的增刪改,從而保持著表格主體資料在一段時間內相對穩定,其中增刪改的資料稱為動態資料(通常在記憶體,也稱為記憶體表),而一段時間內相對穩定的主體資料稱為基準資料,基準資料和轉儲後(儲存到SSD固態盤或磁碟)的動態資料以sstable格式儲存
ChunkServer
儲存基準資料的伺服器,通常是多台,為了避免軟體硬體故障導致的服務中斷,同一份基準資料通常儲存了3份並儲存在不同ChunkServer上
UpdateServer
儲存動態資料的伺服器,一般是單台伺服器。為了避免軟體硬體故障導致的服務中斷,UpdateServer記錄commit log並通常使用雙機熱備
MergeServer
進行靜態動態資料合并的伺服器,常常與ChunkServer共用一台物理伺服器。MergeServer使得使用者能夠訪問到完整的最新的資料
RootServer
設定管理員,一般是單台伺服器。為了避免軟體硬體故障導致的服務中斷,RootServer記錄commit log並通常採用雙機熱備。由於RootServer負載一般都很輕,所以它常常與UpdateServer共用物理機器
凍結
指動態資料(也稱為記憶體表)的更新到一定時間或者資料量達到一定規模後,OceanBase停止該塊動態資料的修改,後續的更新寫入新的動態資料塊(即新的記憶體表),舊的動態資料塊不再修改,這個過程稱為凍結
轉儲
出於節省記憶體或者持久化等原因將一個凍結的動態資料塊(記憶體表)持久化(轉化為sstable並儲存到SSD固態盤或磁碟上)的過程
資料合併(merge)
查詢時,查詢項的基準資料與其動態資料(即增刪改操作)合并以得到該資料項目的最新結果的過程。此外,把舊的基準資料與凍結的動態資料進行合并產生新的基準資料的過程也稱為資料合併
聯表(join)
一張表與另一張或幾張表基於主鍵的左串連關係,類似於DBMS的自然串連
COW
Copy on Write的縮寫,在OceanBase中特指BTree在更新時複製資料備份寫入,避免系統鎖的技術手段
OceanBase的特點
OceanBase功能
OceanBase設計和實現的時候暫時摒棄了不緊急的DBMS的功能,例如暫存資料表,視圖(view),研發團隊把有限的資源集中到關鍵點上,當前OceanBase主要解決資料更新一致性、高效能的跨表讀事務、範圍查詢、join、資料全量及增量dump、批量資料匯入。
OceanBase資料訪問特點
雖然資料總量比較大,但跟許多行業一樣,淘寶業務一段時間(例如小時或天)內資料的增刪改是有限的(通常一天不超過幾千萬次到幾億次),根據這個特點,OceanBase把一段時間內的增刪改等修改操作以增量形式記錄下來(稱之為動態資料,通常儲存在記憶體中),這樣也使得了主體資料在一段時間內保持了相對穩定(稱之為基準資料)。
由於動態資料相對較小,通常情況下,OceanBase把它儲存在獨立的伺服器UpdateServer的記憶體中。以記憶體儲存增刪改記錄極大地提高了系統寫事務的效能。此外,假如每條修改平均消耗100 Bytes,那麼10GB記憶體可以記錄100M(即1億)條修改,且擴充UpdateServer記憶體即增加了記憶體中容納的修改量。不僅如此,由於凍結後的記憶體表不再修改,它也可以轉換成sstable格式並儲存到SSD固態盤或磁碟上。轉儲到SSD固態盤後所佔記憶體即可釋放,並仍然可以提供較高效能的讀服務,這也緩解了極端情況下UpdateServer的記憶體需求。為了應對機器故障,動態資料伺服器UpdateServer寫commit log並採取雙機(乃至多機)熱備。由於UpdateServer的主備機是同步的,因此備機也可同時提供讀服務。
因為基準資料相對穩定,OceanBase把它按照主鍵(primary key,也稱為row key)分段(即tablet)後儲存多個副本(一般是3個)到多台機器(ChunkServer)上,避免了單台機器故障導致的服務中斷,多個副本也提升了系統服務能力。單個tablet的尺寸可以根據應用資料特點進行配置,相對配置過小的tablet會合并,過大的tablet則會分裂。
由於tablet按主鍵分塊連續存放,因此OceanBase按主鍵的範圍查詢對應著連續的磁碟讀,十分高效。
對於已經凍結/轉儲的動態資料,OceanBase的ChunkServer會在自己不是太繁忙的時候啟動基準資料與凍結/轉儲記憶體表的合并,並產生新的基準資料。這種合并過程其實是一種範圍查詢,是一串聯續的磁碟讀和連續的磁碟寫,也是很高效的。
傳統DBMS提供了強大的事務性、良好的一致性和很短的查詢修改回應時間,但資料規模受到嚴重製約,缺乏擴充性;現代雲端運算提供了極大的資料規模、良好的擴充性,但缺乏跨行跨表事務、資料一致性也較弱、查詢修改回應時間通常也較長,OceanBase的設計和實現融合了二者的優勢:
--------------------------------------------------------------------------------
UpdateServer:類似於DBMS中的DB角色,提供跨行跨表事務和很短的查詢修改的回應時間以及良好的一致性。
ChunkServer:類似於雲端運算中的工作機(如GFS的chunk server),具有資料多副本(通常是3)、中等規模資料粒度(tablet大小約256MB)、自動Server Load Balancer、宕機恢複、機器plug and play等特點,系統容量及效能可隨時擴充。
MergeServer:結合ChunkServer和UpdateServer,獲得最新資料,實現資料一致性。
RootServer:類似於雲端運算中的主控機(如GFS master),進行機器故障檢測、Server Load Balancer計算、負載遷移調度等。
--------------------------------------------------------------------------------
上述的DBMS和雲端運算技術的優勢互補使得OceanBase既具有傳統DBMS的跨行跨表事務、資料的強一致性以及很短的查詢修改回應時間,還有雲端運算的海量資料管理能力、自動故障恢複、自動Server Load Balancer以及良好的擴充性。
OceanBase當前在淘寶的應用
OceanBase現在已經應用於淘寶收藏夾,用於儲存淘寶使用者收藏條目和具體的商品、店鋪資訊,每天支援4~5千萬的更新操作。等待上線的應用還包括CTU、SNS等,每天更新超過20億,更新資料量超過2.5TB,並會逐步在淘寶內部推廣,也期待外部合作者。
主要的效能資料
測試軟硬體環境
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)
Intel(R) Xeon(R) CPU E5520 @ 2.27GH
ChunkServer & MergeServer:Memory 16GB Disk 300GB SAS*10 NO Raid
UpdateServer & RootServer:Memory 48GB Disk 300GB SAS*6 Raid1
測試環境部署簡圖
▲
測試資料規模
21億條資料,基準資料3備份。
測試Schema
兩張表,其中表1中有21列,表2中11列。
其中表1中的11列和表2中的11列存在join關係。
單條記錄大小為500位元組。
測試效能曲線圖
Range資料查詢
▲
單條資料查詢
▲
當壓力最大時,ChunkServer單台輸出資料90MB/S,已經接近了千兆網卡的極限
更新資料
▲