導航:首頁 > 源碼編譯 > 選舉演算法paxos

選舉演算法paxos

發布時間:2022-08-10 21:01:18

Ⅰ 幾種nosql的淺談

1、性能
都比較高,性能對我們來說應該都不是瓶頸。
總體來講,TPS 方面 redis 和 memcache 差不多,要大於 mongodb。
2、操作的便利性
memcache 數據結構單一。(key-value)
redis 豐富一些,數據操作方面,redis 更好一些,較少的網路 IO 次數,同時還提供 list,set,
hash 等數據結構的存儲。
mongodb 支持豐富的數據表達,索引,最類似關系型資料庫,支持的查詢語言非常豐富。
3、內存空間的大小和數據量的大小
redis 在 2.0 版本後增加了自己的 VM 特性,突破物理內存的限制;可以對 key value 設置過
期時間(類似 memcache)
memcache 可以修改最大可用內存,採用 LRU 演算法。Memcached 代理軟體 magent,比如建立
10 台 4G 的 Memcache 集群,就相當於有了 40G。 magent -s 10.1.2.1 -s 10.1.2.2:11211 -b
10.1.2.3:14000 mongoDB 適合大數據量的存儲,依賴操作系統 VM 做內存管理,吃內存也比較厲害,服務
不要和別的服務在一起。
4、可用性(單點問題)
對於單點問題,
redis,依賴客戶端來實現分布式讀寫;主從復制時,每次從節點重新連接主節點都要依賴整
個快照,無增量復制,因性能和效率問題,
所以單點問題比較復雜;不支持自動 sharding,需要依賴程序設定一致 hash 機制。
一種替代方案是,不用 redis 本身的復制機制,採用自己做主動復制(多份存儲),或者改成
增量復制的方式(需要自己實現),一致性問題和性能的權衡
Memcache 本身沒有數據冗餘機制,也沒必要;對於故障預防,採用依賴成熟的 hash 或者環
狀的演算法,解決單點故障引起的抖動問題。
mongoDB 支持 master-slave,replicaset(內部採用 paxos 選舉演算法,自動故障恢復),auto sharding 機制,對客戶端屏蔽了故障轉移和切分機制。
5、可靠性(持久化)
對於數據持久化和數據恢復,
redis 支持(快照、AOF):依賴快照進行持久化,aof 增強了可靠性的同時,對性能有所影

memcache 不支持,通常用在做緩存,提升性能;
MongoDB 從 1.8 版本開始採用 binlog 方式支持持久化的可靠性
6、數據一致性(事務支持)
Memcache 在並發場景下,用 cas 保證一致性redis 事務支持比較弱,只能保證事務中的每個操作連續執行
mongoDB 不支持事務
7、數據分析
mongoDB 內置了數據分析的功能(maprece),其他不支持
8、應用場景
redis:數據量較小的更性能操作和運算上
memcache:用於在動態系統中減少資料庫負載,提升性能;做緩存,提高性能(適合讀多寫
少,對於數據量比較大,可以採用 sharding)
MongoDB:主要解決海量數據的訪問效率問題。
表格比較:
memcache redis 類型 內存資料庫 內存資料庫
數據類型 在定義 value 時就要固定數據類型 不需要
有字元串,鏈表,集 合和有序集合
虛擬內存 不支持 支持
過期策略 支持 支持
分布式 magent master-slave,一主一從或一主多從
存儲數據安全 不支持 使用 save 存儲到 mp.rdb 中
災難恢復 不支持 append only file(aof)用於數據恢復
性能
1、類型——memcache 和 redis 都是將數據存放在內存,所以是內存資料庫。當然,memcache 也可用於緩存其他東西,例如圖片等等。
2、 數據類型——Memcache 在添加數據時就要指定數據的位元組長度,而 redis 不需要。
3、 虛擬內存——當物理內存用完時,可以將一些很久沒用到的 value 交換到磁碟。
4、 過期策略——memcache 在 set 時就指定,例如 set key1 0 0 8,即永不過期。Redis 可以通
過例如 expire 設定,例如 expire name 10。
5、 分布式——設定 memcache 集群,利用 magent 做一主多從;redis 可以做一主多從。都可
以一主一從。
6、 存儲數據安全——memcache 斷電就斷了,數據沒了;redis 可以定期 save 到磁碟。
7、 災難恢復——memcache 同上,redis 丟了後可以通過 aof 恢復。
Memecache 埠 11211
yum -y install memcached
yum -y install php-pecl-memcache
/etc/init.d/memcached start memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached/memcached.pid
-d 啟動一個守護進程
-p 埠
-m 分配的內存是 M
-c 最大運行並發數-P memcache 的 pid
//0 壓縮(是否 MEMCACHE_COMPRESSED) 30 秒失效時間
//delete 5 是 timeout

