曰本美女∴一区二区特级A级黄色大片, 国产亚洲精品美女久久久久久2025, 页岩实心砖-高密市宏伟建材有限公司, 午夜小视频在线观看欧美日韩手机在线,国产人妻奶水一区二区,国产玉足,妺妺窝人体色WWW网站孕妇,色综合天天综合网中文伊,成人在线麻豆网观看

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么需要分布式共識(shí)算法

科技綠洲 ? 來源:Linux開發(fā)架構(gòu)之路 ? 作者:Linux開發(fā)架構(gòu)之路 ? 2023-11-10 10:18 ? 次閱讀

分布式共識(shí)算法

首先我們先明確這個(gè)問題:為什么需要分布式共識(shí)算法?

這就要從當(dāng)前的分布式系統(tǒng)設(shè)計(jì)的缺陷來看了,假設(shè)我們的集群現(xiàn)在有兩個(gè)客戶端和三個(gè)服務(wù)端,如下圖:

圖片

在這個(gè)分布式系統(tǒng)的設(shè)計(jì)中,往往要滿足CAP理論,而分布式共識(shí)算法解決的就是CAP理論中的一致性問題。整個(gè)一致性問題分為三種問題:

  • 順序一致性
  • 線性一致性
  • 因果一致性

順序一致性

順序一致性是1979年Lamport 在論文《How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs 》中提出::假設(shè)執(zhí)行結(jié)果與這些處理器以某一串行順序執(zhí)行的結(jié)果相同,同時(shí)每個(gè)處理器內(nèi)部操作的執(zhí)行看起來又與程序描述的順序一致。滿足該條件的多處理器系統(tǒng)我們就認(rèn)為是順序一致的。實(shí)際上,處理器可以看做一個(gè)進(jìn)程或者一個(gè)線程,甚至是一個(gè)分布式系統(tǒng)。

這句話并不是很好理解,我們看一下分布式系統(tǒng)中順序一致性的一個(gè)例子:

假設(shè)客戶端A有兩條命令:

command1:set(x,1) //設(shè)置x為1
command2:set(x,3)

客戶端B有一下兩條命令:

command3:get(x) //得到x的當(dāng)前值
command4:set(x,4)

那么如果服務(wù)端那邊收到的節(jié)點(diǎn)只要滿足command2在command1后面執(zhí)行并且comand4在command3后面執(zhí)行我們就認(rèn)為其滿足順序一致性。

圖片

線性一致性

線性一致性或稱原子一致性或嚴(yán)格一致性,指的是程序在執(zhí)行順序組合中存在可線性化點(diǎn)P的執(zhí)行模型,這意味著一個(gè)操作將在程序的調(diào)用和返回之間的某個(gè)點(diǎn)P生效,之后被系統(tǒng)中并發(fā)運(yùn)行的所有其他線程所感知。線性一致性概念是1990年 Maurice Herlihy · Jeannette M Wing 在論文《Linearizability: A Correctness Condition for Concurrent Objects》中提出。

通俗來講,線性一致性可以說是順序一致性的升級(jí)版。其會(huì)有一個(gè)全局時(shí)鐘,假設(shè)還是上面發(fā)送的命令,只不過加上了時(shí)間信息:

客戶端A發(fā)送的命令如下:

[14:01]command1:set(x,1) //設(shè)置x為1
[14:02]command2:set(x,3)

客戶端B發(fā)送的命令如下:

[14:03]command3:get(x) //得到x的當(dāng)前值
[14:04]command4:set(x,4)

注:這里假設(shè)時(shí)延可能是幾分鐘級(jí)別的,所以有可能是command3在command1之前到

所以,假設(shè)初始值x = 0,而我們到達(dá)的順序如下:

command1->command3->command2->command4
command1->command3->command4->command2
...

這個(gè)順序確實(shí)是滿足順序一致性,但是我們get(x)獲得的值可謂是千奇百怪,可能是0,1,3 。為了解決順序一致性的不足,所以才提出的線性一致性。其要求命令滿足全局時(shí)鐘的時(shí)序性。所以很容易就知道,滿足線性一致性的一定滿足順序一致性;相反,滿足順序一致性的不一定會(huì)滿足線性一致性。

圖片

因果一致性

線性一致性要求所有線程的操作按照一個(gè)絕對(duì)的時(shí)鐘順序執(zhí)行,這意味著線性一致性是限制并發(fā)的,否則這種順序性就無法保證。由于在真實(shí)環(huán)境中很難保證絕對(duì)時(shí)鐘同步,因此線性一致性是一種理論。實(shí)現(xiàn)線性一致性的代價(jià)也最高,但是實(shí)戰(zhàn)中可以弱化部分線性一致性:只保證有因果關(guān)系的事件的順序,沒有因果關(guān)系的事件可以并發(fā)執(zhí)行,其指的是假設(shè)有兩個(gè)事件:A事件和B事件,如果A發(fā)生在B后面,那么就稱A和B具有因果關(guān)系。

Raft 算法

Paxos和Raft這些分布式共識(shí)算法就是用來多個(gè)節(jié)點(diǎn)之間達(dá)成共識(shí)的,其可以解決一定的一致性問題。其中Paxos難以理解,所以這篇博客以介紹Raft算法為主。

Raft是工程上使用較為廣泛的強(qiáng)一致性、去中心化、高可用的分布式協(xié)議。遵從此協(xié)議的分布式集群會(huì)對(duì)某個(gè)事情達(dá)成一致的看法,即使是在部分節(jié)點(diǎn)故障、網(wǎng)絡(luò)延時(shí)、網(wǎng)絡(luò)分割的情況下。

原理概覽

遵循Raft算法的分布式集群中每個(gè)節(jié)點(diǎn)扮演以下三種角色之一:

  • leader:領(lǐng)導(dǎo)者,其負(fù)責(zé)和客戶端通信,接收來自客戶端的命令并將其轉(zhuǎn)發(fā)給follower
  • follower:跟隨者,其一絲不茍的執(zhí)行來自leader的命令
  • candidate:候選者,當(dāng)follower長時(shí)間沒收到 leader的消息就會(huì)揭竿而起成為候選者,搶奪成為leader的資格

從上面的描述我們可以看到節(jié)點(diǎn)的角色不是固定的,其會(huì)在三個(gè)角色中轉(zhuǎn)換。我們舉個(gè)例子來說,假設(shè)我們有三個(gè)節(jié)點(diǎn)A、B、C,它們的基本信息如下圖中。一開始所有的節(jié)點(diǎn)都是follower狀態(tài),并且處于時(shí)期0這個(gè)狀態(tài)。

圖片

注:在Raft算法中,所有節(jié)點(diǎn)會(huì)被分配不同的超時(shí)時(shí)間,時(shí)間限定在150ms~300ms之間。為什么這么設(shè)置是因?yàn)槿绻O(shè)置相同的超時(shí)時(shí)間就會(huì)導(dǎo)致所有節(jié)點(diǎn)同時(shí)過期會(huì)導(dǎo)致遲遲選不出leader,看到后面就會(huì)明白。

150ms過去之后,A發(fā)現(xiàn)怎么leader沒跟我聯(lián)絡(luò)聯(lián)絡(luò)感情,是不是leader已經(jīng)寄了?王侯將相寧有種乎!于是A成為候選人給自己投了一票并開創(chuàng)自己的時(shí)代時(shí)期 1,并給其他還沒過期的follower發(fā)送信息請(qǐng)求它們支持自己當(dāng)leader。

圖片

節(jié)點(diǎn)B和C在收到來自A的消息之后,又沒有收到其他要求稱王者的信息,于是就選擇支持A節(jié)點(diǎn),加入A的時(shí)代并刷新自己的剩余時(shí)間。

圖片

之后 A得到了超過一半的節(jié)點(diǎn)支持,成為leader,并定時(shí)給B和C聯(lián)絡(luò)聯(lián)絡(luò)感情(心跳信息)目的是防止有節(jié)點(diǎn)因?yàn)殚L時(shí)間收不到開始反叛成candidate。

圖片

之后整個(gè)分布式集群就可以和客戶端開始通信了,客戶端會(huì)發(fā)送消息給leader,之后leader會(huì)保證集群的一致性并且當(dāng)整個(gè)集群中的一半節(jié)點(diǎn)都完成客戶端發(fā)送的命令之后才會(huì)真正的返回給客戶端,表示完成此次命令。

圖片

但是這只是個(gè)概況,我們還缺了億點(diǎn)點(diǎn)細(xì)節(jié):

  • 選舉機(jī)制
  • 日志復(fù)制

選舉機(jī)制

剛剛我們講了最普通的一個(gè)選舉過程,但是我們可能還會(huì)遇到一些特殊情況:

  • 新加入節(jié)點(diǎn)
  • leader 掉線
  • 多個(gè)follower同時(shí)超時(shí)

新節(jié)點(diǎn)加入

當(dāng)有一個(gè)節(jié)點(diǎn)加入當(dāng)前的分布式集群的時(shí)候,leader會(huì)檢測并發(fā)現(xiàn)它并給他發(fā)送消息。使其加入此分布式集群。

圖片

leader 掉線處理

假設(shè)我們現(xiàn)在的服務(wù)器A掉線,由于沒有l(wèi)eader維持心跳消息,這個(gè)時(shí)候服務(wù)器B和C會(huì)進(jìn)入超時(shí)倒計(jì)時(shí)的狀態(tài)。

圖片

200ms過去,服務(wù)器B開始超時(shí)了,這個(gè)時(shí)候它揭竿而起成為candidate,并向節(jié)點(diǎn)C發(fā)送消息請(qǐng)求其支持自己成為leader。

圖片

之后,在一系列判斷條件之后(后面會(huì)講),節(jié)點(diǎn)C會(huì)回復(fù)節(jié)點(diǎn)B的請(qǐng)求信息。插句題外話哈,在B還沒收到C的回復(fù)消息之前,假設(shè)A只是剛剛網(wǎng)絡(luò)不通暢,現(xiàn)在死而復(fù)生,給B發(fā)送消息了。那么B發(fā)現(xiàn)A的時(shí)期比自己落后了,這還等什么?!蒼天已死,黃天當(dāng)立,之后反手將其收為小弟。

圖片

之后節(jié)點(diǎn)B順利成為leader。

圖片

多個(gè) follower 同時(shí)掉線

現(xiàn)在假設(shè)有4個(gè)節(jié)點(diǎn):A、B、C、D。其中A和D的超時(shí)時(shí)間是相同的。

圖片

150ms過后,A和D同時(shí)成為candidate,爭相為了成為leader給B和C發(fā)消息。

圖片

這個(gè)時(shí)候有對(duì)于B和C有兩個(gè)選擇,一個(gè)是它們一起支持兩個(gè)中的一次,也就是要么支持A要么支持D,這樣這樣其中一個(gè)就會(huì)成為leader,我們假設(shè)它們兩個(gè)都支持A。

圖片

另外一種選擇就是,A和D各的一票支持,它們的支持者跟進(jìn)它們各自的leader的時(shí)期,然后本輪選舉結(jié)束。

圖片

之后50ms過去之后,B的超時(shí)時(shí)間過期了,其獲得candiate的資格,這個(gè)時(shí)候其會(huì)向其他follower發(fā)送消息請(qǐng)求支持。

圖片

之后A、B、D 因?yàn)楫?dāng)前的B也沒有支持者,所以就會(huì)支持B,B順利成為leader。

圖片

日志復(fù)制

當(dāng)我們的集群leader 選舉之后。Leader 接收所有客戶端請(qǐng)求,然后轉(zhuǎn)化為 log 復(fù)制命令,發(fā)送通知其他節(jié)點(diǎn)完成日志復(fù)制請(qǐng)求。每個(gè)日志復(fù)制請(qǐng)求包括狀態(tài)機(jī)命令 & 任期號(hào),同時(shí)還有前一個(gè)日志的任期號(hào)和日志索引。狀態(tài)機(jī)命令表示客戶端請(qǐng)求的數(shù)據(jù)操作指令,任期號(hào)表示 leader 的當(dāng)前任期,任期也就是上圖中的時(shí)期。

