溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Zookeeper分布式技術的介紹

發(fā)布時間:2021-08-26 16:02:46 來源:億速云 閱讀:99 作者:chen 欄目:開發(fā)技術

本篇內容主要講解“Zookeeper分布式技術的介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Zookeeper分布式技術的介紹”吧!

一、分布式架構詳解

1、分布式發(fā)展歷程

1.1 單點集中式

特點:App、DB、FileServer都部署在一臺機器上。并且訪問請求量較少

Zookeeper分布式技術的介紹

1.2 應用服務和數(shù)據(jù)服務拆分

特點:App、DB、FileServer分別部署在獨立服務器上。并且訪問請求量較少

Zookeeper分布式技術的介紹

1.3 使用緩存改善性能

特點:數(shù)據(jù)庫中頻繁訪問的數(shù)據(jù)存儲在緩存服務器中,減少數(shù)據(jù)庫的訪問次數(shù),降低數(shù)據(jù)庫的壓力

Zookeeper分布式技術的介紹

1.4 應用服務器集群

特點:多臺應用服務器通過負載均衡同時對外提供服務,解決單臺服務器處理能力上限的問題

Zookeeper分布式技術的介紹

1.5 數(shù)據(jù)庫讀寫分離

特點:數(shù)據(jù)庫進行讀寫分離(主從)設計,解決數(shù)據(jù)庫的處理壓力

Zookeeper分布式技術的介紹

1.6 反向代理和CDN加速

特點:采用反向代理和CDN加快系統(tǒng)的訪問速度

Zookeeper分布式技術的介紹

1.7 分布式文件系統(tǒng)和分布式數(shù)據(jù)庫

特點:數(shù)據(jù)庫采用分布式數(shù)據(jù)庫,文件系統(tǒng)采用分布式文件系統(tǒng)

隨著業(yè)務的發(fā)展,最終數(shù)據(jù)庫讀寫分離也將無法滿足需求,需要采用分布式數(shù)據(jù)庫和分布式文件系統(tǒng)來支撐

分布式數(shù)據(jù)庫是數(shù)據(jù)庫拆分后的最后方法,只有在單表規(guī)模非常龐大的時候才使用,更常用的數(shù)據(jù)庫拆分手段是業(yè)務分庫,將不同業(yè)務的數(shù)據(jù)庫部署在不同的機器上

Zookeeper分布式技術的介紹

二、 分布式技術詳解

1. 并發(fā)性

2. 分布性

大任務拆分成多個任務部署到多臺機器上對外提供服務

3. 缺乏全局時鐘

時間要統(tǒng)一

4. 對等性

一個服務部署在多臺機器上是一樣的,無任何差別

5. 故障肯定會發(fā)生

硬盤壞了 CPU燒了....

三、分布式事務

1. ACID

原子性(Atomicity):一個事務(transaction)中的所有操作,要么全部完成,要么全部不完成,不會結束在中間某個環(huán)節(jié)。事務在執(zhí)行過程中發(fā)生錯誤,會被恢復(Rollback)到事務開始前的狀態(tài),就像這個事務從來沒有執(zhí)行過一樣。

一致性(Consistency):在事務開始之前和事務結束以后,數(shù)據(jù)庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規(guī)則,這包含資料的精確度、串聯(lián)性以及后續(xù)數(shù)據(jù)庫可以自發(fā)性地完成預定的工作。

比如A有500元,B有300元,A向B轉賬100,無論怎么樣,A和B的總和總是800元

隔離性(Isolation):數(shù)據(jù)庫允許多個并發(fā)事務同時對其數(shù)據(jù)進行讀寫和修改的能力,隔離性可以防止多個事務并發(fā)執(zhí)行時由于交叉執(zhí)行而導致數(shù)據(jù)的不一致。事務隔離分為不同級別,包括讀未提交(Read  uncommitted)、讀提交(read committed)、可重復讀(repeatable read)和串行化(Serializable)。

持久性(Durability):事務處理結束后,對數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會丟失。

2. 2P/3P