Ⅱ Paxos怎麼讀,麻煩給出英文音標

Paxos讀作[ˈpæksoʊs]。

Paxos

發音:[ˈpæksoʊs]

含義:Paxos(帕克索斯)演算法

用法:在句子中充當主語或賓語。

例句:

The High Replication Datastore increases the number of data centers that maintain replicas of your data by using the Paxos algorithm to synchronize that data across datacenters in real time.

High Replication Datastore使用Paxos演算法來實時同步跨越多個數據中心的數據,進而增加了用於維護數據復制的數據中心數量。

(2)選舉演算法paxos擴展閱讀:

Paxos 演算法的背景:

Paxos 演算法解決的問題是一個分布式系統如何就某個值(決議)達成一致。一個典型的場景是,在一個分布式資料庫系統中,如果各節點的初始狀態一致,每個節點執行相同的操作序列,那麼他們最後能得到一個一致的狀態。

為保證每個節點執行相同的命令序列,需要在每一條指令上執行一個「一致性演算法」以保證每個節點看到的指令一致。一個通用的一致性演算法可以應用在許多場景中,是分布式計算中的重要問題。因此從20世紀80年代起對於一致性演算法的研究就沒有停止過。

節點通信存在兩種模型:共享內存(Shared memory)和消息傳遞(Messages passing)。Paxos 演算法就是一種基於消息傳遞模型的一致性演算法。

Ⅲ paxos演算法是什麼

Paxos演算法是萊斯利·蘭伯特(Leslie Lamport,就是LaTeX中的"La",此人現在在微軟研究院)於1990年提出的一種基於消息傳遞的一致性演算法。這個演算法被認為是類似演算法中最有效的。

蘭伯特提出的Paxos演算法包含2個部分:

一個是Basic Paxos演算法,描述的是多節點之間如何就某個值(提案Value)達成共識;

另一個是Multi-Paxos思想,描述的是執行多個Basic Paxos實例,就一系列值達成共識

可因為蘭伯特提到的Multi-Paxos思想,缺少代碼實現的必要細節(比如怎麼選舉領導者),所以在理解上比較難。Basic Paxos是Multi-Paxos思想的核心。

(3)選舉演算法paxos擴展閱讀

背景

Paxos演算法解決的問題是一個分布式系統如何就某個值(決議)達成一致。一個典型的場景是,在一個分布式資料庫系統中,如果各節點的初始狀態一致,每個節點執行相同的操作序列,那麼他們最後能得到一個一致的狀態。

為保證每個節點執行相同的命令序列,需要在每一條指令上執行一個「一致性演算法」以保證每個節點看到的指令一致。

一個通用的一致性演算法可以應用在許多場景中,是分布式計算中的重要問題。因此從20世紀80年代起對於一致性演算法的研究就沒有停止過。節點通信存在兩種模型:共享內存(Shared memory)和消息傳遞(Messages passing)。Paxos演算法就是一種基於消息傳遞模型的一致性演算法。

Ⅳ 號稱史上最晦澀的演算法paxos,如何變得平易近人

分布式一致性演算法(Consensus Algorithm)是一個分布式計算領域的基礎性問題,其最基本的功能是為了在多個進程之間對某個(某些)值達成一致(強一致);進而解決分布式系統的可用性問題(高可用)。Paxos是最重要的分布式一致性演算法,很多人都把它作為「分布式一致性協議」的代名詞(Mike Burrows, inventor of the Chubby service at Google, says that「there is only one consensus protocol, and that』s Paxos」)。
關於Paxos的歷史和原理,已經有很多經典的論文可以參考,也有廠內外的文章有詳細的描述,本文就不再重復了。感興趣的同學可以閱讀下這些論文[1,2,3,4]。

Ⅳ Paxos 演算法的幾種演算法

