Zookeeper 和 Chubby 有哪些不同點?
01-29
都說Zookeeper是Chubby開源實現,但是就像HDFS和GFS一樣,具體實現不可能完全相同。那麼它和Chubby有哪些不同點呢?
1 協議不同。zk是zab,chubby是帶租約的paxos。前者可以保證total order和casual order,後者未提及(實際上肯定有casual order)。2 API 不同。zk可以用臨時z節點實現鎖,chubby有直接的加鎖API。
3 zk 設計為高吞吐量,每個機器都可以讀,提供sync方法刷新值。chubby讀寫都在master單機上。
首先,Zookeeper不能說是Chubby的開源實現。因為它們只是都提供了一個hierarchical namespace,解決的問題也比較類似,不過提供的操作和實現都不大一樣。最大的不同在於Chubby提供的是鎖(lock)服務,而Zookeeper卻沒有提供類似的同步服務。Zookeeper在locality方面也有一些優化。具體你可以參考它們各自的paper
二者的不同都來源於其設計理念的不同:
- Chubby:provide coarse-grained locking as well as reliable storage for a loosely-coupled distributed system.
- Zookeeper:provide a simple and high performance kernel for building more complex coordination primitives at the client.
也就是說Chubby傾向於提供更精準明確的操作來免除使用者的負擔,Zookeeper則需要提供更通用,更原子的原材料,留更多的空白和自由給Client。
反映到具體的設計實現中,列舉比較顯著的不同:
- 一致性:Chubby提供線性一致性(Linearizability),而Zookeeper只保證寫操作線性(Linearizable writes) + 客戶端有序(FIFO client order),也就是說Zookeeper損失的是不同客戶端的讀寫操作的一致性
- 分散式鎖:Chubby提供準確語義的Lock,Release操作,內部完成了一致性協議,鎖的實現的內容,僅將鎖的使用部分留給用戶,反觀Zookeeper並沒有提供加鎖放鎖操作,用戶需要利用Zookeeper提供的基礎操作,完成鎖的實現和鎖的使用部分的內容
- 客戶端Cache:Chubby在內部維護了一致性Cache,而Zookeeper需要Client的使用者自己實現,通過watcher控制;
- API:Zookeeper取消Handle,因此省略了Open,Close介面,這就要求所有對ZNode的訪問都需要提供完整的Path,Zookeeper沒有提供Lock,Release等精確語義的所操作。
更多的內容,可以看這篇博客:Zookeeper vs Chubby
另外:一致性協議上ZAB和PAXOS的不同,個人認為更多的是學術上的意義。
他倆都是分散式選舉演算法的封裝,用來解決分散式下的數據一致性問題,c是paxos的完全實現,z少有偏差。鎖的問題,c肯定會用起來方便一點,z也有相應的辦法可以實現。c沒有開源具體怎麼不太清楚,z用的比較多。
Zookeeper使用的是ZAB協議,是Paxos的一種變種。而Chubby直接實現了Paxos,並且從功能上說,Chubby提供了粗粒度的分散式鎖服務,而Zookeeper功能更加強大。還有一點就是:Zookeeper是開源的,Chubby不開源。更加詳細的差別可以看下這個文章的介紹http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt375
推薦閱讀:
※Zookeeper vs Chubby
※zookeeper與keepalived的高可用區別?
※zookeeper在dubbo到底起了什麼作用,dubno如何解決了阿里的高並發問題?