前天面試官問我了解不了解國內(nèi)的公鏈溪食,所以今天來整理一下國內(nèi)的幾個(gè)公鏈以及常見的共識算法
首先我們介紹一下共識算法的使用場景:對于需要貨幣體系的許可鏈大多用的是POW,POS,DPOS,而對于可信環(huán)境分為聯(lián)盟連和私有鏈娜扇,聯(lián)盟鏈一般使用PBFT,DBFT栅组,私鏈一般選用RAFT以及PAXOS.
1.布萌:
共識機(jī)制:PBFT:是基于拜占庭容錯(cuò)機(jī)制枢析,一致性的確保分為三部分:預(yù)準(zhǔn)備,準(zhǔn)備和確認(rèn)
2.NEO 共識機(jī)制:拜占庭容錯(cuò)委托DBFT
與PBFT對比:全網(wǎng)中的NEO節(jié)點(diǎn)分為兩類節(jié)點(diǎn):
一類為共識記點(diǎn)司浪,負(fù)責(zé)和其他共識記點(diǎn)之間進(jìn)行共識通訊把沼,產(chǎn)生新的區(qū)塊;另外一類為普通節(jié)點(diǎn)租谈,不參與共識捆愁,但能夠驗(yàn)證和接受新的區(qū)塊。共識節(jié)點(diǎn)由全網(wǎng)用戶通過投票產(chǎn)生昼丑。NEO節(jié)點(diǎn)提出dBFT的背后思想是:PBFT算法能夠很好的解決分布式節(jié)點(diǎn)的共識問題,但是PBFT共識參與節(jié)點(diǎn)數(shù)量越大性能就會越低页慷。采用投票選取出相對較小數(shù)量的共識節(jié)點(diǎn)內(nèi)部進(jìn)行PBFT共識生成新區(qū)塊胁附,然后將該新區(qū)塊發(fā)布到全網(wǎng)中達(dá)成全網(wǎng)共識.
產(chǎn)生新區(qū)塊的流程:(1)開啟共識的節(jié)點(diǎn)分為兩大類滓彰,非記賬人和記賬人節(jié)點(diǎn),非記賬人的不參與共識弓候,記賬人參與共識流程(2)選擇議長他匪,Neo議長產(chǎn)生機(jī)制是根據(jù)當(dāng)前塊高度和記賬人數(shù)量做MOD運(yùn)算得到,議長實(shí)際上按順序當(dāng)選(3)節(jié)點(diǎn)初始化依鸥,議長為primary節(jié)點(diǎn)悼沈,議員為backup節(jié)點(diǎn)姐扮。滿足出塊條件后議長發(fā)送PrepareRequest(4)議員收到請求后衣吠,驗(yàn)證通過簽名發(fā)送PrepareResponse(5)記賬節(jié)點(diǎn)接收到PrepareResponse后,節(jié)點(diǎn)保存對方的簽名信息缚俏,檢查如果超過三分之二則發(fā)送 block(6)節(jié)點(diǎn)接收到block惊搏,PersistCompleted事件觸發(fā)后整體重新初始化
而NEO中dBFT缺乏PBFT的commit階段胀屿,所以可能因?yàn)楣沧R節(jié)點(diǎn)之間的網(wǎng)絡(luò)延遲或者宕機(jī)問題包雀,造成共識節(jié)點(diǎn)之間無法達(dá)成共識。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -----NEO源自于360博客
3.量子鏈:首個(gè)基于UTXO模型的POS智能合約平臺才写,可以寫智能合約,共識機(jī)制:POS
pos:根據(jù)每個(gè)節(jié)點(diǎn)所占代幣的比例和時(shí)間讹堤,等比例的降低挖礦難度厨疙,從而加快找隨機(jī)數(shù)的速度
4.IOTA:共識機(jī)制:DAG算法
http://www.reibang.com/p/ced888ba7d3a這里的描述更為準(zhǔn)確,提高了交易的并發(fā)性梗醇,支持交易離線共識撒蟀,但存在延遲
5.RAFT:將一致性算法分為了幾個(gè)部分,包括領(lǐng)導(dǎo)選缺M汀(leader selection)、日志復(fù)制(log replication)竟终、安全(safety)
Raft協(xié)議基于復(fù)制狀態(tài)機(jī)(replicated state machine)切蟋,即一組server從相同的初始狀態(tài)起,按相同的順序執(zhí)行相同的命令瘾境,最終會達(dá)到一直的狀態(tài),一組server記錄相同的操作日志迷守,并以相同的順序應(yīng)用到狀態(tài)機(jī)。
Raft與PBFT的區(qū)別:raft算法從節(jié)點(diǎn)不會拒絕主節(jié)點(diǎn)的請求凯力,而pbft算法從節(jié)點(diǎn)在某些情況下會拒絕主節(jié)點(diǎn)的請求 ;raft算法只能容錯(cuò)故障節(jié)點(diǎn)礼华,并且最大容錯(cuò)節(jié)點(diǎn)數(shù)為(n-1)/2,而pbft算法能容錯(cuò)故障節(jié)點(diǎn)和作惡節(jié)點(diǎn)祈惶,最大容錯(cuò)節(jié)點(diǎn)數(shù)為(n-1)/3扮匠。
6.PAXOS:允許一組不一定可靠的處理器(服務(wù)器)在某些條件得到滿足情況下就能達(dá)成確定的安全的共識,如果條件不能滿足也確保這組處理器(服務(wù)器)保持一致疹蛉。
客戶端的寫操作:
首先Paxos管理的系統(tǒng)中一個(gè)客戶端要求寫入一個(gè)新值力麸,客戶端這里如圖所示是紅圈,其它流程是藍(lán)圈闺鲸, Paxos能保證客戶端發(fā)送它們的寫請求到Paxos集群中任何成員, 這里演示中客戶端隨機(jī)挑選流程中任意一個(gè)陨舱,這種方式是重要且巧妙的版仔,意味著沒有任何單點(diǎn)風(fēng)險(xiǎn),意味著我們的Paxos管治系統(tǒng)能繼續(xù)保持在線可用蛮粮,無論任何一個(gè)節(jié)點(diǎn)當(dāng)機(jī)或其他不可用原因無響應(yīng)然想。如果我們設(shè)計(jì)一個(gè)特定節(jié)點(diǎn)作為“推薦人proposer”或者 "the master" 等, 如果這個(gè)主節(jié)點(diǎn)死機(jī),那么整個(gè)系統(tǒng)就崩潰了变泄。
https://www.jdon.com/artichect/paxos.html