tendermint 源碼解析之提議節(jié)點選舉

tendermint的proposer節(jié)點選舉

概述:

tendermint的proposer節(jié)點選舉過程不需要網(wǎng)絡通信清笨,而是根據(jù)config目錄下的genesis.json而決定的寒波。genesis.json文件中有一個配置項是“validators”,這個key對應的是一個validator的列表金麸,包含validator的pub_key和power。pub_key確定是哪個tendermint節(jié)點,power決定這個節(jié)點被選舉為proposer節(jié)點的頻率矗烛。

選舉算法詳解
  1. 加載并解析genesis.json玫镐,獲取每個節(jié)點的pub_key和power倒戏,power解析后保存在VotingPower中。
  2. 對每個validator的Accum進行賦值恐似,Accum的值為驗證節(jié)點的權重值杜跷。
    validatorsHeap := cmn.NewHeap()
    for _, val := range vals.Validators {
        // Check for overflow both multiplication and sum.
        val.Accum = safeAddClip(val.Accum, safeMulClip(val.VotingPower, int64(times)))
        validatorsHeap.PushComparable(val, accumComparable{val})
    }
  1. 選擇當次Accum值最大的為提議節(jié)點,同時對提議節(jié)點的的Accum值減去TotalVotinPower(所有驗證節(jié)點power的總和)
    for i := 0; i < times; i++ {
        mostest := validatorsHeap.Peek().(*Validator)
        // mind underflow
        mostest.Accum = safeSubClip(mostest.Accum, vals.TotalVotingPower())

        if i == times-1 {
            vals.Proposer = mostest
        } else {
            validatorsHeap.Update(mostest, accumComparable{mostest})
        }
    }

上面的代碼中都有一個times變量矫夷,這個變量在正常運行中都是1葛闷。如果當前節(jié)點中途崩潰重啟過,則times是它落后于集群的選舉次數(shù)双藕。

  1. 示例
    在這里假定genesis.json文件配置了三個驗證節(jié)點v1(192.168.1.110)淑趾、v2(192.168.1.111)、v3(192.168.1.112)忧陪,對應的power值分別為30扣泊、20近范、10,則power總量total=60延蟹。
  • 第一次選舉提議節(jié)點:
    v1.Accum : 30 (v1.Accum += v1.power)
    v2.Accum : 20 (v2.Accum += v2.power)
    v3.Accum : 10 (v3.Accum += v3.power)
    v1.Accum最大评矩,為本次proposer節(jié)點,同時v1.Accum -= 60
    最終v1.Accum : -30
  • 第二次提議階段選舉
    v1.Accum : 0 (v1.Accum += v1.power)
    v2.Accum : 40 (v2.Accum += v2.power)
    v3.Accum : 20 (v3.Accum += v3.power)
    v2.Accum最大阱飘,為本次proposer節(jié)點稚照,同時v2.Accum -= 60
    最終v2.Accum : -20
  • 第三次提議階段選舉
    v1.Accum : 30 (v1.Accum += v1.power)
    v2.Accum : 0 (v2.Accum += v2.power)
    v3.Accum : 30 (v3.Accum += v3.power)
    v1.Accum最大,為本次proposer節(jié)點(Accum值一樣大則按照地址有小到大排序)俯萌,同時v1.Accum -= 60
    最終v1.Accum : -30

                                         轉(zhuǎn)載請注明出處
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末果录,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子咐熙,更是在濱河造成了極大的恐慌弱恒,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棋恼,死亡現(xiàn)場離奇詭異返弹,居然都是意外死亡,警方通過查閱死者的電腦和手機爪飘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門义起,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人师崎,你說我怎么就攤上這事默终。” “怎么了犁罩?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵齐蔽,是天一觀的道長。 經(jīng)常有香客問我床估,道長含滴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任丐巫,我火速辦了婚禮谈况,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘递胧。我一直安慰自己碑韵,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布谓着。 她就那樣靜靜地躺著泼诱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赊锚。 梳的紋絲不亂的頭發(fā)上治筒,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天屉栓,我揣著相機與錄音,去河邊找鬼耸袜。 笑死友多,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的堤框。 我是一名探鬼主播域滥,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蜈抓!你這毒婦竟也來了启绰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤沟使,失蹤者是張志新(化名)和其女友劉穎委可,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腊嗡,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡着倾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了燕少。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卡者。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖客们,靈堂內(nèi)的尸體忽然破棺而出崇决,到底是詐尸還是另有隱情,我是刑警寧澤镶摘,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布嗽桩,位于F島的核電站岳守,受9級特大地震影響凄敢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜湿痢,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一涝缝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧譬重,春花似錦拒逮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至塔嬉,卻和暖如春玩徊,著一層夾襖步出監(jiān)牢的瞬間租悄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工恩袱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泣棋,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓畔塔,卻偏偏與公主長得像潭辈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子澈吨,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Paxos是什么 Paxos算法是基于消息傳遞且具有高度容錯特性的一致性算法把敢,是目前公認的解決分布式一致性問題最有...
    jiangmo閱讀 1,527評論 0 6
  • 本文轉(zhuǎn)載至:https://zhuanlan.zhihu.com/p/29706905 什么是paxos協(xié)議? P...
    夏海社長閱讀 511評論 0 0
  • 0.前言 本文記錄筆者學習和理解區(qū)塊鏈共識算法Paxos的點滴谅辣,文章比較長技竟,需要耐心來細細琢磨,筆者也是苦戰(zhàn)了一個...
    WallisW閱讀 3,222評論 2 14
  • 理解Paxos算法 1. 背景 Paxos是一種分布式一致性算法屈藐,該算法由Leslie Lamport在論文[Th...
    zeinwolf閱讀 1,446評論 0 0
  • Vue.js是我所喜愛的榔组,知乎也是我喜愛的,突發(fā)奇想使用vue做了一個知乎日報 項目地址: Github地址在線預...
    陳川Lethe閱讀 4,057評論 14 37