上面通過證明如果一個協議滿足B1-B3 約束條件,那麼就可以保證一致性。直接從這些約束得到preliminary protocol ,basic protocol 是preliminary protocol 的限製版,保證了一致性。complete Synod protocol 進一步限制了basic protocol ,滿足一致性和過程需求(progress requirements)。下面將這三個演算法的具體過程。 滿足B1,牧師發起選舉的編號必須滿足偏序關系,有一個方法是每個發起牧師使用遞增的數值作為選舉編號,但這樣牧師無法立即知道他們選的數值有沒有被其他牧師選作選舉編號已經被使用。還有一個方法是使用數字+牧師姓名作為選舉編號,這樣就避免了自己的選舉編號被其他牧師使用。
滿足B2,每次選舉的法定人數必須是一個大部分集合(majority set)Q,這樣任意兩個選舉都會有一個共同的牧師。這里大部分集合是一個靈活的選擇,在原文中Lamport 使用體重打比方,體重的人更有可能呆在議會大廳,這樣就可以使用體重超過一半的牧師集合作為大部分集合。至於實際情況中的大部分集合是什麼要看具體情況了。
滿足B3,要求每個牧師p 每次在發起選舉前必須找到B_qrm 中每個牧師q 的MaxVote(b,q,B)。
根據以上要求,可以得到初始協議:
1. 牧師p 選擇一個選舉編號b ,並發送NextBallot(b)送給其他牧師
2. 其他牧師q 在收到NextBallot(b) 後,返回LastVote(b,v) 給牧師p,v=MaxVote(b,q,B)$是小於b 編號的q 投的最大的贊成票。為了保證B3,q 不能在b 和b_bal 之間的選舉投贊成票。(如果q 在發送了LastVote(b,v)又對新的選舉投票了那麼v 也就不是q 投的最大贊成票)
3. 牧師p 從一個大部分集合Q 中每個牧師q 中都收到LastVote(b,v) 後,發起一個新的選舉,編號為b,法定人數為Q,法律d滿足B3。然後牧師p 將這個法律寫在自己賬目的背面,發送BeginBallot(b,d)給Q 中每個牧師。
4. 牧師q 收到BeginBallot(b,d) 後決定是否為這次選舉投贊成票,如果贊同,則他將發送Vote(b,q) 給牧師p。
5. 如果牧師p 收到Q 中每個牧師q 發來的贊成票Vote(b,q),則將法律d 寫入他的賬目中,並向所有q發送Success(d) 消息。
6. 收到Success(d) 消息後,牧師q 將法律d 寫入到自己的賬目中。
說明:第一步表示發起法律的牧師p 希望下一個選舉的編號是b 。牧師q 用LastVote(b,v) 回應了牧師p 的請求,也就是向牧師p 通過法律時保證了v=MaxVote(b,q,B) 的被改變,具體來說就是不在b 和b_bal 之間的選舉投贊成票。
第三步要求法律d 需要滿足B3,這里我開始有點迷糊,實際系統中的值是客戶端決定的,而不應該是B3 決定的。這里我們還是用上面的key-value 資料庫的例子來理清下思路:當某個節點/牧師第一次發起更新前相當於B為空集,發起更新/選舉的操作不斷進行,直至所有法定人數(quorum)都對法律投了贊成票(即majority set 的節點都更新了該key-value 的值則認為更新成功),B3對應的就是之前的更新沒有成功,那麼新的選舉值需要保持的情況。第四步允許牧師可以不發送Vote(b,q) 或者發送幾次,對應的是發送的信息可能因為通信而失敗而未發送或者被多次發送。一旦牧師投了贊成票則確認可以修改該值。
考慮到最後第六步法律d 才被牧師q 寫入到賬目,有可能出現的情況就是在第五步的時候牧師p 將法律寫入到了自己賬目中,接著發送Success(d) 給其他牧師,其中因為通信或者牧師離開議會大廳而沒有被寫入到自己的賬目中,導致不一致。所以真正寫入到賬目時機應該是在第四步牧師q 在發送給牧師p 贊成票的同時就法律寫入到了各自賬目中。而不用考慮如何保證牧師q 第四步寫入的法律會導致不一致,因為法律如果沒有通過則還有更多的選舉來保證一致性。後面也談到了當法律第一次別寫入到賬目中算通過法律。 初始協議(Preliminary Protocol)要求每個牧師都保存 (i) 他發起的每個選舉; (ii) 他投的每個贊成票; (iii) 他發送的每個$LastVote$。為了簡化牧師需要保存的數據,我們對上面的協議做一個限制,得到基礎(Basic Protocol)協議。首先介紹三個新的參數:
lastTried[p] 牧師p 發起的最後一個選舉
prevVote[p] 牧師p 最近一次的投票
nextBal[p] 收到的選舉編號的b 的最大值,即牧師p參加的最大選舉編號
在初始協議中,每個牧師可以同時發起任意個選舉,在基礎協議中要求每個牧師只能發起一個選舉lastTried[p],一旦發起一個選舉,那麼之前發起選舉的信息就都不重要了。在初始協議中要求每個牧師不能在b_bal 和b 之間投贊成票,在基礎協議中則更嚴格地要求不能給小於b 的選舉投贊成票。那麼基礎協議可以概述為下面幾步:
1. 牧師p 選擇一個大於lastTried[p] 的選舉編號b ,發送NextBallot(b)給其他牧師
2. 牧師q 收到NextBallot(b) 且b>nextBal[q]後設置nextBal[q]=b ,接著發送LastVote(b,v) 給牧師p,其中v==prevBa[q] 。(如果b 小於或等於nextBal[q],則不回復)
3. 從滿足某個大部分集合Q 中每個牧師收到了LastVote(b,v) 信息,牧師p 發起一個編號為b ,法定人數為Q ,法律為d(滿足B3 )的選舉,並將BeginBallot(b,d) 發送給Q 中每個牧師。(如果沒有滿足任意大部分集合Q 的牧師返回,則返回第一步)
4. 牧師q 收到BeginBallot(b,d) ,決定投贊成票,設置prevVote[p] 為這次投票,並發送Vote(b,q) 給牧師p。(如果在收到BeginBallot(b,d) 後發現b 不等於nextBal[q] 則忽略這條信息,說明這期間牧師q 還收到了其他的編號更大的選舉)
5. 牧師p 從大部分集合Q 中每個牧師q 收到了Voted(b,d) ,且b==lastTried[p] ,則認為這次選舉成功,將法律d 記錄在賬目中,並向Q 中每個牧師q 發功成功消息Success(d) 。
6. 每個牧師q 收到Success(d) 消息後將法律寫入賬目。
基礎協議是初始協議的限製版,因為兩者都對牧師沒有行為要求,所以也不保證過程(QS)。下面介紹一個保證過程的協議— 完整議會協議(complete Synode protocol)。 基礎協議保證了一致性卻沒有保證任何過程,因為它只闡述了牧師可能做什麼,沒有要求牧師應該做什麼。為了達到之前談到的過程需求(Qrogress Requirements),我們需要添加一些額外的要求使得牧師們盡快執行完2-6 步。
考慮一種情況如果牧師q 第二步收到的選舉編號b 都比之前收到的要大,那麼他就要放棄之前收到的所有選舉。可是在選舉編號為b 的選舉在未確認前,可能又會收到更大編號的選舉b』 ,這樣就無法通過任何法律,過程也不能保證。所以為了達到過程需求則需要一個選舉成功後再發起另一個選舉。而首先應該知道服務員傳遞消息和牧師處理消息的時間,在網路中常常通過設置timeout 來實現,同樣的如果超過了一定時間牧師沒有收到服務員的回復,則認為該服務員或者對應的牧師離開了議會大廳。
假設牧師執行一個動作在7 分鍾以內,服務員傳遞一個消息在4 分鍾以內,那麼一個牧師p 發送消息給牧師q ,希望其回復的時間應該是在22 分鍾內(7+4+7+4 分鍾)。
有了上面時間的假設,再考慮上面討論過的情況,如果發起選舉的牧師p 會在第二步和第四步期望22 分鍾內收到其他牧師的回復,如果沒有則可能是一些牧師或者服務員離開了議會大廳,或者還有一些牧師發起了編號更大的選舉。遇到這兩種情況都牧師p 應該終止本次選舉,而重新開始發起一個新的選舉,為了不至於新發起的選舉編號還是太小而仍不能執行,需要從其他牧師哪裡獲取最新的選舉編號,從而選取一個更大的編號發起選舉。
進而假設牧師p 是唯一能夠發起選舉的牧師且議會大廳內有大部分集合的牧師,那麼可以保證在99分鍾內通過一條法律:22 分鍾內發現了有更大編號的法律,22 分鍾內獲取最大編號並選擇個更大的編號,55 分鍾內完成1-6 步完成一次成功的選舉(疑問:既然只有牧師p 能夠發起選舉,那麼編號都是由其控制的,前兩步發現並選擇更大的編號似乎就沒有必要了。答:並不是所有的選舉都是president發起的,其他牧師發起選舉,president向其他希望發起選舉的牧師配發選舉編號)。從上面的過程我們發現完整議會協議需要一個選舉president的過程,president的選舉演算法不是文章重點,所以文章中僅用T 分鍾代替了選舉president的時間,這樣T+99 分鍾內可以通過一部法律。
文中選擇president的方法是誰的姓在字母表中最後,並將自己的姓發送給議會大廳內所有牧師,如果在T-11 分鍾內某個牧師沒有收到比自己姓在字母表中更靠後的姓,則認為自己是president(我覺得廣播體重也應該不錯,不是說體重更重的呆在議會大廳會更久么?^_^)。還有一個細節:在選舉president的時候每個牧師p 需要將自己的lastTried[p] 發送給其他牧師,以使得president能夠在第一次選舉時選擇一個足夠大的編號。
至此,通過選舉president和設置超時,完整議會協議就可以保證過程了。
多法律國會協議
上節的議會協議(complete Synod protocol)中,president被選舉出來後,每個希望發起選舉的牧師通知他,president給牧師配發選舉編號,每次僅通過一部法律。多法律國會協議(The Multi-Decree Parliment)選擇一個president通過一系列法律,且只需要執行前兩步一次即可。
具體方法是president第一步發送NextBallot(b,n) 代替NextBallot(b) ,表示希望通過n-b 之間的所有的法律,在president 的賬目上,編號n 之前的法律都是連續記錄了的,b>n 。其他牧師q 收到消息後將每部已經出現在其賬目中編號大於$n$的法律都返回給president,不在賬目上的返回正常的LastVote 信息。
下面談到多法律國會協議有關性質,首先是法律的順序,不同法律編號的選舉同時進行,發起選舉的每個牧師都認為自己是president(不知道president 是怎麼選舉出來的,也不知道法律通過的順序)。在完整議會協議第三步中法律被提議,第一次寫入到賬目上時稱法律被通過。當一個president需要提出新的法案時,他必須從大部分集合牧師中學習到那麼法律他們都投了贊成票,每部法律都被大部分集合牧師中至少一個牧師投了票,所以president發起新的選舉前總能學到所有之前通過了的法律。president不會在空缺的法律編號內填補重要的法律。,也不會亂序提議法律,所以協議滿足「法律有序性」:如果法律A 和法律B 都是重要的法律,法律A 在法律B 提議之前通過,那麼法律A 有比法律B 更低的法律編號。第二點屬性是president在選舉出後且沒有人再進出議會大廳,法律是按照下面步驟不斷通過的(對應完整議會協議的3-5步):
3. president 向一個法定人數牧師中每個牧師發送BeginBallot ;
4.每個牧師向president 發送Voted 信息。
5.president向每個牧師發送Success 消息。這樣通過每部法律只需要三次消息傳遞,通過合並BeginBallot 和Success 命令可以進一步減少消息傳遞。

Ⅵ Paxos 演算法的背景

Paxos 演算法解決的問題是一個分布式系統如何就某個值(決議)達成一致。一個典型的場景是,在一個分布式資料庫系統中,如果各節點的初始狀態一致,每個節點都執行相同的操作序列,那麼他們最後能得到一個一致的狀態。為保證每個節點執行相同的命令序列,需要在每一條指令上執行一個「一致性演算法」以保證每個節點看到的指令一致。一個通用的一致性演算法可以應用在許多場景中,是分布式計算中的重要問題。因此從20世紀80年代起對於一致性演算法的研究就沒有停止過。節點通信存在兩種模型:共享內存(Shared memory)和消息傳遞(Messages passing)。Paxos 演算法就是一種基於消息傳遞模型的一致性演算法。
不僅只用在分布式系統,凡是多個過程需要達成某種一致性的都可以用到Paxos 演算法。一致性方法可以通過共享內存(需要鎖)或者消息傳遞實現,Paxos 演算法採用的是後者。下面是Paxos 演算法適用的幾種情況:一台機器中多個進程/線程達成數據一致;分布式文件系統或者分布式資料庫中多客戶端並發讀寫數據;分布式存儲中多個副本響應讀寫請求的一致性。
Lamport 最初Paxos 演算法的論文The Part-Time Parliament 在理解起來比較有挑戰性,個人認為部分原因是Lamport 通過故事的方式來表述、解釋這個問題,所以在閱讀文章的時候讀者需要透過故事講的本身看到作者想說明什麼。比如文章中會有很多講到Paxos 文明沒有被發現和考證的,這些映射到實際系統中往往是簡單、大家都心知肚明的基礎,但如果讀者苦於想知道這些內容是什麼時,就上當了。下面章節安排如下:第二節對應原文的1.1-2.1。第三節對應原文2.2-3.2。

