-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
共識算法分為哪兩類(共識算法分為哪兩類)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于共識算法分為哪兩類的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、區(qū)塊鏈 --- 共識算法
PoW算法是一種防止分布式服務(wù)資源被濫用、拒絕服務(wù)攻擊的機(jī)制。它要求節(jié)點(diǎn)進(jìn)行適量消耗時間和資源的復(fù)雜運(yùn)算,并且其運(yùn)算結(jié)果能被其他節(jié)點(diǎn)快速驗(yàn)算,以耗用時間、能源做擔(dān)保,以確保服務(wù)與資源被真正的需求所使用。
PoW算法中最基本的技術(shù)原理是使用哈希算法。假設(shè)求哈希值Hash(r),若原始數(shù)據(jù)為r(raw),則運(yùn)算結(jié)果為R(Result)。
R = Hash(r)
哈希函數(shù)Hash()的特性是,對于任意輸入值r,得出結(jié)果R,并且無法從R反推回r。當(dāng)輸入的原始數(shù)據(jù)r變動1比特時,其結(jié)果R值完全改變。在比特幣的PoW算法中,引入算法難度d和隨機(jī)值n,得到以下公式:
Rd = Hash(r+n)
該公式要求在填入隨機(jī)值n的情況下,計算結(jié)果Rd的前d字節(jié)必須為0。由于哈希函數(shù)結(jié)果的未知性,每個礦工都要做大量運(yùn)算之后,才能得出正確結(jié)果,而算出結(jié)果廣播給全網(wǎng)之后,其他節(jié)點(diǎn)只需要進(jìn)行一次哈希運(yùn)算即可校驗(yàn)。PoW算法就是采用這種方式讓計算消耗資源,而校驗(yàn)僅需一次。
PoS算法要求節(jié)點(diǎn)驗(yàn)證者必須質(zhì)押一定的資金才有挖礦打包資格,并且區(qū)域鏈系統(tǒng)在選定打包節(jié)點(diǎn)時使用隨機(jī)的方式,當(dāng)節(jié)點(diǎn)質(zhì)押的資金越多時,其被選定打包區(qū)塊的概率越大。
POS模式下,每個幣每天產(chǎn)生1幣齡,比如你持有100個幣,總共持有了30天,那么,此時你的幣齡就為3000。這個時候,如果你驗(yàn)證了一個POS區(qū)塊,你的幣齡就會被清空為0,同時從區(qū)塊中獲得相對應(yīng)的數(shù)字貨幣利息。
節(jié)點(diǎn)通過PoS算法出塊的過程如下:普通的節(jié)點(diǎn)要成為出塊節(jié)點(diǎn),首先要進(jìn)行資產(chǎn)的質(zhì)押,當(dāng)輪到自己出塊時,打包區(qū)塊,然后向全網(wǎng)廣播,其他驗(yàn)證節(jié)點(diǎn)將會校驗(yàn)區(qū)塊的合法性。
DPoS算法和PoS算法相似,也采用股份和權(quán)益質(zhì)押。
但不同的是,DPoS算法采用委托質(zhì)押的方式,類似于用全民選舉代表的方式選出N個超級節(jié)點(diǎn)記賬出塊。
選民把自己的選票投給某個節(jié)點(diǎn),如果某個節(jié)點(diǎn)當(dāng)選記賬節(jié)點(diǎn),那么該記賬節(jié)點(diǎn)往往在獲取出塊獎勵后,可以采用任意方式來回報自己的選民。
這N個記賬節(jié)點(diǎn)將輪流出塊,并且節(jié)點(diǎn)之間相互監(jiān)督,如果其作惡,那么會被扣除質(zhì)押金。
通過信任少量的誠信節(jié)點(diǎn),可以去除區(qū)塊簽名過程中不必要的步驟,提高了交易的速度。
拜占庭問題:
拜占庭是古代東羅馬帝國的首都,為了防御在每塊封地都駐扎一支由單個將軍帶領(lǐng)的軍隊(duì),將軍之間只能靠信差傳遞消息。在戰(zhàn)爭時,所有將軍必須達(dá)成共識,決定是否共同開戰(zhàn)。
但是,在軍隊(duì)內(nèi)可能有叛徒,這些人將影響將軍們達(dá)成共識。拜占庭將軍問題是指在已知有將軍是叛徒的情況下,剩余的將軍如何達(dá)成一致決策的問題。
BFT:
BFT即拜占庭容錯,拜占庭容錯技術(shù)是一類分布式計算領(lǐng)域的容錯技術(shù)。拜占庭假設(shè)是對現(xiàn)實(shí)世界的模型化,由于硬件錯誤、網(wǎng)絡(luò)擁塞或中斷以及遭到惡意攻擊等原因,計算機(jī)和網(wǎng)絡(luò)可能出現(xiàn)不可預(yù)料的行為。拜占庭容錯技術(shù)被設(shè)計用來處理這些異常行為,并滿足所要解決的問題的規(guī)范要求。
拜占庭容錯系統(tǒng) :
發(fā)生故障的節(jié)點(diǎn)被稱為 拜占庭節(jié)點(diǎn) ,而正常的節(jié)點(diǎn)即為 非拜占庭節(jié)點(diǎn) 。
假設(shè)分布式系統(tǒng)擁有n臺節(jié)點(diǎn),并假設(shè)整個系統(tǒng)拜占庭節(jié)點(diǎn)不超過m臺(n ≥ 3m + 1),拜占庭容錯系統(tǒng)需要滿足如下兩個條件:
另外,拜占庭容錯系統(tǒng)需要達(dá)成如下兩個指標(biāo):
PBFT即實(shí)用拜占庭容錯算法,解決了原始拜占庭容錯算法效率不高的問題,算法的時間復(fù)雜度是O(n^2),使得在實(shí)際系統(tǒng)應(yīng)用中可以解決拜占庭容錯問題
PBFT是一種狀態(tài)機(jī)副本復(fù)制算法,所有的副本在一個視圖(view)輪換的過程中操作,主節(jié)點(diǎn)通過視圖編號以及節(jié)點(diǎn)數(shù)集合來確定,即:主節(jié)點(diǎn) p = v mod |R|。v:視圖編號,|R|節(jié)點(diǎn)個數(shù),p:主節(jié)點(diǎn)編號。
PBFT算法的共識過程如下:客戶端(Client)發(fā)起消息請求(request),并廣播轉(zhuǎn)發(fā)至每一個副本節(jié)點(diǎn)(Replica),由其中一個主節(jié)點(diǎn)(Leader)發(fā)起提案消息pre-prepare,并廣播。其他節(jié)點(diǎn)獲取原始消息,在校驗(yàn)完成后發(fā)送prepare消息。每個節(jié)點(diǎn)收到2f+1個prepare消息,即認(rèn)為已經(jīng)準(zhǔn)備完畢,并發(fā)送commit消息。當(dāng)節(jié)點(diǎn)收到2f+1個commit消息,客戶端收到f+1個相同的reply消息時,說明客戶端發(fā)起的請求已經(jīng)達(dá)成全網(wǎng)共識。
具體流程如下 :
客戶端c向主節(jié)點(diǎn)p發(fā)送<REQUEST, o, t, c>請求。o: 請求的具體操作,t: 請求時客戶端追加的時間戳,c:客戶端標(biāo)識。REQUEST: 包含消息內(nèi)容m,以及消息摘要d(m)??蛻舳藢φ埱筮M(jìn)行簽名。
主節(jié)點(diǎn)收到客戶端的請求,需要進(jìn)行以下交驗(yàn):
a. 客戶端請求消息簽名是否正確。
非法請求丟棄。正確請求,分配一個編號n,編號n主要用于對客戶端的請求進(jìn)行排序。然后廣播一條<<PRE-PREPARE, v, n, d>, m>消息給其他副本節(jié)點(diǎn)。v:視圖編號,d客戶端消息摘要,m消息內(nèi)容。<PRE-PREPARE, v, n, d>進(jìn)行主節(jié)點(diǎn)簽名。n是要在某一個范圍區(qū)間內(nèi)的[h, H],具體原因參見 垃圾回收 章節(jié)。
副本節(jié)點(diǎn)i收到主節(jié)點(diǎn)的PRE-PREPARE消息,需要進(jìn)行以下交驗(yàn):
a. 主節(jié)點(diǎn)PRE-PREPARE消息簽名是否正確。
b. 當(dāng)前副本節(jié)點(diǎn)是否已經(jīng)收到了一條在同一v下并且編號也是n,但是簽名不同的PRE-PREPARE信息。
c. d與m的摘要是否一致。
d. n是否在區(qū)間[h, H]內(nèi)。
非法請求丟棄。正確請求,副本節(jié)點(diǎn)i向其他節(jié)點(diǎn)包括主節(jié)點(diǎn)發(fā)送一條<PREPARE, v, n, d, i>消息, v, n, d, m與上述PRE-PREPARE消息內(nèi)容相同,i是當(dāng)前副本節(jié)點(diǎn)編號。<PREPARE, v, n, d, i>進(jìn)行副本節(jié)點(diǎn)i的簽名。記錄PRE-PREPARE和PREPARE消息到log中,用于View Change過程中恢復(fù)未完成的請求操作。
主節(jié)點(diǎn)和副本節(jié)點(diǎn)收到PREPARE消息,需要進(jìn)行以下交驗(yàn):
a. 副本節(jié)點(diǎn)PREPARE消息簽名是否正確。
b. 當(dāng)前副本節(jié)點(diǎn)是否已經(jīng)收到了同一視圖v下的n。
c. n是否在區(qū)間[h, H]內(nèi)。
d. d是否和當(dāng)前已收到PRE-PPREPARE中的d相同
非法請求丟棄。如果副本節(jié)點(diǎn)i收到了2f+1個驗(yàn)證通過的PREPARE消息,則向其他節(jié)點(diǎn)包括主節(jié)點(diǎn)發(fā)送一條<COMMIT, v, n, d, i>消息,v, n, d, i與上述PREPARE消息內(nèi)容相同。<COMMIT, v, n, d, i>進(jìn)行副本節(jié)點(diǎn)i的簽名。記錄COMMIT消息到日志中,用于View Change過程中恢復(fù)未完成的請求操作。記錄其他副本節(jié)點(diǎn)發(fā)送的PREPARE消息到log中。
主節(jié)點(diǎn)和副本節(jié)點(diǎn)收到COMMIT消息,需要進(jìn)行以下交驗(yàn):
a. 副本節(jié)點(diǎn)COMMIT消息簽名是否正確。
b. 當(dāng)前副本節(jié)點(diǎn)是否已經(jīng)收到了同一視圖v下的n。
c. d與m的摘要是否一致。
d. n是否在區(qū)間[h, H]內(nèi)。
非法請求丟棄。如果副本節(jié)點(diǎn)i收到了2f+1個驗(yàn)證通過的COMMIT消息,說明當(dāng)前網(wǎng)絡(luò)中的大部分節(jié)點(diǎn)已經(jīng)達(dá)成共識,運(yùn)行客戶端的請求操作o,并返回<REPLY, v, t, c, i, r>給客戶端,r:是請求操作結(jié)果,客戶端如果收到f+1個相同的REPLY消息,說明客戶端發(fā)起的請求已經(jīng)達(dá)成全網(wǎng)共識,否則客戶端需要判斷是否重新發(fā)送請求給主節(jié)點(diǎn)。記錄其他副本節(jié)點(diǎn)發(fā)送的COMMIT消息到log中。
如果主節(jié)點(diǎn)作惡,它可能會給不同的請求編上相同的序號,或者不去分配序號,或者讓相鄰的序號不連續(xù)。備份節(jié)點(diǎn)應(yīng)當(dāng)有職責(zé)來主動檢查這些序號的合法性。
如果主節(jié)點(diǎn)掉線或者作惡不廣播客戶端的請求,客戶端設(shè)置超時機(jī)制,超時的話,向所有副本節(jié)點(diǎn)廣播請求消息。副本節(jié)點(diǎn)檢測出主節(jié)點(diǎn)作惡或者下線,發(fā)起View Change協(xié)議。
View Change協(xié)議 :
副本節(jié)點(diǎn)向其他節(jié)點(diǎn)廣播<VIEW-CHANGE, v+1, n, C , P , i>消息。n是最新的stable checkpoint的編號, C 是 2f+1驗(yàn)證過的CheckPoint消息集合, P 是當(dāng)前副本節(jié)點(diǎn)未完成的請求的PRE-PREPARE和PREPARE消息集合。
當(dāng)主節(jié)點(diǎn)p = v + 1 mod |R|收到 2f 個有效的VIEW-CHANGE消息后,向其他節(jié)點(diǎn)廣播<NEW-VIEW, v+1, V , O >消息。 V 是有效的VIEW-CHANGE消息集合。 O 是主節(jié)點(diǎn)重新發(fā)起的未經(jīng)完成的PRE-PREPARE消息集合。PRE-PREPARE消息集合的選取規(guī)則:
副本節(jié)點(diǎn)收到主節(jié)點(diǎn)的NEW-VIEW消息,驗(yàn)證有效性,有效的話,進(jìn)入v+1狀態(tài),并且開始 O 中的PRE-PREPARE消息處理流程。
在上述算法流程中,為了確保在View Change的過程中,能夠恢復(fù)先前的請求,每一個副本節(jié)點(diǎn)都記錄一些消息到本地的log中,當(dāng)執(zhí)行請求后副本節(jié)點(diǎn)需要把之前該請求的記錄消息清除掉。
最簡單的做法是在Reply消息后,再執(zhí)行一次當(dāng)前狀態(tài)的共識同步,這樣做的成本比較高,因此可以在執(zhí)行完多條請求K(例如:100條)后執(zhí)行一次狀態(tài)同步。這個狀態(tài)同步消息就是CheckPoint消息。
副本節(jié)點(diǎn)i發(fā)送<CheckPoint, n, d, i>給其他節(jié)點(diǎn),n是當(dāng)前節(jié)點(diǎn)所保留的最后一個視圖請求編號,d是對當(dāng)前狀態(tài)的一個摘要,該CheckPoint消息記錄到log中。如果副本節(jié)點(diǎn)i收到了2f+1個驗(yàn)證過的CheckPoint消息,則清除先前日志中的消息,并以n作為當(dāng)前一個stable checkpoint。
這是理想情況,實(shí)際上當(dāng)副本節(jié)點(diǎn)i向其他節(jié)點(diǎn)發(fā)出CheckPoint消息后,其他節(jié)點(diǎn)還沒有完成K條請求,所以不會立即對i的請求作出響應(yīng),它還會按照自己的節(jié)奏,向前行進(jìn),但此時發(fā)出的CheckPoint并未形成stable。
為了防止i的處理請求過快,設(shè)置一個上文提到的 高低水位區(qū)間[h, H] 來解決這個問題。低水位h等于上一個stable checkpoint的編號,高水位H = h + L,其中L是我們指定的數(shù)值,等于checkpoint周期處理請求數(shù)K的整數(shù)倍,可以設(shè)置為L = 2K。當(dāng)副本節(jié)點(diǎn)i處理請求超過高水位H時,此時就會停止腳步,等待stable checkpoint發(fā)生變化,再繼續(xù)前進(jìn)。
在區(qū)塊鏈場景中,一般適合于對強(qiáng)一致性有要求的私有鏈和聯(lián)盟鏈場景。例如,在IBM主導(dǎo)的區(qū)塊鏈超級賬本項(xiàng)目中,PBFT是一個可選的共識協(xié)議。在Hyperledger的Fabric項(xiàng)目中,共識模塊被設(shè)計成可插拔的模塊,支持像PBFT、Raft等共識算法。
Raft基于領(lǐng)導(dǎo)者驅(qū)動的共識模型,其中將選舉一位杰出的領(lǐng)導(dǎo)者(Leader),而該Leader將完全負(fù)責(zé)管理集群,Leader負(fù)責(zé)管理Raft集群的所有節(jié)點(diǎn)之間的復(fù)制日志。
下圖中,將在啟動過程中選擇集群的Leader(S1),并為來自客戶端的所有命令/請求提供服務(wù)。 Raft集群中的所有節(jié)點(diǎn)都維護(hù)一個分布式日志(復(fù)制日志)以存儲和提交由客戶端發(fā)出的命令(日志條目)。 Leader接受來自客戶端的日志條目,并在Raft集群中的所有關(guān)注者(S2,S3,S4,S5)之間復(fù)制它們。
在Raft集群中,需要滿足最少數(shù)量的節(jié)點(diǎn)才能提供預(yù)期的級別共識保證, 這也稱為法定人數(shù)。 在Raft集群中執(zhí)行操作所需的最少投票數(shù)為 (N / 2 +1) ,其中N是組中成員總數(shù),即 投票至少超過一半 ,這也就是為什么集群節(jié)點(diǎn)通常為奇數(shù)的原因。 因此,在上面的示例中,我們至少需要3個節(jié)點(diǎn)才能具有共識保證。
如果法定仲裁節(jié)點(diǎn)由于任何原因不可用,也就是投票沒有超過半數(shù),則此次協(xié)商沒有達(dá)成一致,并且無法提交新日志。
數(shù)據(jù)存儲:Tidb/TiKV
日志:阿里巴巴的 DLedger
服務(wù)發(fā)現(xiàn):Consul& etcd
集群調(diào)度:HashiCorp Nomad
只能容納故障節(jié)點(diǎn)(CFT),不容納作惡節(jié)點(diǎn)
順序投票,只能串行apply,因此高并發(fā)場景下性能差
Raft通過解決圍繞Leader選舉的三個主要子問題,管理分布式日志和算法的安全性功能來解決分布式共識問題。
當(dāng)我們啟動一個新的Raft集群或某個領(lǐng)導(dǎo)者不可用時,將通過集群中所有成員節(jié)點(diǎn)之間協(xié)商來選舉一個新的領(lǐng)導(dǎo)者。 因此,在給定的實(shí)例中,Raft集群的節(jié)點(diǎn)可以處于以下任何狀態(tài): 追隨者(Follower),候選人(Candidate)或領(lǐng)導(dǎo)者(Leader)。
系統(tǒng)剛開始啟動的時候,所有節(jié)點(diǎn)都是follower,在一段時間內(nèi)如果它們沒有收到Leader的心跳信號,follower就會轉(zhuǎn)化為Candidate;
如果某個Candidate節(jié)點(diǎn)收到大多數(shù)節(jié)點(diǎn)的票,則這個Candidate就可以轉(zhuǎn)化為Leader,其余的Candidate節(jié)點(diǎn)都會回到Follower狀態(tài);
一旦一個Leader發(fā)現(xiàn)系統(tǒng)中存在一個Leader節(jié)點(diǎn)比自己擁有更高的任期(Term),它就會轉(zhuǎn)換為Follower。
Raft使用基于心跳的RPC機(jī)制來檢測何時開始新的選舉。 在正常期間, Leader 會定期向所有可用的 Follower 發(fā)送心跳消息(實(shí)際中可能把日志和心跳一起發(fā)過去)。 因此,其他節(jié)點(diǎn)以 Follower 狀態(tài)啟動,只要它從當(dāng)前 Leader 那里收到周期性的心跳,就一直保持在 Follower 狀態(tài)。
當(dāng) Follower 達(dá)到其超時時間時,它將通過以下方式啟動選舉程序:
根據(jù) Candidate 從集群中其他節(jié)點(diǎn)收到的響應(yīng),可以得出選舉的三個結(jié)果。
共識算法的實(shí)現(xiàn)一般是基于復(fù)制狀態(tài)機(jī)(Replicated state machines),何為 復(fù)制狀態(tài)機(jī) :
簡單來說: 相同的初識狀態(tài) + 相同的輸入 = 相同的結(jié)束狀態(tài) 。不同節(jié)點(diǎn)要以相同且確定性的函數(shù)來處理輸入,而不要引入一下不確定的值,比如本地時間等。使用replicated log是一個很不錯的注意,log具有持久化、保序的特點(diǎn),是大多數(shù)分布式系統(tǒng)的基石。
有了Leader之后,客戶端所有并發(fā)的請求可以在Leader這邊形成一個有序的日志(狀態(tài))序列,以此來表示這些請求的先后處理順序。Leader然后將自己的日志序列發(fā)送Follower,保持整個系統(tǒng)的全局一致性。注意并不是強(qiáng)一致性,而是 最終一致性 。
日志由有序編號(log index)的日志條目組成。每個日志條目包含它被創(chuàng)建時的任期號(term),和日志中包含的數(shù)據(jù)組成,日志包含的數(shù)據(jù)可以為任何類型,從簡單類型到區(qū)塊鏈的區(qū)塊。每個日志條目可以用[ term, index, data]序列對表示,其中term表示任期, index表示索引號,data表示日志數(shù)據(jù)。
Leader 嘗試在集群中的大多數(shù)節(jié)點(diǎn)上執(zhí)行復(fù)制命令。 如果復(fù)制成功,則將命令提交給集群,并將響應(yīng)發(fā)送回客戶端。類似兩階段提交(2PC),不過與2PC的區(qū)別在于,leader只需要超過一半節(jié)點(diǎn)同意(處于工作狀態(tài))即可。
leader 、 follower 都可能crash,那么 follower 維護(hù)的日志與 leader 相比可能出現(xiàn)以下情況
當(dāng)出現(xiàn)了leader與follower不一致的情況,leader強(qiáng)制follower復(fù)制自己的log, Leader會從后往前試 ,每次AppendEntries失敗后嘗試前一個日志條目(遞減nextIndex值), 直到成功找到每個Follower的日志一致位置點(diǎn)(基于上述的兩條保證),然后向后逐條覆蓋Followers在該位置之后的條目 。所以丟失的或者多出來的條目可能會持續(xù)多個任期。
要求候選人的日志至少與其他節(jié)點(diǎn)一樣最新。如果不是,則跟隨者節(jié)點(diǎn)將不投票給候選者。
意味著每個提交的條目都必須存在于這些服務(wù)器中的至少一個中。如果候選人的日志至少與該多數(shù)日志中的其他日志一樣最新,則它將保存所有已提交的條目,避免了日志回滾事件的發(fā)生。
即任一任期內(nèi)最多一個leader被選出。這一點(diǎn)非常重要,在一個復(fù)制集中任何時刻只能有一個leader。系統(tǒng)中同時有多余一個leader,被稱之為腦裂(brain split),這是非常嚴(yán)重的問題,會導(dǎo)致數(shù)據(jù)的覆蓋丟失。在raft中,兩點(diǎn)保證了這個屬性:
因此, 某一任期內(nèi)一定只有一個leader 。
當(dāng)集群中節(jié)點(diǎn)的狀態(tài)發(fā)生變化(集群配置發(fā)生變化)時,系統(tǒng)容易受到系統(tǒng)故障。 因此,為防止這種情況,Raft使用了一種稱為兩階段的方法來更改集群成員身份。 因此,在這種方法中,集群在實(shí)現(xiàn)新的成員身份配置之前首先更改為中間狀態(tài)(稱為聯(lián)合共識)。 聯(lián)合共識使系統(tǒng)即使在配置之間進(jìn)行轉(zhuǎn)換時也可用于響應(yīng)客戶端請求,它的主要目的是提升分布式系統(tǒng)的可用性。
二、算法可以分為哪兩大類
算法可以分為多項(xiàng)式算法和指數(shù)型算法大類。
算法可大致分為基本算法、數(shù)據(jù)結(jié)構(gòu)的算法、數(shù)論與代數(shù)算法、計算幾何的算法、圖論的算法、動態(tài)規(guī)劃以及數(shù)值分析、加密算法、排序算法、檢索算法、隨機(jī)化算法、并行算法,厄米變形模型,隨機(jī)森林算法。
算法可以宏泛的分為三類:
一、有限的,確定性算法 這類算法在有限的一段時間內(nèi)終止。他們可能要花很長時間來執(zhí)行指定的任務(wù),但仍將在一定的時間內(nèi)終止。這類算法得出的結(jié)果常取決于輸入值。
二、有限的,非確定算法 這類算法在有限的時間內(nèi)終止。然而,對于一個(或一些)給定的數(shù)值,算法的結(jié)果并不是唯一的或確定的。
三、無限的算法 是那些由于沒有定義終止定義條件,或定義的條件無法由輸入的數(shù)據(jù)滿足而不終止運(yùn)行的算法。通常,無限算法的產(chǎn)生是由于未能確定的定義終止條件。
經(jīng)典的算法有很多,如歐幾里德算法,割圓術(shù),秦九韶算法。
隨著計算機(jī)的發(fā)展,算法在計算機(jī)方面已有廣泛的發(fā)展及應(yīng)用,如用隨機(jī)森林算法來進(jìn)行頭部姿勢的估計,用遺傳算法來解決彈藥裝載問題,使用信息加密算法進(jìn)行網(wǎng)絡(luò)傳輸,使用并行算法進(jìn)行數(shù)據(jù)挖掘,以及協(xié)同過濾算法在個性化推薦中的應(yīng)用等。
三、金窩窩區(qū)塊鏈技術(shù)中 共識機(jī)制的類別有哪些?
重慶金窩窩分析區(qū)塊鏈技術(shù)中的共識機(jī)制如下:
區(qū)塊鏈技術(shù)的核心是在沒有中心控制的情況下,在互相沒有信任基礎(chǔ)的個體之間就交易的合法性等達(dá)成共識的共識機(jī)制。
區(qū)塊鏈的共識機(jī)制目前主要有4類:PoW、PoS、DPoS、分布式一致性算法。
四、區(qū)塊鏈共識算法——(二)PoS共識(Proof of Stake)
2011 年 7 月, 一 位 名 為 Quantum Mechanic 的 數(shù) 字 貨 幣 愛 好 者 在 比 特 幣 論 壇 首次提出了權(quán)益證明 PoS 共識算法. 隨后, Sunny King 在 2012 年 8 月發(fā)布的點(diǎn)點(diǎn)幣 (Peercoin, PPC) 中首次實(shí)現(xiàn). PoS 由 系統(tǒng)中具有最高權(quán)益而非最高算力的節(jié)點(diǎn)獲得記賬 權(quán), 其中權(quán)益體現(xiàn)為節(jié)點(diǎn)對特定數(shù)量貨幣的所有權(quán), 稱為幣齡或幣天數(shù) (Coin days)
PoS是考慮到PoW的最大缺陷:浪費(fèi)資源而提出的,簡單來說就是 誰的權(quán)益大,誰說了算 。
PoS共識機(jī)制(Proof of Stake 權(quán)益證明)通過權(quán)益記賬的方式,解決效率低下、資源浪費(fèi)、節(jié)點(diǎn)一致性等問題。
各個節(jié)點(diǎn)需要滿足一定的條件(如抵押一定的代幣)才能成為驗(yàn)證節(jié)點(diǎn)(權(quán)益提高),系統(tǒng)通過算法在其中選擇一部分作為出塊節(jié)點(diǎn)(礦工),每隔一段時間重新選擇,算法會保證完全隨機(jī),不可被操控。只有出塊節(jié)點(diǎn)才能進(jìn)行數(shù)據(jù)處理,爭奪記賬權(quán)。
權(quán)益主要由權(quán)益因子決定,可以是持幣數(shù)量,也可以是幣齡及兩者的結(jié)合。
以太坊在之后很有可能會改用PoS進(jìn)行共識,其更加符合以太坊高效率的特點(diǎn)。
以上就是關(guān)于共識算法分為哪兩類相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀: