摘要:區(qū)塊鏈系統(tǒng)首先是一個(gè)分布式系統(tǒng),分布式系統(tǒng)的核心問(wèn)題包括一致性共識(shí)一致性問(wèn)題一致性問(wèn)題是分布式領(lǐng)域最為基礎(chǔ)也是最重要的問(wèn)題。算法與算法問(wèn)題是指分布式系統(tǒng)中存在故障,但不存在惡意節(jié)點(diǎn)的場(chǎng)景即可能消息丟失或重復(fù),但無(wú)錯(cuò)誤消息下的共識(shí)達(dá)成問(wèn)題。
區(qū)塊鏈系統(tǒng)首先是一個(gè)分布式系統(tǒng),分布式系統(tǒng)的核心問(wèn)題包括一致性、共識(shí)
一致性問(wèn)題一致性問(wèn)題是分布式領(lǐng)域最為基礎(chǔ)也是最重要的問(wèn)題。如果分布式系統(tǒng)能實(shí)現(xiàn)“一致”,對(duì)外就可以呈現(xiàn)為一個(gè)完美的、可擴(kuò)展的“虛擬節(jié)點(diǎn)”,相對(duì)物理節(jié)點(diǎn)具備更優(yōu)越性能和穩(wěn)定性。
定義與重要性一致性:早期也叫 agreement ,是指對(duì)于分布式系統(tǒng)中的多個(gè)服務(wù)節(jié)點(diǎn),給定一系列操作,在約定協(xié)議的保障下,試圖使得它們對(duì)處理結(jié)果達(dá)成“某種程度的認(rèn)同”。
注: 一致性并不代表結(jié)果正確與否,而是系統(tǒng)對(duì)外呈現(xiàn)的狀態(tài)一致與否;例如: 所有節(jié)點(diǎn)都達(dá)成失敗狀態(tài)也是一種一致
分布式計(jì)算機(jī)集群系統(tǒng)中,如下幾個(gè)方面很容易出現(xiàn)問(wèn)題:
節(jié)點(diǎn)之間的網(wǎng)絡(luò)通信是不可靠的,包括消息延遲、亂序和內(nèi)容錯(cuò)誤等
節(jié)點(diǎn)的處理時(shí)間無(wú)法保障,記過(guò)可能出現(xiàn)錯(cuò)誤,甚至節(jié)點(diǎn)自身可能發(fā)生宕機(jī)
同步調(diào)用可以簡(jiǎn)化設(shè)計(jì),但會(huì)嚴(yán)重降低分布式系統(tǒng)的可擴(kuò)展性,甚至使其退化為單點(diǎn)系統(tǒng)
現(xiàn)代分布式系統(tǒng)處理一致性問(wèn)題的基礎(chǔ)思路: 將可能引發(fā)不一致的并行操作進(jìn)行串行化。
一致性要求分布式系統(tǒng)達(dá)成一致的過(guò)程,應(yīng)該滿足:
可終止性: 一致的結(jié)果在有限時(shí)間內(nèi)能完成
約同性: 不同幾點(diǎn)最終完成決策的記過(guò)是相同的
合法性: 決策的結(jié)果必須是某個(gè)節(jié)點(diǎn)提出的提案
事件發(fā)生的先后順序十分重要,這也是解決分布式系統(tǒng)領(lǐng)域很多問(wèn)題的核心秘訣: 把多件事情進(jìn)行排序,而且這個(gè)順序還得是大家都認(rèn)可的。
帶約束的一致性要實(shí)現(xiàn)絕對(duì)理想的嚴(yán)格一致性 代價(jià)很大。實(shí)際上,越強(qiáng)的一致性要求往往會(huì)造成越弱的處理性能,以及越差的可擴(kuò)展性。
一般來(lái)講,強(qiáng)一致性主要包括下面兩類:
順序一致性: 是一種比較強(qiáng)的約束,保證所有進(jìn)程看到的全局執(zhí)行順序一致,并且每個(gè)進(jìn)程看自身的執(zhí)行順序跟實(shí)際發(fā)生順序一致。順序一致性實(shí)際上限制了各進(jìn)程內(nèi)指令的偏序關(guān)系,但不在進(jìn)程間按照物理時(shí)間進(jìn)行全局排序;
線性一致性: 在順序一致性前提下加強(qiáng)了進(jìn)程間的操作順序,形成唯一的全局順序(系統(tǒng)等價(jià)于是順序執(zhí)行,所有進(jìn)程看到的所有操作序列順序都一致,并且跟實(shí)際發(fā)生順序一致),是很強(qiáng)的原子性保證。但是比較難實(shí)現(xiàn),目前基本上要么依賴于全局的時(shí)鐘或鎖,要么通過(guò)一些復(fù)雜算法實(shí)現(xiàn),性能往往不高。
由于強(qiáng)一致性的系統(tǒng)往往比較難實(shí)現(xiàn),而且很多時(shí)候,實(shí)際需求并沒(méi)有那么嚴(yán)格需要強(qiáng)一致性。因此,可以適當(dāng)?shù)胤艑拰?duì)一致性的要求,從而降低系統(tǒng)實(shí)現(xiàn)的難度。例如在一定約束下實(shí)現(xiàn)所謂 最終一致性:即總會(huì)存在一個(gè)時(shí)刻(而不是立刻),讓系統(tǒng)達(dá)到一致的狀態(tài)。大部分Web系統(tǒng)實(shí)現(xiàn)的都是最終一致性。相對(duì)強(qiáng)一致性,這一類在某些方面弱化的一致性都籠統(tǒng)稱為 弱一致性。
共識(shí)算法共識(shí)在很多時(shí)候會(huì)與一致性放在一起討論,嚴(yán)謹(jǐn)?shù)刂v,兩者的含義并不完全相同。
一致性往往指分布式系統(tǒng)中多個(gè)副本對(duì)外呈現(xiàn)的數(shù)據(jù)的狀態(tài)。而共識(shí)則描述了分布式系統(tǒng)中多個(gè)節(jié)點(diǎn)之間,彼此對(duì)某個(gè)狀態(tài)達(dá)成一致結(jié)果的過(guò)程。因此,一致性描述的是結(jié)果狀態(tài),共識(shí)則是一種手段。達(dá)成某種共識(shí)并不意味著就保障了一致性。
實(shí)踐中,要保障系統(tǒng)滿足不同程度的一致性,核心過(guò)程往往需要通過(guò)共識(shí)算法來(lái)達(dá)成。共識(shí)算法 解決的是對(duì)某個(gè)提案大家達(dá)成一致意見(jiàn)的過(guò)程。提案 的含義在分布式系統(tǒng)中十分寬泛,如多個(gè)事件發(fā)生的順序、某個(gè)鍵對(duì)應(yīng)的值、誰(shuí)是領(lǐng)導(dǎo)...等等,可以認(rèn)為任何可以達(dá)成一致的信息都是一個(gè)提案。
對(duì)于分布式系統(tǒng)來(lái)說(shuō),各個(gè)幾點(diǎn)通常都是相同的確定性狀態(tài)機(jī)模型(又稱狀態(tài)機(jī)復(fù)制問(wèn)題),從相同初始狀態(tài)開(kāi)始接收相同順序的指令,則可以保證相同的結(jié)果狀態(tài)。因此,系統(tǒng)中多個(gè)節(jié)點(diǎn)最關(guān)鍵的是對(duì)多個(gè)事件進(jìn)行共識(shí),即排序。
問(wèn)題與挑戰(zhàn)現(xiàn)實(shí)中,理想的分布式系統(tǒng)并不存在,不同節(jié)點(diǎn)之間通信存在延遲,并且任意環(huán)節(jié)都可能存在故障。
一般地,把出現(xiàn)故障(crash或fail-stop,即不響應(yīng))但不會(huì)偽造信息的情況稱為“非拜占庭錯(cuò)誤”或“故障錯(cuò)誤”;偽造信息惡意響應(yīng)的情況稱為“拜占庭錯(cuò)誤”,對(duì)應(yīng)節(jié)點(diǎn)為拜占庭節(jié)點(diǎn)。
根據(jù)解決的是非拜占庭的普通錯(cuò)誤情況還是拜占庭錯(cuò)誤情況,共識(shí)算法可以分為:
Crash Fault Tolerance(CFT)類算法:經(jīng)典的算法包括Paxos、Raft及其變種等,這類容錯(cuò)算法往往性能比較好,處理較快,容忍不超過(guò)一般的故障節(jié)點(diǎn)
Byzantine Fault Tolerance (BFT) 類算法:一般包括PBFT(Practical Byzantine Fault Tolerance)為代表的確定性系列算法、PoW為代表的概率算法等。對(duì)于確定性算法,一旦達(dá)成對(duì)某個(gè)結(jié)果的共識(shí)就不可逆轉(zhuǎn),即共識(shí)是最終結(jié)果。而概率類算法,共識(shí)結(jié)果則是臨時(shí)的,隨著時(shí)間推移或某種強(qiáng)化,共識(shí)結(jié)果被推翻的概率越來(lái)越小,稱為事實(shí)上的最終結(jié)果。拜占庭類容錯(cuò)算法往往性能較差,容忍不超過(guò)1/3的故障幾點(diǎn)。
理論界限科學(xué)家證明: 即便在網(wǎng)絡(luò)通信可靠情況下,可擴(kuò)展的分布式系統(tǒng)的共識(shí)問(wèn)題,其通用解法的理論下限是——沒(méi)有下限(無(wú)解)。
這個(gè)結(jié)論稱為“FLP不可能原理”。該原理可看做分布式領(lǐng)域里的“測(cè)不準(zhǔn)原理”
FLP不可能原理:在網(wǎng)絡(luò)可靠,但允許節(jié)點(diǎn)失效(即便只有一個(gè))的最小化異步模型系統(tǒng)中,不存在一個(gè)可以解決一致性問(wèn)題的確定性共識(shí)算法。
FLP 不可能原理告訴人們,不要浪費(fèi)時(shí)間,去為異步分布式系統(tǒng)設(shè)計(jì)在任意場(chǎng)景下都能實(shí)現(xiàn)共識(shí)的算法
正確理解在分布式系統(tǒng)中,同步和異步這兩個(gè)術(shù)語(yǔ)存在特殊的含義。
同步:是指系統(tǒng)中的各個(gè)幾點(diǎn)的時(shí)鐘誤差存在上線;并且消息傳遞必須在一定時(shí)間內(nèi)完成,否則認(rèn)為失敗;同時(shí)各個(gè)節(jié)點(diǎn)完成處理消息的時(shí)間是一定的。對(duì)于同步系統(tǒng),可以很容易地判斷消息是否丟失。
異步:指系統(tǒng)中各個(gè)節(jié)點(diǎn)可能存在較大的時(shí)鐘差異,同時(shí)消息傳輸時(shí)間是任意長(zhǎng)的,各幾點(diǎn)對(duì)消息進(jìn)行處
理的時(shí)間也可能是任意長(zhǎng)的,這就造成無(wú)法判斷某個(gè)消息遲遲沒(méi)有被響應(yīng)是哪里出了問(wèn)題(節(jié)點(diǎn)故障還是傳輸故障?現(xiàn)實(shí)中的系統(tǒng)往往都是異步系統(tǒng))
FLP原理實(shí)際上說(shuō)明對(duì)于允許節(jié)點(diǎn)失效情況下,純粹異步系統(tǒng)無(wú)法確保一致性在有限時(shí)間內(nèi)完成。即便對(duì)于非拜占庭錯(cuò)誤的前提下,包括Paxos、Raft等算法也都存在無(wú)法達(dá)成共識(shí)的情況,只是在工程實(shí)踐中這種情況出現(xiàn)的概率很小。
總結(jié):科學(xué)告訴你什么是不可能的;工程則告訴你,付出一些代價(jià),可以把它變成可行。那我們?cè)诟冻鲆恍┐鷥r(jià)的情況下,共識(shí)的達(dá)成上,能做到多好?(CAP原理)
CAP 原理CAP 原理被認(rèn)為是分布式系統(tǒng)領(lǐng)域的重要原理之一
定義CAP原理:分布式計(jì)算系統(tǒng)不可能同時(shí)確保以下三個(gè)特性:一致性、可用性和分區(qū)容忍性,設(shè)計(jì)中往往需要弱化對(duì)某個(gè)特性的保證。
一致性: 任何操作應(yīng)該都是原子的,發(fā)生在后面的事件能看到前面事件發(fā)生導(dǎo)致的記過(guò),注意這里指的是強(qiáng)一致性。
可用性: 在有限時(shí)間內(nèi),任何非失敗節(jié)點(diǎn)都能應(yīng)答請(qǐng)求
分區(qū)容忍性: 網(wǎng)絡(luò)可能發(fā)生分區(qū),即節(jié)點(diǎn)之間的通信不可保障
網(wǎng)絡(luò)分區(qū):網(wǎng)絡(luò)設(shè)備故障導(dǎo)致的網(wǎng)絡(luò)分裂。比如,存在ABCDE五個(gè)節(jié)點(diǎn),AB處于同一子網(wǎng),BCD處于另外一子網(wǎng),中間通過(guò)交換機(jī)相連。若兩個(gè)子網(wǎng)間的交換機(jī)故障了即發(fā)生了網(wǎng)絡(luò)分區(qū),AB和CDE便不能通訊。
應(yīng)用場(chǎng)景CAP 三種特性不可同時(shí)得到保障,則設(shè)計(jì)系統(tǒng)是必然要弱化對(duì)某個(gè)特性的支持,那么可能出現(xiàn)下面三個(gè)應(yīng)用場(chǎng)景
弱化一致性: 對(duì)結(jié)果一致性不敏感的應(yīng)用,可以允許在新版本上線后過(guò)一段時(shí)間才最終更新成功,期間不保證一致性
弱化可用性: 對(duì)結(jié)果一致性很敏感的應(yīng)用,如: 銀行取款機(jī)
弱化分區(qū)容忍性: 現(xiàn)實(shí)中,網(wǎng)絡(luò)分區(qū)出現(xiàn)概率較小,但較難完全避免。
ACID 原則ACID 原則指的是: Atomicity (原子性)、Consistency(一致性)、Isolation(隔離性)、Durability(持久性),這四種特性的縮寫(xiě)。ACID 是一種比較出名的描述一致性的原則,通常出現(xiàn)在分布式數(shù)據(jù)庫(kù)領(lǐng)域,具體來(lái)說(shuō),ACID 原則描述了分布式數(shù)據(jù)庫(kù)需要滿足的一致性需求,同時(shí)允許付出可用性的代價(jià)。
ACID 特性如下:
Atomicity: 每次操作是原子的,要么成功,要么不執(zhí)行
Consistency: 數(shù)據(jù)庫(kù)的狀態(tài)是一致的,無(wú)中間狀態(tài)
Isolation: 各種操作彼此之間互相不影響
Durability: 狀態(tài)的改變是持久的,不會(huì)失效
與ACID 相對(duì)的一個(gè)原則是 BASE (Basic Availability, Soft-state, Eventual Consistency)原則,犧牲掉對(duì)一致性的約束(但實(shí)現(xiàn)最終一致性),來(lái)?yè)Q取一定的可用性。
Paxos 算法與 Raft 算法Paxos 問(wèn)題是指分布式系統(tǒng)中存在故障,但不存在惡意節(jié)點(diǎn)的場(chǎng)景(即可能消息丟失或重復(fù),但無(wú)錯(cuò)誤消息)下的共識(shí)達(dá)成問(wèn)題。解決 Paxos 問(wèn)題的算法主要有 Paxos 系列算法和 Raft 算法。
Paxos 算法Paxos 是第一個(gè)廣泛應(yīng)用的共識(shí)算法,其原理基于“兩階段提交”算法并進(jìn)行泛化和擴(kuò)展,通過(guò)消息傳遞來(lái)逐步取消系統(tǒng)中的不確定狀態(tài)。是后來(lái)不少共識(shí)算法設(shè)計(jì)的基礎(chǔ)。
算法的基本原理是將節(jié)點(diǎn)點(diǎn)分為三種邏輯角色,在實(shí)現(xiàn)上通一個(gè)節(jié)點(diǎn)可以擔(dān)任多個(gè)角色:
Proposer(提案者): 提出以個(gè)提案,等待大家批準(zhǔn)為結(jié)案。系統(tǒng)中提案都擁有一個(gè)自增的唯一提案號(hào)。往往由客戶端擔(dān)任該角色。
Acceptor(接受者): 負(fù)責(zé)對(duì)提案進(jìn)行投票,接受提案。往往由服務(wù)端擔(dān)任該角色。
Learner(學(xué)習(xí)者): 獲取批準(zhǔn)結(jié)果,并可以幫忙傳播,不參與投票過(guò)程。可能為客戶端或服務(wù)端。
算法需要滿足 Safety(安全性)和 Liveness(活性)兩方面的約束要求。實(shí)際上這兩個(gè)基礎(chǔ)屬性也是大部分分布式算法都該考慮的:
Safety 約束: 保證決議結(jié)果是對(duì)的,無(wú)歧義的,不會(huì)出現(xiàn)錯(cuò)誤情況。
1、只有是被Proposers 提出的提案才可能被最終批準(zhǔn)。
2、在一次執(zhí)行中,只批準(zhǔn)一個(gè)最終決議。被多數(shù)接受的結(jié)果成為決議
Liveness 約束: 保證決議過(guò)程能在有限時(shí)間內(nèi)完成
1、決議總會(huì)產(chǎn)生,并且學(xué)習(xí)者能獲得被批準(zhǔn)的決議
基本過(guò)程:多個(gè)提案者首先爭(zhēng)取到提案的權(quán)利(得到大多數(shù)接受者的支持);得到提案權(quán)利的提案者發(fā)送提案給所有人進(jìn)行確認(rèn),得到大部分人確認(rèn)的提案成為批準(zhǔn)的結(jié)案。
Paxos 能保證在超過(guò)一半的節(jié)點(diǎn)正常工作時(shí),系統(tǒng)總能以較大概率達(dá)成共識(shí)。
兩階段的提交Paxos 算法可分為兩個(gè)階段,準(zhǔn)備階段和提交階段。準(zhǔn)備階段通過(guò)鎖來(lái)解決對(duì)哪個(gè)提案內(nèi)容進(jìn)行確認(rèn)的問(wèn)題,提交極端解決大多數(shù)確認(rèn)最終值的問(wèn)題。
準(zhǔn)備階段:
提案者發(fā)送自己計(jì)劃提交的提案的編號(hào)到多個(gè)接收者,試探是否可以鎖定多數(shù)接收者的支持。
接受者時(shí)刻保留收到過(guò)提案的最大編號(hào)和接受的最大提案。如果收到提案號(hào)比目前保留的最大提案號(hào)還大,則返回自己已接受的提案值(如果還未接受過(guò)任何提案,則為空)給提案者,更新當(dāng)前最大提案號(hào),并說(shuō)明不再接受小于最大提案號(hào)的提案。
提交階段:
提案者如果收到大多數(shù)的恢復(fù)(表示大部分人聽(tīng)到它的請(qǐng)求),則可準(zhǔn)備發(fā)出帶有剛才提案號(hào)的接受消息。如果收到的回復(fù)中不帶有新的提案,說(shuō)明鎖定成功。則使用自己的提案內(nèi)容;如果返回中有提案內(nèi)容,則替換提案值為返回中編號(hào)最大的提案值。如果沒(méi)收到足夠多的回復(fù),則需要再次發(fā)出請(qǐng)求
接受者收到“接受消息”后,如果發(fā)現(xiàn)提案號(hào)不小于已接受的最大提案號(hào),則接受該提案,并更新接受的最大提案。
一旦多數(shù)接受者認(rèn)同了共同的提案值,則形成決議,稱為最終確認(rèn)。
Raft 算法由Paxos算法(設(shè)計(jì)并沒(méi)有考慮到一些優(yōu)化機(jī)制)衍生出了一些不少性能更優(yōu)化的算法和實(shí)現(xiàn),Raft 算法算是對(duì)Multi-Paxos 的重新簡(jiǎn)化設(shè)計(jì)和實(shí)現(xiàn)。
Raft 算法面向多個(gè)決策達(dá)成一致的問(wèn)題,分解了 Leader 選舉、日志復(fù)制和安全方面的考慮,并通過(guò)約束減少了不確定性的狀態(tài)空間。
Raft 算法包括三種角色: Leader(領(lǐng)導(dǎo)者)、Candidate(候選領(lǐng)導(dǎo)者)和 Follower (跟隨者),決策前通過(guò)選舉一個(gè)全局的 leader 來(lái)簡(jiǎn)化后續(xù)的決策過(guò)程。Leader 角色十分關(guān)鍵,決定日志 (log)的提交。日志只能由 Leader 向 Follower 單向復(fù)制。
典型的過(guò)程包括以下兩個(gè)主要階段:
Leader 選舉: 開(kāi)始所有節(jié)點(diǎn)都是 Follower ,在隨機(jī)超時(shí)發(fā)生后未收到來(lái)自 Leader 或 Candidate 消息,則轉(zhuǎn)變角色未 Candidate,提出選舉請(qǐng)求。最后選舉階段中得票超過(guò)一半者被選為 Leader; 如果未選出,隨機(jī)超時(shí)后進(jìn)入新的階段重試。Leader負(fù)責(zé)從客戶端接受 log,并分發(fā)到其他節(jié)點(diǎn)。
同步日志: Leader 會(huì)找到一系統(tǒng)中日志最新的記錄,并強(qiáng)制所有的 Follower 來(lái)刷新到這個(gè)記錄,數(shù)據(jù)的同步是單向的。
拜占庭問(wèn)題與算法拜占庭問(wèn)題更為廣泛,討論的是允許存在少數(shù)節(jié)點(diǎn)作惡(消息可能被偽造)場(chǎng)景下的一致性達(dá)成問(wèn)題。拜占庭容錯(cuò)算法討論的是在拜占庭情況下對(duì)系統(tǒng)如何達(dá)成共識(shí)。
兩將軍問(wèn)題在拜占庭將軍問(wèn)題之前,就已經(jīng)存在兩將軍問(wèn)題: 兩個(gè)將軍要通過(guò)信使來(lái)達(dá)成進(jìn)攻還是撤退的約定,但信使可能迷路或被敵軍阻攔(消息丟失或偽造),如何達(dá)成一致?根據(jù)FLP 不可能原理,這個(gè)問(wèn)題無(wú)通用解
拜占庭問(wèn)題拜占庭問(wèn)題又叫拜占庭將軍問(wèn)題,是 Leslie Lamport 等科學(xué)家提出用來(lái)解釋一致性問(wèn)題的一個(gè)虛構(gòu)模型。
Leslie Lamport 等人證明,當(dāng)叛變者不超過(guò)1/3時(shí),存在有效的拜占庭容錯(cuò)算法(最壞需要F+1輪交互)。繁殖,如果叛變者過(guò)多,超過(guò)1/3,則無(wú)法保證一定能達(dá)到一致結(jié)果。
拜占庭容錯(cuò)算法是面向拜占庭問(wèn)題的容錯(cuò)算法,解決的是在網(wǎng)絡(luò)通信可靠但節(jié)點(diǎn)可能偽造消息情況下如何達(dá)成共識(shí)。
PBFT算法: 基于前人工作進(jìn)行了優(yōu)化,首次將拜占庭容錯(cuò)算法復(fù)雜度從指數(shù)級(jí)降低到了多項(xiàng)式級(jí),目前已得到廣泛應(yīng)用。甚至可以在失效節(jié)點(diǎn)不超過(guò)總數(shù)1/3的情況下同時(shí)保證 Safety 和 Liveness.
PBFT 算法:采用密碼學(xué)相關(guān)技術(shù)(RSA 簽名算法、 消息驗(yàn)證編碼和摘要)確保消息傳遞過(guò)程無(wú)法被篡改和破壞。
PBFT算法過(guò)程:
首先通過(guò)輪換或隨機(jī)算法選出某個(gè)節(jié)點(diǎn)為主節(jié)點(diǎn),此后只要主節(jié)點(diǎn)不切換,則成為一個(gè)視圖(View)
在某個(gè)視圖中,客戶端將請(qǐng)求
所有節(jié)點(diǎn)處理完成請(qǐng)求,將處理結(jié)果
主節(jié)點(diǎn)廣播過(guò)程包括三個(gè)階段的處理: 預(yù)準(zhǔn)備階段、準(zhǔn)備階段和提交階段。預(yù)準(zhǔn)備極端和準(zhǔn)備階段確保在同一個(gè)視圖內(nèi)請(qǐng)求發(fā)送的順序正確;準(zhǔn)備和提交階段則確保在不同視圖之間的確認(rèn)請(qǐng)求是保序的。
預(yù)準(zhǔn)備階段: 主節(jié)點(diǎn)為從客戶端收到的請(qǐng)求分配提案編號(hào),然后發(fā)出預(yù)準(zhǔn)備消息<
準(zhǔn)備階段: 副本節(jié)點(diǎn)收到預(yù)準(zhǔn)備消息后,檢查消息合法,如檢查通過(guò)則向其他節(jié)點(diǎn)發(fā)送準(zhǔn)備消息
提交階段: 廣播commit消息,告訴其他節(jié)點(diǎn)某個(gè)提案n在視圖v里已經(jīng)處于準(zhǔn)備狀態(tài)。如果集齊至少2f+1個(gè)驗(yàn)證過(guò)得commit消息,則說(shuō)明提案通過(guò)
新的解決思路拜占庭問(wèn)題之所以難解,在于任何時(shí)候系統(tǒng)中都可能存在多個(gè)提案(因?yàn)樘岚赋杀竞艿停⑶乙瓿勺罱K一致性確認(rèn)過(guò)程十分困難,容易受干擾。
比特幣的區(qū)塊鏈網(wǎng)絡(luò)在設(shè)計(jì)時(shí)提出了創(chuàng)新的 Pow 概率算法思路,針對(duì)這兩個(gè)環(huán)節(jié)進(jìn)行了改進(jìn)。
限制一段時(shí)間內(nèi)整個(gè)網(wǎng)絡(luò)中出現(xiàn)的提案的個(gè)數(shù)(通過(guò)增加提案成本);
放寬對(duì)最終一致性確認(rèn)的需求,約定好大家都確認(rèn)并沿著已知最長(zhǎng)的鏈進(jìn)行拓展。系統(tǒng)的最終確認(rèn)是概率意義上的存在。這樣,即便有人視圖惡意破壞,也會(huì)付出相應(yīng)的經(jīng)濟(jì)代價(jià)(超過(guò)整體系統(tǒng)一半的計(jì)算力)。
后來(lái)的各種PoX系列算法,也是沿著這個(gè)思路進(jìn)行改進(jìn),采用經(jīng)濟(jì)上的懲罰來(lái)制約破壞者。
可靠性指標(biāo)可靠性(availability),或者說(shuō)可用性,是描述系統(tǒng)可以提供服務(wù)能力的重要指標(biāo)。高可靠的分布式系統(tǒng)往往需要各種復(fù)雜的機(jī)制來(lái)進(jìn)行保障。
服務(wù)的可用性可以用: 服務(wù)承諾、服務(wù)指標(biāo)、服務(wù)目標(biāo)等方面來(lái)進(jìn)行衡量。
一般地,描述系統(tǒng)出現(xiàn)故障的可能性和故障出現(xiàn)后的恢復(fù)能力,有兩個(gè)基礎(chǔ)的指標(biāo):
MTBF: 平均故障間隔時(shí)間,即系統(tǒng)可以無(wú)故障允許的預(yù)期時(shí)間
MTTR: 平均修復(fù)時(shí)間,即發(fā)生故障后,系統(tǒng)可以恢復(fù)到正常運(yùn)行的預(yù)期時(shí)間
一個(gè)高可用的系統(tǒng)應(yīng)該是具有盡量長(zhǎng)的MTBF 和 盡量短的 MTTR
提高可靠性提高系統(tǒng)可靠性有兩個(gè)基本思路:
讓系統(tǒng)中的單個(gè)組件都變得更可靠
干脆消滅單點(diǎn)
依靠單點(diǎn)實(shí)現(xiàn)的可靠性畢竟是有限的。要想進(jìn)一步提升,那就只好消滅單點(diǎn),通過(guò)主從、多活等模式讓多個(gè)節(jié)點(diǎn)集體完成原先單點(diǎn)的工作。這可以從概率意義上改善服務(wù)對(duì)外的整體可靠性,這也是分布式系統(tǒng)的一個(gè)重要用途。
總結(jié)文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/24100.html
摘要:關(guān)鍵步驟完成對(duì)一批交易的共識(shí)新區(qū)塊添加到區(qū)塊鏈結(jié)構(gòu)上,被大家認(rèn)可,確保未來(lái)無(wú)法被篡改比特幣的這種基于算力尋找串的共識(shí)機(jī)制稱為工作量證明。 定義與原理 定義 維基上給出定義: 一種分布式數(shù)據(jù)庫(kù)技術(shù),通過(guò)維護(hù)數(shù)據(jù)塊的鏈?zhǔn)浇Y(jié)構(gòu),可以維持增長(zhǎng)的、不可篡改的數(shù)據(jù)記錄 基本原理 區(qū)塊鏈包括三個(gè)概念: 交易: 一次對(duì)賬本的操作,導(dǎo)致賬本狀態(tài)的一次改變,如添加一條轉(zhuǎn)賬記錄 區(qū)塊: 記錄一段時(shí)間內(nèi)發(fā)生...
摘要:區(qū)塊鏈最早出現(xiàn)在比特幣開(kāi)元項(xiàng)目中。了不起的社會(huì)學(xué)實(shí)驗(yàn)比特幣的誕生年化名中本聰?shù)娜税l(fā)布比特幣白皮書(shū),并在年公開(kāi)了實(shí)現(xiàn)代碼比特幣的意義和價(jià)值比特幣首次真正從實(shí)踐意義上實(shí)現(xiàn)了安全可靠的去中心化數(shù)字貨幣機(jī)制。 區(qū)塊鏈最早出現(xiàn)在比特幣開(kāi)元項(xiàng)目中。比特幣在誕生和發(fā)展過(guò)程中,借鑒了來(lái)自數(shù)字貨幣、密碼學(xué)、博弈論、分布式系統(tǒng)、控制論等多個(gè)領(lǐng)域的技術(shù)成果,作為核心支撐結(jié)構(gòu)的區(qū)塊鏈技術(shù)大放異彩。 從實(shí)體貨幣...
摘要:側(cè)鏈側(cè)鏈協(xié)議允許資產(chǎn)在比特幣區(qū)塊鏈和其他區(qū)塊鏈之間互轉(zhuǎn)。實(shí)現(xiàn)了比特幣區(qū)塊鏈的擴(kuò)展證明在比特幣系統(tǒng)中驗(yàn)證交易時(shí),涉及交易合法性檢查雙重花費(fèi)檢查腳本檢查等。 比特幣項(xiàng)目簡(jiǎn)介 比特幣是基于區(qū)塊鏈技術(shù)的一種數(shù)字貨幣實(shí)現(xiàn),比特幣網(wǎng)絡(luò)是歷史上首個(gè)經(jīng)過(guò)大規(guī)模、長(zhǎng)時(shí)間檢查的數(shù)字貨幣系統(tǒng) 比特幣網(wǎng)絡(luò)在功能上具有如下特點(diǎn): 去中心化: 意味著沒(méi)有任何獨(dú)立個(gè)體可以對(duì)網(wǎng)絡(luò)中的交易進(jìn)行破壞,任何交易請(qǐng)求都需要...
摘要:基于以太坊項(xiàng)目,以太坊團(tuán)隊(duì)目前運(yùn)營(yíng)了一個(gè)公開(kāi)的區(qū)塊鏈平臺(tái)以太坊網(wǎng)絡(luò)。主要特點(diǎn)以太坊區(qū)塊鏈底層也是一個(gè)類似比特幣網(wǎng)絡(luò)的網(wǎng)絡(luò)平臺(tái),智能合約運(yùn)行在網(wǎng)絡(luò)中的以太坊虛擬機(jī)里。以太坊采用交易作為執(zhí)行操作的最小單位。 以太坊將比特幣針對(duì)數(shù)字交易的功能進(jìn)一步進(jìn)行了拓展,面向更為復(fù)雜和靈活的應(yīng)用場(chǎng)景,支持了智能合約這一重要特性。 以太坊項(xiàng)目簡(jiǎn)介 以太坊:項(xiàng)目最初的目標(biāo)是打造以個(gè)智能合約的平臺(tái),該平臺(tái)支持...
摘要:查詢以太坊的主幣可以直接公鑰地址查詢,使用其里面的方法。幣種名稱幣種余額小數(shù)位以上的幾個(gè)方法可以獲取其代幣信息。但是獲取的余額同樣是以以太坊最小單位為單位的數(shù)值,所以需要對(duì)其進(jìn)行處理。 這段時(shí)間有幸能接觸到區(qū)塊鏈,這對(duì)于一個(gè)前端來(lái)說(shuō)是一個(gè)全新的世界。同時(shí),也特別感謝領(lǐng)導(dǎo)給我機(jī)會(huì),能讓我接觸學(xué)習(xí)這方面的東西。以下是這段時(shí)間的學(xué)習(xí)總結(jié),可能認(rèn)識(shí)比較淺薄,但是覺(jué)得寫(xiě)出來(lái)也是對(duì)自己學(xué)習(xí)的一個(gè)交...
閱讀 1095·2021-11-15 18:00
閱讀 2808·2021-09-22 15:18
閱讀 1970·2021-09-04 16:45
閱讀 753·2019-08-30 15:55
閱讀 3865·2019-08-30 13:10
閱讀 1340·2019-08-30 11:06
閱讀 1988·2019-08-29 12:51
閱讀 2296·2019-08-26 13:55