Ⅶ Paxos 演算法的數學問題

既然Lamport 是通過故事的方式提出Paxos 問題 ,我們就有必要簡述下這個問題:希臘島嶼Paxon 上的執法者(legislators,後面稱為牧師priest)在議會大廳(chamber)中表決通過法律,並通過服務員傳遞紙條的方式交流信息,每個執法者會將通過的法律記錄在自己的賬目(ledger)上。問題在於執法者和服務員都不可靠,他們隨時會因為各種事情離開議會大廳,並隨時可能有新的執法者(或者是剛暫時離開的)回到議會大廳進行法律表決,使用何種方式能夠使得這個表決過程正常進行,且通過的法律不發生矛盾。
說明:不難看出故事中的議會大廳就是我們的分布式系統,每個牧師就是對應的每個節點或者進程,服務員傳遞紙條的過程即通信的過程,法律即是我們需要保證一致性的值(value)。牧師和服務員的進出對應著節點/網路的失效和加入,牧師的賬目對應節點持久化存儲設備。上面表決過程正常進行可以進一步表述為過程需求(progress requirements):當大部分牧師在議會大廳呆了足夠長時間,且期間沒有牧師進入或者退出,那麼提出的法案應該被通過並被記錄在每個牧師的賬目上。 Paxon 中的法律通過投票(ballots,也有翻譯成選舉)完成,每次投票涉及到的一群牧師稱為法定人數(quorum),當且僅當法定人數中的所有牧師都贊成這個法案時,投票成功並通過該法律。每次投票B 包含以下內容:
B_dec 正在進行的投票
B_qrm 法定人數牧師的集合(非空牧師集合)
B_vot 贊成的牧師集合
B_bal 投票編號
有了以上定義,我們看出投票B 通過的充要條件是:B_qrm 屬於 B_vot。接著我們定義B 為一次投票的集合,並說明投票如果滿足下面三個條件,那麼一致性可以得到保證。實際中每一次投票都可以看做是一次讀寫請求,所有法定人數的牧師贊成才通過法律表示:所有涉及到這次請求的節點都同時響應請求(比如更新某個值)才能保證一致性。這里選舉編號(B_bal)的大小代表選舉發起的先後順序。下面給出三個重要的定義:
B1(B) B 中每個選舉都有一個獨一無二的選舉編號。
B2(B) B 中每兩個選舉至少有一個共同的牧師。
B3(B) B 中每一次選舉B ,如果其法定人數中任意牧師在之前的一次選舉中贊成,那麼這次選舉B 等於之前一次所有B 中牧師贊成的選舉,。即新的法律等於所有參與選舉牧師中投贊成票的法律。
說明:看到這里,讀者八成已經很迷糊了,下面我們以一個版本更新的分布式key-value 資料庫為例,每個key-value 有多個副本,如果客戶端發起一個update(key,vaule) 的操作,則會產生由一個節點發起、相關節點進行響應的一次一致性操作,即選舉B。對保存了該key-value 的副本進行更新。需要注意的是法定人數牧師(B_qrm)是例子中所有保存這個key-value 副本的節點的一個大部分子集,因為可能在某些時候某些保存這個key-value 副本的節點不可達。B 是關於某個key-value 的一系列更新操作,不同的法律實際上是一個key-value 的不同值。那麼B1-B3就好明白了,B1指一次只進行一個更新操作;B2指每兩次更新操作必須有共同的節點參與;B3指某次key-value 操作的key-value 值與所有參與節點中之前進行投贊成票的最新值一致。這是因為如果某個節點在之前已經投票,說明它已經確認可以修改該值,而其他法定人數的牧師/節點還沒有確認該值。
下面說明為什麼B1-B3 蘊含一致性!
引理1.1 如果B1(B),B2(B)$ 和B3(B) 滿足,那麼對於在B中的任意B 和B』 ,有

證明略,有興趣的可以參考原文
定理1.2 如果B1(B),B2(B) 和B3(B) 滿足,那麼對於在B 中的任意B 和B』 ,有

證:如果$B』_bal=B_bal 那麼由B1(B) 可知B』=B 。如果B』_bal 不等於 B_bal ,那麼總有一個編號大、一個小,根據引理1.1 可得。
定理1.3 b>B_bal 且對於所有B 中的B 都有Q 和 B_qrm 交集不為空。有一個選舉B』 滿足B』_bal=b、B』_qrm=B』_vot=Q,那麼如果B1(B)、B2(B)、B3(B)滿足,則B1(B並B』)、B1(B並B』)、B1(B並B』) 也滿足。
證明略,見原文。
這個定理說的是在一個選舉集合B 之後的每次成功選舉,只要和之前集合中每次選舉都有交集,那麼這些成功的選舉合並選舉集合B 滿足一致性。

Ⅷ 如何淺顯易懂地解說 Paxos 的演算法

Paxos演算法解決的問題是在一個可能發生消息可能會延遲、丟失、重復的分布式系統中如何就某個值達成一致,保證不論發生以上任何異常,都不會破壞決議的一致性。

一個典型的場景是,在一個分布式資料庫系統中,如果各節點的初始狀態一致,每個節點都執行相同的操作序列,那麼他們最後能得到一個一致的狀態。為保證每個節點執行相同的命令序列,需要在每一條指令上執行一個「一致性演算法」以保證每個節點看到的指令一致。

一個通用的一致性演算法可以應用在許多場景中,是分布式計算中的重要問題。 節點通信存在兩種模型:共享內存和消息傳遞。Paxos演算法就是一種基於消息傳遞模型的一致性演算法。

分析Paxos演算法的目的

Paxos演算法的目的是為了解決分布式環境下一致性的問題。多個節點並發操縱數據,如何保證在讀寫過程中數據的一致性,並且解決方案要能適應分布式環境下的不可靠性(系統如何就一個值達到統一)。

Paxos演算法中,可分為4種角色:

Ⅸ 如何淺顯易懂地解說 Paxos 的演算法

Paxos真的並不是很容易理解,而且最初版本的Paxos也不能實現,相對而言一些變種演算法更加容易理解,而且在工程實現上也比較簡單。

其實看論文確實是最有效的,但卻不是最高效的。理解運作過程也好,推導過程也好,大家的回答都是為了幫助大家更高效的掌握這門演算法。大家的回答已經很好, 我這里作為補充,也是算另一個角度,幫助大家去理解paxos的數學推導過程,寫了這么一篇文章:Paxos理論介紹(1): 樸素Paxos演算法理論推導與證明 - 分布式一致性與高可用實踐 - 知乎專欄。希望能幫到大家。

閱讀全文

與選舉演算法paxos相關的資料

熱點內容
2b2t伺服器怎麼獲得許可權 瀏覽:815
c語言javaphp 瀏覽:804
程序員技術不分高低嗎 瀏覽:619
dos不是內部或外部命令 瀏覽:708
PC機與單片機通訊 瀏覽:674
二級加密圖 瀏覽:113
壓縮機異音影響製冷嗎 瀏覽:711
德斯蘭壓縮機 瀏覽:490
程序員太極拳視頻 瀏覽:531
網上購買加密鎖 瀏覽:825
安卓為什麼軟體要隱私 瀏覽:83
虛擬主機管理源碼 瀏覽:811
java圖形圖像 瀏覽:230
單片機輸出口電平 瀏覽:486
java配置資料庫連接 瀏覽:479
java多態的體現 瀏覽:554
java的split分隔符 瀏覽:128
跪著敲代碼的程序員 瀏覽:238
web和php有什麼區別 瀏覽:120
加密的電梯卡怎麼復制蘋果手機 瀏覽:218