【分布式】Zookeeper與Paxos

一、前言

在學習了Paxos在Chubby中的應用后,接下來學習Paxos在開源軟件Zookeeper中的應用。

二、Zookeeper

Zookeeper是一個開源的分布式協(xié)調服務,其設計目標是將那些復雜的且容易出錯的分布式一致性服務封裝起來,構成一個高效可靠的原語集,并以一些列簡單的接口提供給用戶使用。其是一個典型的分布式數(shù)據(jù)一致性的解決方案,分布式應用程序可以基于它實現(xiàn)諸如數(shù)據(jù)發(fā)布/發(fā)布、負載均衡、命名服務、分布式協(xié)調/通知、集群管理、Master選舉、分布式鎖和分布式隊列等功能。其可以保證如下分布式一致性特性。

① 順序一致性,從同一個客戶端發(fā)起的事務請求,最終將會嚴格地按照其發(fā)起順序被應用到Zookeeper中去。

② 原子性,所有事務請求的處理結果在整個集群中所有機器上的應用情況是一致的,即整個集群要么都成功應用了某個事務,要么都沒有應用。

③ 單一視圖,無論客戶端連接的是哪個Zookeeper服務器,其看到的服務端數(shù)據(jù)模型都是一致的。

④ 可靠性,一旦服務端成功地應用了一個事務,并完成對客戶端的響應,那么該事務所引起的服務端狀態(tài)變更將會一直被保留,除非有另一個事務對其進行了變更。

⑤ 實時性,Zookeeper保證在一定的時間段內(nèi),客戶端最終一定能夠從服務端上讀取到最新的數(shù)據(jù)狀態(tài)。

2.1 設計目標

Zookeeper致力于提供一個高性能、高可用、且具有嚴格的順序訪問控制能力(主要是寫操作的嚴格順序性)的分布式協(xié)調服務,其具有如下的設計目標。

① 簡單的數(shù)據(jù)模型,Zookeeper使得分布式程序能夠通過一個共享的樹形結構的名字空間來進行相互協(xié)調,即Zookeeper服務器內(nèi)存中的數(shù)據(jù)模型由一系列被稱為ZNode的數(shù)據(jù)節(jié)點組成,Zookeeper將全量的數(shù)據(jù)存儲在內(nèi)存中,以此來提高服務器吞吐、減少延遲的目的。

② 可構建集群,一個Zookeeper集群通常由一組機器構成,組成Zookeeper集群的而每臺機器都會在內(nèi)存中維護當前服務器狀態(tài),并且每臺機器之間都相互通信。

③ 順序訪問,對于來自客戶端的每個更新請求,Zookeeper都會分配一個全局唯一的遞增編號,這個編號反映了所有事務操作的先后順序。

④ 高性能,Zookeeper將全量數(shù)據(jù)存儲在內(nèi)存中,并直接服務于客戶端的所有非事務請求,因此它尤其適用于以讀操作為主的應用場景。

2.2 基本概念

① 集群角色,最典型的集群就是Master/Slave模式(主備模式),此情況下把所有能夠處理寫操作的機器稱為Master機器,把所

網(wǎng)友評論