代碼實(shí)現(xiàn)raft共識(shí)算法,并進(jìn)行Demo展示

參考資料:


源碼地址:https://github.com/corgi-kx/blockchain_consensus_algorithm/tree/master/raft

本demo為raft的代碼實(shí)現(xiàn)确徙,如果想了解raft的詳細(xì)信息請(qǐng)自行谷歌
本demo展示了raft的部分功能,寫的并不嚴(yán)謹(jǐn),僅作為對(duì)raft的了解用途

實(shí)現(xiàn)功能:

  • 節(jié)點(diǎn)狀態(tài)分為Leader(領(lǐng)導(dǎo)者)、Follower(追隨者)域醇、Candidate(候選人)
  • 節(jié)點(diǎn)間隨機(jī)成為candidate狀態(tài)并選舉出Leader,且同時(shí)僅存在一個(gè)Leader
  • Leader節(jié)點(diǎn)定時(shí)發(fā)送心跳檢測至其他Follower節(jié)點(diǎn)
  • Follower節(jié)點(diǎn)們超過一定時(shí)間未收到心跳檢測蓉媳,則Follower節(jié)點(diǎn)們重新開啟選舉
  • 客戶端通過http發(fā)送消息到節(jié)點(diǎn)A譬挚,如果A不是Leader則轉(zhuǎn)發(fā)至Leader節(jié)點(diǎn)
  • Leader收到客戶端的消息后向Follower節(jié)點(diǎn)進(jìn)行廣播
  • Follower節(jié)點(diǎn)收到消息,反饋給Leader酪呻,等待Leader確認(rèn)
  • Leader收到全網(wǎng)超過二分之一的反饋后减宣,本地進(jìn)行打印,然后將確認(rèn)收到反饋的信息提交到Follower節(jié)點(diǎn)
  • Follower節(jié)點(diǎn)收到確認(rèn)提交信息后玩荠,打印消息


運(yùn)行步驟:


1.下載/編譯
 git clone https://github.com/corgi-kx/blockchain_consensus_algorithm.git
 cd blockchain_consensus_algorithm/raft
 go build -o raft.exe
2.開啟三個(gè)端口蚪腋,并分別執(zhí)行raft.exe A 丰歌、raft.exe B 姨蟋、 raft.exe C屉凯,代表開啟三個(gè)節(jié)點(diǎn)(初始狀態(tài)為追隨者)
3.三個(gè)節(jié)點(diǎn)會(huì)隨機(jī)選舉出領(lǐng)導(dǎo)者(其中A節(jié)點(diǎn)默認(rèn)監(jiān)聽來自http的訪問),成功的節(jié)點(diǎn)會(huì)發(fā)送心跳檢測到其他兩個(gè)節(jié)點(diǎn)
4.此時(shí)打開瀏覽器用http訪問本地節(jié)點(diǎn)8080端口,帶上節(jié)點(diǎn)需要同步打印的消息眼溶,比如:

http://localhost:8080/req?message=噢悠砚,我的上帝呀


可以看到三個(gè)節(jié)點(diǎn)同時(shí)打印了消息,本段數(shù)據(jù)同步步驟可以用下圖進(jìn)行理解(不過缺少了4.1步驟)
在這里插入圖片描述

5.如果領(lǐng)導(dǎo)者節(jié)點(diǎn)宕機(jī)了怎么辦呢堂飞,我們嘗試關(guān)閉領(lǐng)導(dǎo)者節(jié)點(diǎn)B

可以發(fā)現(xiàn)關(guān)閉領(lǐng)導(dǎo)者B后灌旧,節(jié)點(diǎn)間有個(gè)超時(shí)機(jī)制,如果超過一定時(shí)間沒有收到心跳檢測绰筛,則會(huì)自動(dòng)開始重新進(jìn)行選舉枢泰,此時(shí)A當(dāng)選了新的領(lǐng)導(dǎo)者

6.再次打開瀏覽器用http訪問本地節(jié)點(diǎn)8080端口,帶上節(jié)點(diǎn)需要同步打印的消息铝噩,看看還能同步打印嗎

http://localhost:8080/req?message=天氣不錯(cuò)


結(jié)果發(fā)現(xiàn)可以打印的衡蚂,因?yàn)樾碌念I(lǐng)導(dǎo)者A、追隨者C并沒有宕機(jī)骏庸,A收到了C的回饋(2>3/2)超過了全網(wǎng)一半的節(jié)點(diǎn)毛甲,所以是可以進(jìn)行打印數(shù)據(jù)的

7.重新啟動(dòng)節(jié)點(diǎn)B,B自動(dòng)變?yōu)樽冯S者狀態(tài)具被,并接收來自新的領(lǐng)導(dǎo)者A的心跳檢測



???建了個(gè)QQ群:722124200 有問題可以加群互相討論 :)
???郵箱:mikesen1994@gmail.com ?????? ?? ???? ? vx:965952482

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末玻募,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子一姿,更是在濱河造成了極大的恐慌七咧,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叮叹,死亡現(xiàn)場離奇詭異艾栋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)衬横,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門裹粤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蜂林,你說我怎么就攤上這事遥诉。” “怎么了噪叙?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵矮锈,是天一觀的道長。 經(jīng)常有香客問我睁蕾,道長苞笨,這世上最難降的妖魔是什么债朵? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮瀑凝,結(jié)果婚禮上序芦,老公的妹妹穿的比我還像新娘。我一直安慰自己粤咪,他們只是感情好谚中,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寥枝,像睡著了一般宪塔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上囊拜,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天某筐,我揣著相機(jī)與錄音,去河邊找鬼冠跷。 笑死南誊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蔽莱。 我是一名探鬼主播弟疆,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼盗冷!你這毒婦竟也來了怠苔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤仪糖,失蹤者是張志新(化名)和其女友劉穎柑司,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锅劝,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡攒驰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了故爵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玻粪。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖诬垂,靈堂內(nèi)的尸體忽然破棺而出劲室,到底是詐尸還是另有隱情,我是刑警寧澤结窘,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布很洋,位于F島的核電站,受9級(jí)特大地震影響隧枫,放射性物質(zhì)發(fā)生泄漏喉磁。R本人自食惡果不足惜谓苟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望协怒。 院中可真熱鬧涝焙,春花似錦、人聲如沸斤讥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芭商。三九已至,卻和暖如春搀缠,著一層夾襖步出監(jiān)牢的瞬間铛楣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工艺普, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留簸州,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓歧譬,卻偏偏與公主長得像岸浑,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瑰步,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355