2P= Two Phase commit 二段提交(RDBMS(關系型數(shù)據(jù)庫管理系統(tǒng))經常就是這種機制,保證強一致性)

3P= Three Phase commit 三段提交

說明:2P/3P是為了保證事務的ACID(原子性、一致性、隔離性、持久性)

2.1 2P的兩個階段

階段1:提交事務請求(投票階段)詢問是否可以提交事務

Zookeeper分布式技術的介紹

階段2:執(zhí)行事務提交(commit、rollback) 真正的提交事務

Zookeeper分布式技術的介紹

2.2 3P的三個階段

階段1:是否提交-詢問是否可以做事務提交

階段2:預先提交-預先提交事務

階段3:執(zhí)行事務提交(commit、rollback)真正的提交事務

Zookeeper分布式技術的介紹

說明:3P把2P的階段一拆分成了前面兩個階段

3. CAP理論

一致性(Consistency):分布式數(shù)據(jù)庫的數(shù)據(jù)保持一致

可用性(Availability):任何一個節(jié)點掛了,其他節(jié)點可以繼續(xù)對外提供服務

分區(qū)容錯性(網(wǎng)絡分區(qū))Partition  tolerance:一個數(shù)據(jù)庫所在的機器壞了,如硬盤壞了,數(shù)據(jù)丟失了,可以新增一臺機器,然后從其他正常的機器把備份的數(shù)據(jù)同步過來

CAP理論的特點:CAP只能滿足其中2條

Zookeeper分布式技術的介紹

CA(放棄P):將所有的數(shù)據(jù)放在一個節(jié)點。滿足一致性、可用性。

AP(放棄C):放棄強一致性,用最終一致性來保證。

CP(放棄A):一旦系統(tǒng)遇見故障,受到影響的服務器需要等待一段時間,在恢復期間無法對外提供服務。

舉例說明CAP理論:

有3臺機器分別有3個數(shù)據(jù)庫分別有兩張表,數(shù)據(jù)都是一樣的

Machine1-db1-tbl_person、tbl_order

Machine2-db2-tbl_person、tbl_order

Machine3-db3-tbl_person、tbl_order

1)當向machine1的db1的表tbl_person、tbl_order插入數(shù)數(shù)據(jù)時,同時要把插入的數(shù)據(jù)同步到machine2、machine3,這就是一致性

2)當其中的一臺機器宕機了,可以繼續(xù)對外提供服務,把宕機的機器重新啟動起來可以繼續(xù)服務,這就是可用性

3)當machine1的機器壞了,數(shù)據(jù)全部丟失了,不會有任何問題,因為machine2和machine3上還有數(shù)據(jù),重新加一臺機器machine4,把machine2和machine3其中一臺機器的備份數(shù)據(jù)同步過來就可以了,這就是分區(qū)容錯性

4. BASE理論

基本可用(bascially available)、軟狀態(tài)(soft state)、最終一致性(Eventually consistent)

基本可用:在分布式系統(tǒng)出現(xiàn)故障,允許損失部分可用性(服務降級、頁面降級)

軟狀態(tài):允許分布式系統(tǒng)出現(xiàn)中間狀態(tài)。而且中間狀態(tài)不影響系統(tǒng)的可用性。

1、這里的中間狀態(tài)是指不同的data replication之間的數(shù)據(jù)更新可以出現(xiàn)延時的最終一致性

2、如CAP理論里面的示例,當向machine1的db1的表tbl_person、tbl_order插入數(shù)數(shù)據(jù)時,同時要把插入的數(shù)據(jù)同步到machine2、machine3,當machine3的網(wǎng)絡有問題時,同步失敗,但是過一會網(wǎng)絡恢復了就同步成功了,這個同步失敗的狀態(tài)就稱為軟狀態(tài),因為最終還是同步成功了。

最終一致性:data replications經過一段時間達到一致性。

5. Paxos算法

5.1 介紹Paxos算法之前我們先來看一個小故事

拜占庭將軍問題