而當(dāng)follower 收到日志復(fù)制命令會(huì)執(zhí)行處理流程:

1、follower 會(huì)使用前一個(gè)日志的任期號(hào)和日志索引來對(duì)比自己的數(shù)據(jù):

  1. 如果相同,接收復(fù)制請(qǐng)求,回復(fù) ok;
  2. 否則回拒絕復(fù)制當(dāng)前日志,回復(fù) error;

2、leader 收到拒絕復(fù)制的回復(fù)后,繼續(xù)發(fā)送節(jié)點(diǎn)日志復(fù)制請(qǐng)求,不過這次會(huì)帶上更前面的一個(gè)日志任期號(hào)和索引;

3、如此循環(huán)往復(fù),直到找到一個(gè)共同的任期號(hào)&日志索引。此時(shí) follower 從這個(gè)索引值開始復(fù)制,最終和 leader 節(jié)點(diǎn)日志保持一致;

圖片

日志復(fù)制過程中,Leader 會(huì)無限重試直到成功。如果超過半數(shù)的節(jié)點(diǎn)復(fù)制日志成功,就可以任務(wù)當(dāng)前數(shù)據(jù)請(qǐng)求達(dá)成了共識(shí),即日志可以 commite 提交了;

注:這里要提到的一點(diǎn)就是,如果follower發(fā)現(xiàn)canidate的日志還沒有自己的新(索引號(hào)沒自己大),其是不會(huì)支持其成為leader的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19761

    瀏覽量

    233042
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3817

    瀏覽量

    82243
  • 分布式系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    147

    瀏覽量

    19494
  • CAP
    CAP
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    2197
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    分布式軟件系統(tǒng)

    、它可以解決組織機(jī)構(gòu)分散而數(shù)據(jù)需要相互聯(lián)系的問題。比如銀行系統(tǒng),總行與各分行處于不同的城市或城市中的各個(gè)地區(qū),在業(yè)務(wù)上它們需要處理各自的數(shù)據(jù),也需要彼此之間的交換和處理,這就需要
    發(fā)表于 07-22 14:53

    分布式系統(tǒng)的優(yōu)勢是什么?

    當(dāng)討論分布式系統(tǒng)時(shí),我們面臨許多以下這些形容詞所描述的 同類型: 分布式的、刪絡(luò)的、并行的、并發(fā)的和分散的。分布式處理是一個(gè)相對(duì)較新的領(lǐng)域,所以還沒有‘致的定義。與順序計(jì)算相比、并行的、并發(fā)的和
    發(fā)表于 03-31 09:01

    求一種基于FPGA分布式算法的濾波器設(shè)計(jì)的實(shí)現(xiàn)方案

    分布式的濾波器算法是什么?一種基于FPGA分布式算法的濾波器設(shè)計(jì)實(shí)現(xiàn)
    發(fā)表于 04-29 07:13

    請(qǐng)問一下基于分布式算法的FIR濾波器怎么實(shí)現(xiàn)

    FIR濾波器的原理及結(jié)構(gòu)是什么基于分布式算法的FIR濾波器的實(shí)現(xiàn)
    發(fā)表于 04-30 06:03

    如何設(shè)計(jì)基于分布式算法的FIR濾波器?

    FIR濾波器的原理及結(jié)構(gòu)是什么基于分布式算法的FIR濾波器的實(shí)現(xiàn)
    發(fā)表于 05-08 08:39

    各種分布式電源的電氣特性

    特性(主要包括電壓V、電流I、有功P、無功Q)不同,需要的建模方式也有所不同。1.常見的分布式電源2.分布式電源建模燃料電池是電力電子變換器接口型的潮流計(jì)算模型,它在潮流計(jì)算里面可以使用pq,pq節(jié)點(diǎn)來進(jìn)行處理。是嗎?是pq嗎?
    發(fā)表于 07-12 07:54

    如何高效完成HarmonyOS分布式應(yīng)用測試?

    作者:liuxun,HarmonyOS測試架構(gòu)師HarmonyOS是新一代的智能終端操作系統(tǒng),給開發(fā)者提供了設(shè)備發(fā)現(xiàn)、設(shè)備連接、跨設(shè)備調(diào)用等豐富的分布式API。隨著越來越多的開發(fā)者投入到
    發(fā)表于 12-13 18:07

    基于DSP的分布式并行遺傳算法

    基于DSP的分布式并行遺傳算法
    發(fā)表于 05-08 17:09 ?8次下載

    分布式協(xié)同過濾推薦算法

    針對(duì)原始的基于用戶( User-based)或基于評(píng)分項(xiàng)目(Item-based)的協(xié)同過濾推薦算法(CFR)大多采用硬分類聚類,且具有數(shù)據(jù)稀疏性和可擴(kuò)展性的問題,提出一種基于灰色關(guān)聯(lián)分析的分布式
    發(fā)表于 12-20 10:12 ?0次下載
    <b class='flag-5'>分布式</b>協(xié)同過濾推薦<b class='flag-5'>算法</b>

    Spark分布式下的模糊C均值算法

    針對(duì)聚類算法需要處理數(shù)據(jù)集的規(guī)模越來越大、時(shí)效性要求越來越高,對(duì)算法的大數(shù)據(jù)適應(yīng)能力和性能要求更高的問題,提出一種在Spark分布式內(nèi)存計(jì)算平臺(tái)下的模糊C均值(FCM)
    發(fā)表于 12-23 09:59 ?0次下載
    Spark<b class='flag-5'>分布式</b>下的模糊C均值<b class='flag-5'>算法</b>

    區(qū)塊鏈共識(shí)算法全面詳解

    解釋:PoW是是首個(gè)共識(shí)算法。它是由中本聰在他的論文中提出的,用于建立分布式無信任共識(shí)并識(shí)別“雙重支付”(double spend)問題。PoW并非一個(gè)新理念,但是中本聰將Pow與加密
    發(fā)表于 01-04 11:03 ?1.6w次閱讀
    區(qū)塊鏈<b class='flag-5'>共識(shí)</b><b class='flag-5'>算法</b>全面詳解

    快速在線分布式對(duì)偶平均優(yōu)化算法

    為提高分布式在線優(yōu)化算法的收斂速度,對(duì)底層網(wǎng)絡(luò)拓?fù)湟来翁磉?,提出一種快速的一階分布式在線對(duì)偶平均優(yōu)化( FODD)算法。首先,對(duì)于分布式在線
    發(fā)表于 01-22 14:45 ?5次下載
    快速在線<b class='flag-5'>分布式</b>對(duì)偶平均優(yōu)化<b class='flag-5'>算法</b>

    區(qū)塊鏈的共識(shí)算法是什么共有哪些類型

    共識(shí)機(jī)制就是用來解決分布式系統(tǒng)的一致性問題,其核心為在某個(gè)協(xié)議(共識(shí)算法)保障下,在有限的時(shí)間內(nèi),使得指定操作在分布式網(wǎng)絡(luò)中是一致的、被承認(rèn)
    發(fā)表于 03-12 11:09 ?5863次閱讀

    區(qū)塊鏈的真正價(jià)值是實(shí)現(xiàn)高效有序的大規(guī)模分布式協(xié)作

    分布式協(xié)作是未來的方向,其基礎(chǔ)是分布式業(yè)務(wù)共識(shí)。分布式業(yè)務(wù)共識(shí)實(shí)質(zhì)上是,在共識(shí)
    發(fā)表于 09-01 10:45 ?1929次閱讀

    基于分布式編碼的同步隨機(jī)梯度下降算法

    基于數(shù)據(jù)并行化的異步隨機(jī)梯度下降(ASGD)算法由于需要分布式計(jì)算節(jié)點(diǎn)之間頻繁交換梯度數(shù)據(jù),從而影響算法執(zhí)行效率。提出基于分布式編碼的同步
    發(fā)表于 04-27 13:56 ?2次下載
    基于<b class='flag-5'>分布式</b>編碼的同步隨機(jī)梯度下降<b class='flag-5'>算法</b>