日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

分布式系统概念:一致性协议、一致性模型、拜占庭问题、租约、副本协议

發布時間:2024/1/17 windows 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式系统概念:一致性协议、一致性模型、拜占庭问题、租约、副本协议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1,一致性協議

兩階段提交協議與Raft協議、Paxos協議

①兩階段提交協議

在分布式系統中,每個節點雖然可以知曉自己的操作時成功或者失敗,卻無法知道其他節點的操作的成功或失敗。當一個事務跨越多個節點時,為了保持事務的ACID特性,需要引入一個作為協調者的組件來統一掌控所有節點(稱作參與者)的操作結果并最終指示這些節點是否要把操作結果進行真正的提交(比如將更新后的數據寫入磁盤等等)。因此,二階段提交的算法思路可以概括為: 參與者將操作成敗通知協調者,再由協調者根據所有參與者的反饋情報決定各參與者是否要提交操作還是中止操作。

因此,系統包含兩類節點,一類是協調者,一類是參與者,協議的執行由兩個階段組成:

具體參考:二階段提交:維基百科

兩階段協議是阻塞的,節點在等待對方的應答消息時,它不能做其他事情且持有的資源也不釋放。它主要是用來保證跨多個節點的操作的原子性--要么都操作,要么都不操作,而像Raft協議則諸如用來保證操作的一致性,即各個節點都執行相同的操作。

兩階段協議的舉例參考:兩階段提交協議

?

②Raft協議和Paxos協議

Raft與Paxos 在分布式應用中的基本功能相似,但是Paxos難于理解,相對而言Raft算法要簡單一些。關于Raft協議有一篇經典的論文:

《In Search of an Understandable Consensus Algorithm (Extended Version)》

其中文翻譯地址參考:尋找一種易于理解的一致性算法(擴展版)

還有一篇文章詳細解釋了Raft算法的相關實現:Raft論文的第 31 號參考文獻。

下面僅記錄一下看論文過程中出現的一個問題:

為什么 “大多數規則” 能夠保證對于一個給定的任期,只會有一個候選人最終贏得選舉成為Leader?
在Raft中,對于一個給定的任期號,每一臺Server按照先來先服務原則對該任期號最多只投一張票,若某Candidate發送的請求投票RPC帶有的任期號獲得超過半數的Server的同意,則該Candidate成為Leader。
正是由于每個Server對某個任期只最多投一次票,且獲得的投票要超過半數才能成為Leader,故在一個給定的任期投票中,最終只會有一個Candidate成為Leader。

關于Raft協議中的Leader選舉步驟參考:Raft系列文章之二:Leader選舉

?

2,分布式系統中常見的三種一致性模型

①強一致性:當更新操作在某個副本上執行成功后,之后所有的讀操作都要能夠獲得最新的數據。對于單副本而言,讀寫操作都是在同一數據上執行,很容易保證一致性;而對于多副本數據,則需要使用分布式協議如2PC協議。

②弱一致性:當更新某數據時,用戶讀到最新的數據需要一段時間。

③最終一致性:它是一種特殊形式的弱一致性。它不能保證當某個數據X更新后,在所有后續對X的操作能夠看到新數據,而是需要一個時間片段,在經過該時間片段之后,則能保證。在這個時間片段內,數據可能是不一致的,該片段稱“不一致窗口“。

參考:數據一致性模型

?

3,拜占庭將軍問題

在分布式理論中,經??吹健痹诜前菡纪ュe誤情況下,算法是有效的……“ 或者說 ”...可以容忍非拜占庭失效“。那么什么是拜占庭將軍問題呢?

在分布式計算上,不同的計算機透過訊息交換,嘗試達成共識;但有時候,系統上協調計算機(Coordinator / Commander)或成員計算機 (Member / Lieutanent)可能因系統錯誤并交換錯的訊息,導致影響最終的系統一致性。參考:維基百科:拜占庭將軍問題

也即,在系統不同的機器之間會傳遞錯誤的消息,這種情況即為拜占庭問題。這與”網絡分割、機器崩潰...”是不同的。比如Raft協議不能容忍拜占庭問題,但是能夠 在非拜占庭錯誤情況下,有網絡延遲、分區、丟包、冗余和亂序等錯誤情況出現時,都可以保證其操作的正確性。

?

4,租約,心跳包(heartbeat)

①租約

這里主要列舉租約可以用來干什么?

a,進行故障檢測。這類似于ZooKeeper中master 與 slaver 之間發送的心跳包的作用。在ZK中, master 和 slaver 之間通過交換心跳包來檢測它們是否還存活。一個具體的例子參考:故障檢測

b,維護緩存一致性維護緩存的一致性,第一種辦法是輪詢:每次讀取數據時都先詢問服務器數據是不是最新的,若不是,則先讓服務器傳輸新數據,然后再讀取該新數據。第二種方法是回調:由服務器記錄有哪些客戶端讀取了數據,當服務器對數據做修改時先通知記錄下來的這些客戶端,上次讀取過的數據已經失效。這二種方法都有一定的缺陷,參考:租約機制簡介

因此,可以引入租約機制。在租約期限內,可以保證客戶端緩存的數據是最新的。當租約過期后,客戶端需要重新向服務器詢問數據,重新續約。

租約的定義:租約就是在一定期限內給予持有者特定權力的 協議。每個租約都有一個期限,正是這個期限可以保證租約機制容忍機器失效和網絡分割。

租約機制優化后臺數據庫訪問的一個例子:使用租約機制解決緩存數據更新的問題

?

5,副本協議

副本協議是控制副本讀寫行為的規則,使得副本滿足可用性和一致性。

副本協議分為兩類,①中心化的副本控制協議:由一個中心節點協調副本數據的更新,維護副本數據的一致性。這里重點介紹下常用的Primary-Secondary中心化副本控制協議:假設數據是以數據段(segment/partition)為單位分布在集群各臺機器上的,每個數據段指定一個作為主副本,其余的數據段則為從副本,對該數據段的更新(讀寫)而言,由主副本來負責。比如,當多個Client同時需要更新某個數據段時,所有的更新操作都發送到該數據段所對應的主副本所在的機器上,由它來確定更新的順序,負責協調一致性。

那么,Client如何找到主副本所在的機器呢???這需要一個元數據服務器,它專門用來記錄主副本的位置及相關信息,記錄集群個各個數據段的主副本的位置信息,副本分配情況……該元數據服務器應該相當于GFS中的Master。

注意:由于上面是假設數據不是以機器為單位分布在集群中,而是以數據段為單位分布在集群中,當某個數據段被指定為主副本時,該主副本也是按照以數據段為單位的數據分布方式分布到集群中的,即各個Primary副本的位置在集群中是隨機分配的。

要將Primary副本所在的機器與Master機器區分開來:應該在GFS中,Primary副本所在的機器可能是某臺Slaver機器,它用來存儲各個數據塊。而Master是用來存儲元數據信息的。

②去中心化的副本控制協議:各個節點之間是平等的,通過協商方式來達成某些操作。

學習材料參考:《分布式系統原理介紹? 劉杰》

總結

以上是生活随笔為你收集整理的分布式系统概念:一致性协议、一致性模型、拜占庭问题、租约、副本协议的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。