拜占庭帝國就是5~15世紀的東羅馬帝國,拜占庭即現(xiàn)在土耳其的伊斯坦布爾。我們可以想象,拜占庭軍隊有許多分支,駐扎在敵人城外,每一分支由各自的將軍指揮。假設有11位將軍,將軍們只能靠通訊員進行通訊。在觀察敵人以后,忠誠的將軍們必須制訂一個統(tǒng)一的行動計劃——進攻或者撤退。然而,這些將軍里有叛徒,他們不希望忠誠的將軍們能達成一致,因而影響統(tǒng)一行動計劃的制訂與傳播。

問題是:將軍們必須有一個協(xié)議,使所有忠誠的將軍們能夠達成一致,而且少數(shù)幾個叛徒不能使忠誠的將軍們作出錯誤的計劃——使有些將軍進攻而另一些將軍撤退。

假設有9位忠誠的將軍,5位判斷進攻,4位判斷撤退,還有2個間諜惡意判斷撤退,雖然結果是錯誤的撤退,但這種情況完全是允許的。因為這11位將軍依然保持著狀態(tài)一致性。

Zookeeper分布式技術的介紹

總結:

1)11位將軍進攻城池

2)同時進攻(議案、決議)、同時撤退(議案、決議)

3)不管撤退還是進攻,必須半數(shù)的將軍統(tǒng)一意見才可以執(zhí)行

4)將軍里面有叛徒,會干擾決議生成

5.2 下面就來介紹一下Paxos算法

Google Chubby的作者Mike Burrows說過這個世界上只有一種一致性算法,那就是Paxos,其它的算法都是殘次品。

Paxos:多數(shù)派決議(最終解決一致性問題)

Paxos算法有三種角色:Proposer,Acceptor,Learner

Proposer:提交者(議案提交者)

提交議案(判斷是否過半),提交批準議案(判斷是否過半)

Acceptor:接收者(議案接收者)

接受議案或者駁回議案,給proposer回應(promise)

Learner:學習者(打醬油的)

如果議案產生,學習議案。

設定1:如果Acceptor沒有接受議案,那么他必須接受第一個議案

設定2:每個議案必須有一個編號,并且編號只能增長,不能重復。越往后越大。

設定3:接受編號大的議案,如果小于之前接受議案編號,那么不接受

設定4:議案有2種(提交的議案,批準的議案)

Zookeeper分布式技術的介紹

1)Prepare階段(議案提交)

a)Proposer希望議案V。首先發(fā)出Prepare請求至大多數(shù)Acceptor。Prepare請求內容為序列號K

b)Acceptor收到Prepare請求為編號K后,檢查自己手里是否有處理過Prepare請求。

c)如果Acceptor沒有接受過任何Prepare請求,那么用OK來回復Proposer,代表Acceptor必須接受收到的第一個議案(設定1)

d)否則,如果Acceptor之前接受過任何Prepare請求(如:MaxN),那么比較議案編號,如果K

e)如果K>=MaxN,那么檢查之前是否有批準的議案,如果沒有則用OK來回復Proposer,并記錄K

f)如果K>=MaxN,那么檢查之前是否有批準的議案,如果有則回復批準的議案編號和議案內容(如:

2)Accept階段(批準階段)

a)Proposer收到過半Acceptor發(fā)來的回復,回復都是OK,且沒有附帶任何批準過的議案編號和議案內容。那么Proposer繼續(xù)提交批準請求,不過此時會連議案編號K和議案內容V一起提交(

b)Proposer收到過半Acceptor發(fā)來的回復,回復都是OK,且附帶批準過的議案編號和議案內容(

c)Proposer沒有收到過半Acceptor發(fā)來的回復,則修改議案編號K為K+1,并將編號重新發(fā)送給Acceptors(重復Prepare階段的過程)

d)Acceptor收到Proposer發(fā)來的Accept請求,如果編號K

e)Acceptor收到Proposer發(fā)來的Accept請求,如果編號K>=MaxN則批準該議案,并設置手里批準的議案為

f)經過一段時間Proposer對比手里收到的Accept回復,如果超過半數(shù),則結束流程(代表議案被批準),同時通知Leaner可以學習議案。

