前段時間Facebook的新版消息系統(tǒng)發(fā)布,F(xiàn)acebook對HBase的成功使用也使得很多的HBase案例得以出現(xiàn),下文是Facebook的Hadoop工程師Dhruba Borthakur發(fā)表的Hadoop系列文章中的一篇,對Facebook選擇Hadoop和HBase的原因做了一個說明。
Dhruba Borthakur首先總結(jié)了Hadoop和HBase的優(yōu)勢。他認為HBase橫向擴展性強。對Facebook這種少量數(shù)據(jù)存儲場景來說,擴容幾乎是家常便飯,HBase能夠使數(shù)據(jù)擴容非常容易。并且支持很高的寫吞吐。Facebook的消息數(shù)據(jù)很龐大,每天的寫量也很大。同時在同一個數(shù)據(jù)中心,能夠保證有較強的一致性。Facebook用HBase來存儲消息數(shù)據(jù),業(yè)務(wù)上需要一個能夠保證一致性的數(shù)據(jù)存儲(這也是Facebook并沒有采用Cassandra的原因之一)。HBase還具有良好的隨機讀性能。消息系統(tǒng)的業(yè)務(wù)邏輯導(dǎo)致會有很多穿透緩存層的隨機讀操作。
由于數(shù)據(jù)量大,分布的機器也可能很多,出故障或者進行一些日常升級工作會比較頻繁。所以高可用性和故障可恢復(fù)性也顯得極其重要。錯誤隔離性是指一個結(jié)點的錯誤不會影響到其它結(jié)點,磁盤故障只會對相應(yīng)的小規(guī)模的數(shù)據(jù)產(chǎn)生影響。同時提供原子性的read-modify-write操作。原子性的increment或者對比后修改的操作,對很多業(yè)務(wù)上的處理非常方便。最后提供獲取某個范圍的數(shù)據(jù)的功能。比如像獲取某人最近100條消息這樣的功能,在消息系統(tǒng)里也是很常見的需求。
當然,下面幾個Hadoop和HBase不太擅長的方面也值得一說。首先是同一個數(shù)據(jù)中心網(wǎng)絡(luò)割裂下的容災(zāi)性。同一個數(shù)據(jù)中心的網(wǎng)絡(luò)出現(xiàn)問題了,導(dǎo)致各結(jié)點之間無法正常溝通,這種情況通??梢酝ㄟ^配置一些備用的網(wǎng)絡(luò)設(shè)備來避免。其次某個數(shù)據(jù)中心故障不會影響服務(wù)。這個情況更是少之又少。最后在多個數(shù)據(jù)中心間的實時數(shù)據(jù)交換。這個不太現(xiàn)實,通常這一點是用Cache層來實現(xiàn)用戶對無端數(shù)據(jù)的實時訪問的。