云計算背后的秘密(3)-BigTable
由于在Google的數據中心存儲PB級以上的非關系型數據時候,比如網頁和地理數據等,為了更好地存儲和利用這些數據,Google開發了一套數據庫系統,名為“BigTable”。
技術概覽
從技術來講,BigTable不是一個傳統的關系型的數據庫,也不支持類似關聯(join)這樣高級的SQL操作,取而代之的是多級映射的數據結構,并支持大規模數據處理、高容錯性和自我管理等特性,提供PB級的存儲能力,使用結構化的文件來存儲數據,并整個集群每秒可處理數百萬的讀寫操作。
什么是多級映射的數據結構呢?就是一個稀疏的、多維的和排序的Map,每個Cell(單元格)由行關鍵字、列關鍵字和時間戳來進行三維定位.Cell的內容本身就是一個字符串,比如,存儲每個網頁的內容。在下圖中, 反向的URL “com.cnn.www”是這行的關鍵字,“contents”這列存儲了多個版本的網頁內容,每個版本都有一個時間戳。BigTable還提供一個用于將多個相似的列整合至一起的Column Family(列組)機制,比如,下面“anchor”這個Column Family就有“anchor: cnnsi.com”和“anchhor:my.look.ca”這個兩個列。通過Column Family這個概念,使得表可以輕松地橫向擴展。
▲圖1. BigTable數據模型圖
在結構上,BigTable基于GFS分布式文件系統和Chubby分布式鎖服務。BigTable主要分為兩部分:其一是Master節點,用來處理元數據相關的操作并支持負載均衡。其二是Tablet節點,主要用于存儲數據庫的分片tablet,并提供相應的數據訪問,同時tablet是基于名為SSTable的格式,對壓縮有很好的支持。下圖為其具體的架構圖:
▲圖2. BigTable架構圖
相關產品
和之前介紹的MapReduce和GFS一樣,BigTable在開源界也有很多類似的產品,***的兩個莫過于屬于Hadoop系列的Hbase和來自于Facebook的Cassandra。Hbase的特色在于其完全繼承了BigTable的設計,所以它在MapReduce和海量數據存儲這兩方面支持地非常好,而Cassandra的則更傾向于成為全功能型數據庫。除了這兩個產品之外,我個人也設計一款類BigTable的數據庫,名為YunTable,意為“云時代的BigTable”,它的目標是做一個BigTable的精簡版,并使其更適合云環境,現在已經發布其0.8版,本已基本實現BigTable的基本功能,官方站點是http://code.google.com/p/yuntable/,希望大家能多多關注。
實際用例
BigTable正在為Google六十多種產品和項目提供存儲和獲取結構化數據的支撐平臺,其中包括有Google Print, Orkut,Google Maps,Google Earth和Blogger等,而且在Google內部至少運行著500個BigTable集群。
下一代BigTable
隨著Google內部服務對需求的不斷提高和技術的不斷地發展,導致原先的BigTable已經無法滿足用戶的需求,而Google也正在開發下一代BigTable,名為“Spanner(扳手)”,它主要有下面這些BigTable所無法支持的特性:
1. 支持多種數據結構,比如table,familie,group和coprocessor等。
2. 基于分層目錄和行的細粒度的復制和權限管理。
3. 支持跨數據中心的強一致性和弱一致性控制。
4. 基于Paxos算法的強一致性副本同步,并支持分布式事務。
5. 提供許多自動化操作。
6. 強大的擴展能力,能支持百萬臺服務器級別的集群。
7. 用戶可以自定義諸如延遲和復制次數等重要參數以適應不同的需求。
作者簡介
吳朱華,之前在IBM中國研究院參與過多個云計算產品的開發工作,現在專注于YunTable和YunEngine的研發,并即將發表《剖析云計算》一書,敬請期待。
【編輯推薦】