g) 經過一段時間Proposer對比手里收到的Accept回復,如果未超過半數(shù),則修改議案編號重新進入Prepare階段。

5.3 Paxos示例

示例1:先后提議的場景

角色:

proposer:參謀1,參謀2

acceptor:將軍1,將軍2,將軍3(決策者)

1)參謀1發(fā)起提議,派通信兵帶信給3個將軍,內容為(編號1);

2)3個將軍收到參謀1的提議,由于之前還沒有保存任何編號,因此把(編號1)保存下來,避免遺忘;同時讓通信兵帶信回去,內容為(ok);

3)參謀1收到至少2個將軍的回復,再次派通信兵帶信給3個將軍,內容為(編號1,進攻時間1);

4)3個將軍收到參謀1的時間,把(編號1,進攻時間1)保存下來,避免遺忘;同時讓通信兵帶信回去,內容為(Accepted);

5)參謀1收到至少2個將軍的(Accepted)內容,確認進攻時間已經被大家接收;

6)參謀2發(fā)起提議,派通信兵帶信給3個將軍,內容為(編號2);

7)3個將軍收到參謀2的提議,由于(編號2)比(編號1)大,因此把(編號2)保存下來,避免遺忘;又由于之前已經接受參謀1的提議,因此讓通信兵帶信回去,內容為(編號1,進攻時間1);

8)參謀2收到至少2個將軍的回復,由于回復中帶來了已接受的參謀1的提議內容,參謀2因此不再提出新的進攻時間,接受參謀1提出的時間;

示例2:交叉場景

Zookeeper分布式技術的介紹

角色:

proposer:參謀1,參謀2

acceptor:將軍1,將軍2,將軍3(決策者)

1)參謀1發(fā)起提議,派通信兵帶信給3個將軍,內容為(編號1);

2)3個將軍的情況如下

a)將軍1和將軍2收到參謀1的提議,將軍1和將軍2把(編號1)記錄下來,如果有其他參謀提出更小的編號,將被拒絕;同時讓通信兵帶信回去,內容為(ok);

b)負責通知將軍3的通信兵被抓,因此將軍3沒收到參謀1的提議;

3)參謀2在同一時間也發(fā)起了提議,派通信兵帶信給3個將軍,內容為(編號2);

4)3個將軍的情況如下

a)將軍2和將軍3收到參謀2的提議,將軍2和將軍3把(編號2)記錄下來,如果有其他參謀提出更小的編號,將被拒絕;同時讓通信兵帶信回去,內容為(ok);

b)負責通知將軍1的通信兵被抓,因此將軍1沒收到參謀2的提議;

5)參謀1收到至少2個將軍的回復,再次派通信兵帶信給有答復的2個將軍,內容為(編號1,進攻時間1);

6)2個將軍的情況如下

a)將軍1收到了(編號1,進攻時間1),和自己保存的編號相同,因此把(編號1,進攻時間1)保存下來;同時讓通信兵帶信回去,內容為(Accepted);

b)將軍2收到了(編號1,進攻時間1),由于(編號1)小于已經保存的(編號2),因此讓通信兵帶信回去,內容為(Rejected,編號2);

7)參謀2收到至少2個將軍的回復,再次派通信兵帶信給有答復的2個將軍,內容為(編號2,進攻時間2);

8)將軍2和將軍3收到了(編號2,進攻時間2),和自己保存的編號相同,因此把(編號2,進攻時間2)保存下來,同時讓通信兵帶信回去,內容為(Accepted);

9)參謀2收到至少2個將軍的(Accepted)內容,確認進攻時間已經被多數(shù)派接受;

10)參謀1只收到了1個將軍的(Accepted)內容,同時收到一個(Rejected,編號2);參謀1重新發(fā)起提議,派通信兵帶信給3個將軍,內容為(編號3);

11)3個將軍的情況如下

a)將軍1收到參謀1的提議,由于(編號3)大于之前保存的(編號1),因此把(編號3)保存下來;由于將軍1已經接受參謀1前一次的提議,因此讓通信兵帶信回去,內容為(編號1,進攻時間1);

