羅才華
(羅定職業(yè)技術(shù)學(xué)院信息工程系,羅定 527200)
在分布式系統(tǒng)中,分布式數(shù)據(jù)庫的共識管理是非常重要的核心技術(shù),也是保證分布式數(shù)據(jù)庫可以像傳統(tǒng)數(shù)據(jù)庫一樣使用,而不需要應(yīng)用去管理分布式系統(tǒng)中各個節(jié)點。隨著分布式技術(shù)的發(fā)展,分布式數(shù)據(jù)庫的共識管理方案不斷在進化,而以往的分布式數(shù)據(jù)庫并不考慮拜占庭容錯問題,只考慮節(jié)點所在主機的網(wǎng)絡(luò)故障、宕機等非人為問題。隨著互聯(lián)網(wǎng)發(fā)展,大數(shù)據(jù)時代的來臨,企業(yè)間合作模式也越來越復(fù)雜化,甚至出現(xiàn)多方共同維護一個賬本的場景,這時候就必須要考慮可能存在惡意節(jié)點的問題,建立網(wǎng)絡(luò)中記賬節(jié)點的選擇機制,保證賬本數(shù)據(jù)在全網(wǎng)中形成一致和正確的共識。在傳統(tǒng)的軟件結(jié)構(gòu)中,因為中心服務(wù)器(主庫)的存在,這從來就不是個問題,其他的從庫向主庫看齊就可以,但是多方分布式賬本系統(tǒng)是一個對等網(wǎng)絡(luò)結(jié)構(gòu),此結(jié)構(gòu)中沒有所謂的中心節(jié)點,一切都要商量著來[1]。
在分布式計算中,各計算機通過交換信息達成共識,并按照同一協(xié)作策略行動,但有時系統(tǒng)的成員計算機可能會因為硬件故障、遭到惡意攻擊或網(wǎng)絡(luò)異常而發(fā)送錯誤信息或損壞信息,使網(wǎng)絡(luò)中各成員得出不同結(jié)論,從而破壞系統(tǒng)的一致性。拜占庭將軍問題(Byzantine Generals Problem)是Leslie Lamport(萊斯利·蘭伯特)在1982年提出的分布式對等網(wǎng)絡(luò)通信容錯問題[2],是對分布式共識問題的情景化描述,描述在可能存在故障節(jié)點或惡意行為條件下,分布式系統(tǒng)如何達成一致的共識,Leslie Lamport同時提出了該問題基于口信消息和簽名消息的兩種解決方案。拜占庭將軍問題被認為是分布式系統(tǒng)容錯性問題中最難和最復(fù)雜容錯模型之一,是分布式共識的基礎(chǔ),具有正確性和一致性兩個交互一致性條件。
Paxos算法是由拜占庭將軍問題提出者Leslie Lamport于 1989 年在論文“The part-time parliament”中提出的一種基于消息傳遞且具有高度容錯特性的分布式系統(tǒng)一致性算法[3-4],由于該論文內(nèi)容過于晦澀,直到1998年才通過評審和發(fā)表。谷歌分布式鎖服務(wù)Chub-by就是基于Paxos算法的應(yīng)用,Paxos算法后續(xù)衍生出Abstract Paxos、Classicpaxos、Byzantine Paxos 和 Disk Paxos等變種算法,是解決異步系統(tǒng)共識問題最重要的算法家族[5]?;A(chǔ)Paxos算法定義了以下幾種角色,Paxos算法模型如圖1所示。
圖1 Paxos算法模型圖
(1)Client:客戶端,向分布式系統(tǒng)發(fā)起提議并等待結(jié)果。
(2)Proposer:協(xié)調(diào)者,負責(zé)接收客戶端發(fā)起的提議,然后嘗試讓接受者接受該提議,并且保證即使提議產(chǎn)生沖突,算法也能進行下去。
(3)Acceptor:接受者,負責(zé)對提議進行投票,同時會記錄自己的投票歷史。
(4)Learner:學(xué)習(xí)者,如果超過半數(shù)接受者達成共識,那么學(xué)習(xí)者就會接受該提議,并做出運算結(jié)果,返回給客戶端。
Raft算法是斯坦福大學(xué)的Diego Ongaro和John Ousterhout提出的一種分布式一致性算法,其本質(zhì)是Multi-Paxos的一個變種,Raft為了避免Paxos的復(fù)雜性通過簡化模型,實現(xiàn)了一種更容易讓人理解的共識算法,它依靠狀態(tài)機和主從同步的方式,讓集群各個節(jié)點之間實現(xiàn)數(shù)據(jù)的一致性,如圖2所示。Raft主要分為選取主節(jié)點和同步數(shù)據(jù)兩個階段,首先通過多個節(jié)點之間的投票競爭來選取主節(jié)點(leader),然后在選舉出來的leader基礎(chǔ)上進行正常操作,例如日志復(fù)制、記賬等,Raft算法中的節(jié)點共有l(wèi)eader(主節(jié)點)、follower(從節(jié)點)和candidate(參與投票競爭的節(jié)點)三種角色,Raft將共識問題分為“l(fā)eader選舉、記賬和安全”三個相對獨立的子問題[6]。
由于PoW(Proof of Work,工作量證明)算法存在算力浪費和生成新區(qū)塊周期較長等問題[7],Sunny King提出了PoS(Proof of Stake,權(quán)益證明)共識算法。該算法用股權(quán)(持有數(shù)字貨幣的數(shù)量與時間)證明能力,幣齡(持幣量*持幣時間)越大,記賬權(quán)利越大,分配到的利息就越多,類似于財產(chǎn)儲存在銀行,該算法的前提是要求各驗證者(活躍參與者)需要擁有一定的資產(chǎn)以供質(zhì)押。PoS共識機制原理是節(jié)點把自身的貨幣投入PoS機制中,身份變?yōu)轵炞C者,PoS機制在所有驗證者中隨機選出一個節(jié)點產(chǎn)生區(qū)塊,投入的貨幣越多被選中的概率越大,通過競爭產(chǎn)生的記賬節(jié)點將區(qū)塊廣播,達成一致共識后上鏈,并且節(jié)點數(shù)據(jù)越多網(wǎng)絡(luò)越穩(wěn)定。PoS算法設(shè)計者基于人性逐利的假設(shè),通過用戶選擇了正確的區(qū)塊可能會得到一定的獎勵,反之支持拜占庭錯誤區(qū)塊則有可能受到懲罰的方式,認為大部分用戶都會傾向于選擇正確區(qū)塊,因此短期的投機行為和長期的收益基本是一致的,區(qū)塊鏈系統(tǒng)是穩(wěn)定的[8]。
圖2 Raft算法模型圖
像比特幣這樣的數(shù)字貨幣,用巨量的算力來加強網(wǎng)絡(luò)的安全性,因為PoW算法的存在,挖礦需要消耗大量的算力,工作量證明的概念1993年首次出現(xiàn)在學(xué)術(shù)論文“Pricing via Processing or Combatting Junk Mail”中,而PoW算法是在1999年才被正式提出,但是直到2009年中本聰創(chuàng)立了比特幣之后,這種技術(shù)才被大規(guī)模使用。中本聰意識到這種機制可以用來達成多節(jié)點網(wǎng)絡(luò)環(huán)境的共識,從而保證了比特幣的安全。但是,PoW算法需要所有的節(jié)點都去運算解決一個加密學(xué)的問題,這些運算者就是礦工,而第一個得到正確答案的礦工就可以得到獎勵,這些獎勵導(dǎo)致了一個情況,那就是礦工們正在建造越來越大的礦場,反而導(dǎo)致了區(qū)塊鏈的算力越來越向礦池集中化,違反了去中心化的原則。為了解決這一問題,Sunny King提出了Proof of Stake的股權(quán)證明算法,PoS算法使用一種選舉機制,隨機在網(wǎng)絡(luò)節(jié)點中選取一個,并且不再需要礦工,取而代之的是Validators,為了成為Validators,節(jié)點必須先抵押一定數(shù)量的Token作為Stake,抵押的數(shù)量決定了下一次選舉時被選為Validators的概率大小。如果Validators讓非法的交易計入?yún)^(qū)塊中,那么它將付出損失部分押金的代價,只要押金比獲得的交易手續(xù)費高,作弊就是不經(jīng)濟的,因此PoS算法總體來說是安全的。但是也不是沒有缺點,PoW算法中,如果掌控了51%的算力,就可以進行欺騙的交易;而PoS算法中,如果掌控了51%的股權(quán),同樣可以做到,但是掌控51%的股權(quán)遠比掌控51%的算力要困難得多,所以實際上針對PoS機制發(fā)起攻擊的可能性遠比PoW小。
傳統(tǒng)分布式系統(tǒng)一致性算法Paxos、Raft不考慮拜占庭容錯,即假設(shè)不存在惡意篡改和偽造數(shù)據(jù)的拜占庭節(jié)點,認為所有節(jié)點都是可信任的。因此,在很長一段時間里,傳統(tǒng)分布式一致性算法的應(yīng)用場景大多是節(jié)點數(shù)量有限且相對可信的分布式數(shù)據(jù)庫環(huán)境[9]。隨著社會經(jīng)濟轉(zhuǎn)型和“大智云物移”技術(shù)的快速發(fā)展,企業(yè)間合作方式也越來越復(fù)雜化和多樣化,多運營方共用一個賬本的需求越來越多,例如多方企業(yè)的物聯(lián)網(wǎng)共享數(shù)據(jù)、金融行業(yè)多方交易轉(zhuǎn)賬和電商平臺與商家賬本同步等等,每一方都有自己的機房存儲賬本。現(xiàn)在最普遍的做法就是約定時間對賬清算,這種方式效率不高,如果出現(xiàn)賬本不一致,可能還會引發(fā)信任問題。因此,迫切需要一種解決方案來保障開放、多節(jié)點(可能存在惡意拜占庭節(jié)點)和賬本場景復(fù)雜環(huán)境下多方分布式賬本可靠和一致問題。
從本質(zhì)來看,Paxos、Raft、PoW、PoS 算法都是為了解決“誰來寫”的問題,實際就是為了決定把誰作為持久化日志存儲的基準(zhǔn),這四種共識算法對比情況如表1所示。在多活架構(gòu)中,每個節(jié)點都可以進行寫入操作,為了讓所有節(jié)點達成一致,就必須在某個時刻所有節(jié)點向一個節(jié)點看齊。而PoS共識算法就是為了解決拜占庭容錯問題、實現(xiàn)去中心化,也就是“異地多活”的實現(xiàn)。PoS共識算法不僅決定了“誰應(yīng)該寫”的問題,并且還能確定“寫的東西是不是真實”(拜占庭問題),實現(xiàn)了多方賬本數(shù)據(jù)真實、可靠、一致。基于此,本文對多方企業(yè)的物聯(lián)網(wǎng)共享數(shù)據(jù)和金融行業(yè)多方交易轉(zhuǎn)賬提出了新的解決方案,如圖3、圖4所示。
表1 四種共識算法對比
圖3 多方企業(yè)的物聯(lián)網(wǎng)共享數(shù)據(jù)模型
圖4 金融行業(yè)多方交易轉(zhuǎn)賬模型
基于PoS共識算法能有效解決分多方布式賬本中“誰來寫”和“寫的東西是不是真實”等問題,實現(xiàn)多方賬本數(shù)據(jù)的真實、可靠、一致。本文以多方企業(yè)的物聯(lián)網(wǎng)共享數(shù)據(jù)和金融行業(yè)多方交易轉(zhuǎn)賬為例,提出了基于PoS共識算法的多方分布式賬本解決方案,有助于解決多方賬本企業(yè)場景下信任合作的痛點,相對于傳統(tǒng)定時對賬清算,效率更高、選舉更加透明公正,結(jié)合分布式數(shù)據(jù)庫,實現(xiàn)多方異地數(shù)據(jù)一致性。