我們來看一下Facebook處理P級數(shù)據(jù)的兩個案例:圖片存儲和數(shù)據(jù)倉庫
Facebook目前是世界上最大的圖片共享網(wǎng)站,用戶上傳了超過20億的圖片,每張圖片會被處理成四種分辨率,所以總的存儲在80億以上。為了存儲這些圖片,圖片存儲方案經(jīng)過了三個階段的改進(jìn)
第一階段,使用商用的NFS做文件存儲,龐大的圖片數(shù)量產(chǎn)生了大量的元數(shù)據(jù),遠(yuǎn)遠(yuǎn)超過了NFS的緩存能力,導(dǎo)致I/O居高不下
第二階段,建立自己的緩存層,將較小的圖片(小頭像)放入叫做“Cachr”的緩存系統(tǒng)中,同時,對NFS文件句柄做緩存
第三階段,新的圖片體系:Haystack。Haystack將服務(wù)層和存儲層合并為一個物理層,實(shí)現(xiàn)了一個基于HTTP的圖片服務(wù)器,把圖片存儲在名為Haystack的通用對象存儲中,目標(biāo)是減少圖片讀取時不必要的元數(shù)據(jù)讀取操作。Haystack圖片體系在功能上可以分為:HTTP Server,Photo Store,Haystack Object Store,F(xiàn)ileSystem,Storage幾個部分。
Storage是普通的2U存儲刀片服務(wù)器,有超過12個1TB的SATA硬盤,采用RAID6做冗余。FileSystem采用XFS文件系統(tǒng)。
Haystack Object Store采用日志模式,只支持追加操作。存儲文件由連續(xù)的Needle組成,每個Needle代表一個對象。用于做圖片存儲時,包含了圖片的實(shí)際數(shù)據(jù)以及header和footer。Needle可以通過<Offset, Key, Alternative Key, Cookie>唯一標(biāo)示
Haystack Store 還包括一個索引文件,每個Needle都在索引文件中有對應(yīng)的索引記錄,且順序一致。索引文件提供了查找Haystack store file中的needle所必須的最小的metedata。索引文件可以通過haystack store file重建。索引文件的大小一般小于store文件的1%。
Photo Store啟動時會將索引文件加載到內(nèi)存中重新組織,圖片是通過一個64位的Key在內(nèi)存中定位的。獲取圖片的Offset和size后就可以在Haystack Object Store中讀取實(shí)際的圖片數(shù)據(jù)了
HTTP框架是使用了libevent提供的evhttp server。使用多線程,同一時間內(nèi),每個線程能夠處理一個HTTP請求。因?yàn)橹饕?fù)載在I/O操作,因此HTTP服務(wù)器的性能并不是至關(guān)重要的。
Facebook通過Scribe收集了大量的數(shù)據(jù)日志,每天的增量超過了10T,這些數(shù)據(jù)日志可以幫助廣告推送、NewsFeed生成,好友推薦,入侵檢測等。如何在可控時間內(nèi)完成這些海量數(shù)據(jù)的挖掘工作成為了一大難題。最初,F(xiàn)acebook采用傳統(tǒng)的數(shù)據(jù)挖掘方案,但隨著數(shù)據(jù)量的增大任務(wù)運(yùn)行的時間越來越長,并不具備可擴(kuò)展性。于是Facebook開始嘗試使用Hadoop,并在使用過程中開發(fā)了自己的數(shù)據(jù)倉庫系統(tǒng)Hive。如今Facebook的Hive-Hadoop 集群擁有超過2250臺機(jī)器和23000個核心,數(shù)據(jù)容量超過36PB,大部分任務(wù)通過Hive完成,每天有超過25000個Hive Jobs在運(yùn)行。整個系統(tǒng)體系如下圖所示
整個系統(tǒng)通過Scribe收集日志,經(jīng)過過濾后存儲在Scribe-Hadoop集群上,成為Hive-Hadoop 生產(chǎn)集群的數(shù)據(jù)源之一。另外一個數(shù)據(jù)源則是系統(tǒng)存儲數(shù)據(jù)的Mysql集群。Hive-Hadoop生產(chǎn)集群運(yùn)算完成后,將運(yùn)算結(jié)果寫回到Mysql集群中,或者送到Orcale RAC中做進(jìn)一步的挖掘。同時,還通過Hive復(fù)制將數(shù)據(jù)推送到一個Adhoc Hive-Hadoop 集群,用來為業(yè)務(wù)分析人員提供Adhoc查詢。為了方便業(yè)務(wù)分析人員使用Hive,F(xiàn)acebook還開發(fā)了一個Web工具叫HiPal
在數(shù)據(jù)收集部分,F(xiàn)acebook在Scribe和HDFS的基礎(chǔ)上開發(fā)了一個接近實(shí)時的數(shù)據(jù)收集系統(tǒng),稱之為DataFreeway系統(tǒng)。數(shù)據(jù)流如下所示
從圖片存儲和Hive-Hadoop方案可以看出,面對海量數(shù)據(jù),F(xiàn)acebook仍延續(xù)他們一貫的實(shí)用風(fēng)格,積極使用開源工具,或是構(gòu)建簡單實(shí)用的方案。這里沒有科學(xué)家,只有解決問題的開發(fā)工程師