b)將軍2收到參謀1的提議,由于(編號3)大于之前保存的(編號2),因此把(編號3)保存下來;由于將軍2已經接受參謀2的提議,因此讓通信兵帶信回去,內容為(編號2,進攻時間2);

c)負責通知將軍3的通信兵被抓,因此將軍3沒收到參謀1的提議;

12)參謀1收到了至少2個將軍的回復,比較兩個回復的編號大小,選擇大編號對應的進攻時間作為最新的提議;參謀1再次派通信兵帶信給有答復的2個將軍,內容為(編號3,進攻時間2);

13)將軍1和將軍2收到了(編號3,進攻時間2),和自己保存的編號相同,因此保存(編號3,進攻時間2),同時讓通信兵帶信回去,內容為(Accepted);

14)參謀1收到了至少2個將軍的(accepted)內容,確認進攻時間已經被多數(shù)派接受。

四. Zookeeper ZAB協(xié)議

Zookeeper Automic Broadcast(ZAB),即Zookeeper原子性廣播,是Paxos經典實現(xiàn)

術語:

quorum:集群過半數(shù)的集合

1. ZAB(zookeeper)中節(jié)點分四種狀態(tài)

looking:選舉Leader的狀態(tài)(崩潰恢復狀態(tài)下)

following:跟隨者(follower)的狀態(tài),服從Leader命令

leading:當前節(jié)點是Leader,負責協(xié)調工作。

observing:observer(觀察者),不參與選舉,只讀節(jié)點。

2. ZAB中的兩個模式(ZK是如何進行選舉的)

崩潰恢復、消息廣播

Zookeeper分布式技術的介紹

1)崩潰恢復

leader掛了,需要選舉新的leader

Zookeeper分布式技術的介紹

a.每個server都有一張選票,如(3,9),選票投自己。

b.每個server投完自己后,再分別投給其他還可用的服務器。如把Server3的(3,9)分別投給Server4和Server5,一次類推

c.比較投票,比較邏輯:優(yōu)先比較Zxid,Zxid相同時才比較myid。比較Zxid時,大的做leader;比較myid時,小的做leader

d.改變服務器狀態(tài)(崩潰恢復->數(shù)據(jù)同步,或者崩潰恢復->消息廣播)

相關概念補充說明:

epoch周期值

acceptedEpoch(比喻:年號):follower已經接受leader更改年號的(newepoch)提議。

currentEpoch(比喻:當前的年號):當前的年號

lastZxid:history中最近接收到的提議zxid(最大的值)

history:當前節(jié)點接受到事務提議的log

Zxid數(shù)據(jù)結構說明:

cZxid = 0x10000001b

64位的數(shù)據(jù)結構

高32位:10000

Leader的周期編號+myid的組合

低32位:001b

事務的自增序列(單調遞增的序列)只要客戶端有請求,就+1

當產生新Leader的時候,就從這個Leader服務器上取出本地log中最大事務Zxid,從里面讀出epoch+1,作為一個新epoch,并將低32位置0(保證id絕對自增)

2)消息廣播(類似2P提交)

Zookeeper分布式技術的介紹

a.Leader接受請求后,將這個請求賦予全局的唯一64位自增Id(zxid)。

b.將zxid作為議案發(fā)給所有follower。

c.所有的follower接受到議案后,想將議案寫入硬盤后,馬上回復Leader一個ACK(OK)。

d.當Leader接受到合法數(shù)量(過半)Acks,Leader給所有follower發(fā)送commit命令。

e.follower執(zhí)行commit命令。

注意:到了這個階段,ZK集群才正式對外提供服務,并且Leader可以進行消息廣播,如果有新節(jié)點加入,還需要進行同步。

3)數(shù)據(jù)同步

a.取出Leader最大lastZxid(從本地log日志來)

b.找到對應zxid的數(shù)據(jù),進行同步(數(shù)據(jù)同步過程保證所有follower一致)

c.只有滿足quorum同步完成,準Leader才能成為真正的Leader

到此,相信大家對“Zookeeper分布式技術的介紹”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI