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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

一致性算法- Paxos

發(fā)布時(shí)間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一致性算法- Paxos 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一致性算法- Paxos

Paxos是一種基于消息傳遞的分布式一致性算法,由Leslie Lamport(萊斯利·蘭伯特)于1990提出。是目前公認(rèn)的解決分布式一致性問(wèn)題的最有效算法之一。

Paxos 是什么

Paxos協(xié)議是一個(gè)解決分布式系統(tǒng)中,多個(gè)節(jié)點(diǎn)之間就某個(gè)值(提案)達(dá)成一致(決議)的通信協(xié)議。它能夠處理在少數(shù)節(jié)點(diǎn)離線的情況下,剩余的多數(shù)節(jié)點(diǎn)仍然能達(dá)成一致。

概念定義

Proposal:為了就某一個(gè)值達(dá)成一致而發(fā)起的提案,包括提案編號(hào)和提案的值。

涉及角色如下:
  
  Proposer:提案發(fā)起者,為了就某一個(gè)值達(dá)成一致,Proposer可以以任意速度、發(fā)起任意數(shù)量的提案,可以停止或重啟。
  
  Acceptor:提案批準(zhǔn)者,負(fù)責(zé)處理接收到的提案,響應(yīng)、作出承諾、或批準(zhǔn)提案。
  
  Learner:提案學(xué)習(xí)者,可以從Acceptor處獲取已被批準(zhǔn)的提案。

Paxos 協(xié)議

Paxos需要遵循如下約定:

  • 一個(gè)Acceptor必須批準(zhǔn)它收到的第一個(gè)提案。

  • 如果編號(hào)為n的提案被批準(zhǔn)了,那么所有編號(hào)大于n的提案,其值必須與編號(hào)為n的提案的值相同。

  • Paxos 協(xié)議是一個(gè)兩階段協(xié)議,分為Prepare 階段 和 Accept階段。

    Prepare 階段

    Proposer 發(fā)送 Prepare

    Proposer 生成一個(gè)全局唯一且遞增的提案ID,向 Acceptor 發(fā)送請(qǐng)求,只攜帶提案ID即可。

    Acceptor 應(yīng)答 Prepare

    Acceptor 接收到提案請(qǐng)求后,如下情況會(huì)收到應(yīng)答

    • 當(dāng)前提交的編號(hào)大于之前的其他機(jī)器 Prepare 的編號(hào),

    • 當(dāng)前是第一個(gè)提交 Prepare 的機(jī)器

    Accept 階段

    Proposer 發(fā)送 Accept

    如果Proposer收到半數(shù)以上Acceptor對(duì)其發(fā)出的編號(hào)為N的Prepare請(qǐng)求的響應(yīng),那么它就會(huì)發(fā)送一個(gè)針對(duì)[N,V]提案的Accept請(qǐng)求給半數(shù)以上的Acceptor。注意:V就是收到的響應(yīng)中編號(hào)最大的提案的value,如果響應(yīng)中不包含任何提案,那么V就由Proposer自己決定。

    Acceptor 應(yīng)答 Accept

    如果Acceptor收到一個(gè)針對(duì)編號(hào)為N的提案的Accept請(qǐng)求,只要該Acceptor沒(méi)有對(duì)編號(hào)大于N的Prepare請(qǐng)求做出過(guò)響應(yīng),它就接受該提案。

    Learner

      一旦Acceptor批準(zhǔn)了某個(gè)提案,即將該提案發(fā)給所有的Learner。為了避免大量通信,Acceptor也可以將批準(zhǔn)的提案,發(fā)給主Learner,由主Learner分發(fā)給其他Learner。考慮到主Learner單點(diǎn)問(wèn)題,也可以考慮Acceptor將批準(zhǔn)的提案,發(fā)給主Learner組,由主Learner組分發(fā)給其他Learner。

    Paxos 算法演示

    死循環(huán)問(wèn)題

      如果Proposer1提出編號(hào)為n1的提案,并完成了階段一。與此同時(shí)Proposer2提出了編號(hào)為n2的提案,n2>n1,同樣也完成了階段一。于是Acceptor承諾不再批準(zhǔn)編號(hào)小于n2的提案,當(dāng)Proposer1進(jìn)入階段二時(shí),將會(huì)被忽略。同理,此時(shí),Proposer1可以提出編號(hào)為n3的提案,n3>n2,又會(huì)導(dǎo)致Proposer2的編號(hào)為n2的提案進(jìn)入階段二時(shí)被忽略。以此類推,將進(jìn)入死循環(huán)。

      解決辦法

      可以選擇一個(gè)Proposer作為主Proposer,并約定只有主Proposer才可以提出提案。因此,只要主Proposer可以與過(guò)半的Acceptor保持通信,那么但凡主Proposer提出的編號(hào)更高的提案,均會(huì)被批準(zhǔn)。

    總結(jié)

    以上是生活随笔為你收集整理的一致性算法- Paxos的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。