HBase的網絡一致性和分區容錯度
CAP定理指出,分布式系統可以維持以下三種特性中的兩種: - Consistency - 所有節點都看到相同的數據。 - Availability - 每個請求都會收到有關它是成功還是失敗的響應。 - Partition tolerance - 即使其他組件無法使用,系統也會繼續運行。
HBase的數據存儲于HDFS文件系統,HDFS保證強一致性C和分區容錯性P,降低了可用性A。
HBase有利于一致性和分區容錯度,必須做出決定。Coda Hale解釋了為什么分區容錯度如此重要,請訪問http://codahale.com/you-cant-sacrifice-partition-tolerance/。
一開始就知道hbase是CAP中的CP系統,即hbase是強一致性的。
我原來一直以為hbase的強一致性是因為底層的HDFS寫入時,必須所有副本都寫入成功才能返回。
最近才想明白,hbase之所以是CP系統,實際和底層HDFS無關,它是CP系統,是因為對每一個region同時只有一臺RegionServer為它服務,對一個region所有的操作請求,都由這一臺RegionServer來響應,自然是強一致性的。
在這臺RegionServer fail的時候,它管理的region會failover到其他region server時,需要根據WAL log來redo,這時候進行redo的region應該是unavailable的,所以hbase降低了可用性,提高了一致性。
設想一下,如果redo的region能夠響應請求,那么可用性提高了,則必然返回不一致的數據(因為redo可能還沒完成),那么hbase就降低一致性來提高可用性了。