pos機入門基礎,零基礎讀懂分布式系統(tǒng)

 新聞資訊  |   2023-04-24 09:52  |  投稿人:pos機之家

網(wǎng)上有很多關于pos機入門基礎,零基礎讀懂分布式系統(tǒng)的知識,也有很多人為大家解答關于pos機入門基礎的問題,今天pos機之家(m.dsth100338.com)為大家整理了關于這方面的知識,讓我們一起來看下吧!

本文目錄一覽:

1、pos機入門基礎

pos機入門基礎

免責聲明:本文旨在傳遞更多市場信息,不構成任何投資建議。文章僅代表作者觀點,不代表火星財經(jīng)官方立場。

小編:記得關注哦

投資區(qū)塊鏈,猛戳:火星財經(jīng)App下載

文章來源:北京互融云

區(qū)塊鏈是一種分布式系統(tǒng)。不了解分布式系統(tǒng)的工作原理,很難真正理解區(qū)塊鏈。

而不理解區(qū)塊鏈的麻煩,在于會陷入到對「去中心化」、「無需許可」等等概念以及「TPS」、「安全」等等問題失去語境的討論中去。這不僅無助于我們去準確地分析和判斷一個區(qū)塊鏈項目,也讓我們無法認清區(qū)塊鏈在技術上的可能的發(fā)展路線。

更直白來講,我們需要掌握分布式系統(tǒng)的一些基礎知識。因為這樣,我們就能看到區(qū)塊鏈本身的局限性,我們就知道任何一個真正有價值的區(qū)塊鏈項目都應該:為了解決特定的問題,在特定的環(huán)境中,做出特定的解決方案。

單純的指標比較并不客觀,更好的判斷標準是:這種方案是否適合于解決這個問題。

了解分布式系統(tǒng)的工作原理對區(qū)塊鏈世界非常重要。那么現(xiàn)在,就讓我們開啟分布式系統(tǒng)的探索之旅吧。

計算機的作用是處理信息,我們輸入條件 A 給它,它輸出結果 B 給我們。如果處理信息的工作是由一臺計算機完成的,這是一種中心化的結構;如果處理信息的工作是由多臺獨立的計算機合作完成的,我們可以稱其為「分布式的系統(tǒng)」。

分布式系統(tǒng)有多種不同的架構,用以實現(xiàn)不同的處理信息的方法。假設系統(tǒng)中有十臺計算機,一種架構是:我們把一個計算任務分成十份,讓每臺計算機獨立處理一份任務,最后匯總它們的計算結果,作為輸出。

還有另一種架構,就是讓這十臺計算機都去處理這一個計算任務,如果所有的計算機都正常工作,它們的計算結果應該是一樣的,那么就把這個一致的計算結果作為輸出。區(qū)塊鏈就是這樣的一種分布式系統(tǒng)。

很容易就能發(fā)現(xiàn),這是一個「自找苦吃」的系統(tǒng),它相當于把同樣的工作做了十次,而且還需要額外增加不同計算機之間的溝通工作。

那為什么還需要這種系統(tǒng)?因為它可以讓我們免除對中心化的那一臺計算機,以及那臺計算機背后的中心化的公司或組織的依賴。這樣一來,既能避免單點故障或作惡,也能減少權力的集中及濫用。

一、分布式系統(tǒng)的理想目標

區(qū)塊鏈所屬的分布式系統(tǒng)也被稱為「復制狀態(tài)機模型」(Replicated State Machine),它的目標很簡單:系統(tǒng)內全部的計算機都同意某一個輸出值,也就是指:系統(tǒng)內所有的節(jié)點 / 計算機都有相同的初始狀態(tài),在執(zhí)行完一個事務后,所有的節(jié)點都有相同的最終狀態(tài) 。

如果計算機都運行良好,它們之間的通信也完全同步,實現(xiàn)這個目標并不困難。但現(xiàn)實不是如此,主要有以下兩類問題:

某臺 / 某些計算機出現(xiàn)故障,它可能無法計算出結果,也可能連接不上系統(tǒng)。如果不同計算機收到事件的順序不同,對事件的處理順序就會不同,導致輸出結果也不同。比如(a+b)×c 與 a+(b×c)就是兩種不同的計算順序,會帶來不同的計算結果。

這些問題是常見且不可避免的,而一旦出現(xiàn)問題,就無法實現(xiàn)全部的計算機都同意某一個輸出結果。著名的分布式系統(tǒng)「FLP 不可能原理」是這樣描述的:在網(wǎng)絡可靠,但允許節(jié)點失效的最小化異步模型系統(tǒng)中,不存在一個可以解決一致性問題的確定性共識算法。通俗而言就是:只要系統(tǒng)中有一臺計算機出問題,該系統(tǒng)就無法在輸出值上達成共識。

FLP 不可能原理告訴我們:不要浪費時間去為分布式系統(tǒng)設計面向所有場景的共識算法,那是不可能實現(xiàn)的。

二、分布式系統(tǒng)的共識算法

雖然 FLP 不可能原理很殘酷,但分布式系統(tǒng)能夠帶來的好處是值得我們迎難而上的。既然不存在面向所有場景的共識算法,那么也許可以找到一些在特定場景中有效的共識算法。共識算法,是指讓分布式系統(tǒng)達成共識的方法。讓我們看看科學家們是如何一步一步限定場景,并實現(xiàn)該場景下的共識算法的。

首先,如果系統(tǒng)中的每一臺計算機都可以提出自己的結果,場面無疑是復雜的,因為我們連就哪一個結果去達成共識都無法知曉。所以解決共識問題的第一步是確定共識的到底是什么,最簡單的方法就是某一臺計算機說了算,它提出一個結果,其他的計算機來表態(tài)是否同意這個結果。

說了算的那臺計算機被稱為提案者或者領導者。雖然通過領導者來實現(xiàn)共識并不是唯一解決問題的方法,但絕大多數(shù)協(xié)議都是在此基礎上實現(xiàn)的,包括區(qū)塊鏈系統(tǒng)中使用的共識算法。

所以你看,并沒有絕對的去中心化,實現(xiàn)共識的第一步就是要確定一個中心。

題外話:當我們知道這一點后,就能建立起關于去中心化的更有效的討論,比如在此處就可以不泛泛而談去中心化,而是:選出這個領導者的方法是否去中心化。

回到主題。需要領導者的共識算法的工作步驟大致是這樣的:

選出一個領導者;領導者提出一個結果;追隨者確定是否同意這個結果;如果大家就結果達成了共識,系統(tǒng)輸出最終結果;如果大家未達成共識,回到步驟 1 重新開始。

這種思路提供了一種可以達成共識的方法,但它離真正實現(xiàn)共識還很遙遠。因為如果一臺計算機連接不上系統(tǒng),它就無法表決自己是否同意領導者的結果;如果出現(xiàn)問題的計算機恰好是領導者,情況就會更糟糕,整個系統(tǒng)會進入停滯狀態(tài)。

三、同步性假設共識算法

如何解決上述宕機的問題?方法說起來很簡單:如果一臺計算機連不上系統(tǒng),就忽略它,不要它參與這一輪的共識。

那么新的問題來了,我們怎么知道它是連接不上系統(tǒng),還是它正在參與共識只不過速度比別的機器慢?

因此,科學家們發(fā)展出了解決共識問題的最重要的一個假設:同步性假設。同步性假設引入「超時」概念,也就是說事先設定一個時間范圍,如果領導者無法在該時間范圍內發(fā)出提案,就淘汰它,選出一個新的領導者。這樣一來就可以容忍領導者節(jié)點出現(xiàn)問題。(注:同步性假設不等于同步假設)

Paxos 算法Raft 算法都是基于同步性假設提出來的。但這兩個算法還需要對系統(tǒng)做另一種假設,即認為系統(tǒng)內所有的計算機都是「好人」,它們要么正確地響應領導者的提案,要么因為故障無法響應。

然后再制定一條規(guī)則:只要系統(tǒng)內過半數(shù)的計算機接受了領導者的提案,就把該提案作為系統(tǒng)的最終結果。這樣一來,就不用等待所有的計算機都做出響應,從而可以容忍追隨者節(jié)點出現(xiàn)問題。于是,我們終于擁有了一個可以實現(xiàn)共識的分布式系統(tǒng),雖然對它有嚴格的條件限定。

Paxos 共識算法是由萊斯利·蘭伯特(Leslie Lamport)在 1990 年提出的一種基于消息傳遞且具有高度容錯特性的一致性算法,它在分布式系統(tǒng)應用領域有著重要的地位,包括 Google 在內的許多公司的大型分布式系統(tǒng)采用的都是該算法。而我們第一階段的探索也可以在此處結束,接下來是第二階段。

四、解決掉系統(tǒng)中的「壞人」

Paxos 雖然能實現(xiàn)共識,但它的算法是建立在所有計算機都是「好人」的基礎上的,這些計算機要么沉默,要么發(fā)出正確的聲音,因此整個系統(tǒng)中只有一種聲音,大家就這個聲音達成共識即可。而如果計算機中有「壞人」,系統(tǒng)里就會出現(xiàn)壞人的聲音和好人的聲音,Paxos 算法無法處理這一情況。

我們需要在有壞人的情況下也可以實現(xiàn)共識的算法,有沒有可能?萊斯利·蘭伯特建立了一個模型來討論這種可能性,該模型被稱作拜占庭將軍問題,其中的拜占庭節(jié)點就是壞人節(jié)點,它們會傳遞干擾信息阻礙整個系統(tǒng)達成共識。

在論文《The Byzantine Generals Problem》中,蘭伯特提出了幾種解決方案,其中一種可以在拜占庭節(jié)點不到 1/3 時實現(xiàn)系統(tǒng)的共識。也就是說,如果系統(tǒng)中壞人的數(shù)量少于 1/3,就可以通過算法實現(xiàn)共識。

這之后出現(xiàn)的 DLS 算法、PBFT 算法(實用拜占庭容錯算法)都是在此基礎上發(fā)展出來的。

PBFT 是具有代表性的一種拜占庭容錯算法,其實現(xiàn)過程大致如下。不理解該過程也沒關系,知道通過這種溝通方式能夠達成共識就可以。

pre-prepare 階段:領導者發(fā)送結果給所有追隨者。領導者在本圖中是 0 號節(jié)點,它把結果發(fā)給追隨者 1、2、3 號節(jié)點。prepare 階段:如果追隨者認為結果沒有錯誤,就告訴所有其他節(jié)點自己認可這個結果。比如 1 號節(jié)點會把自己的認可消息發(fā)給 0、2、3 號節(jié)點。commit 階段:如果追隨者發(fā)現(xiàn)超過 2/3 的節(jié)點認可了領導者的結果,就告訴所有其他節(jié)點自己接受這個結果為最終結果。reply 階段:如果領導者和追隨者發(fā)現(xiàn)超過 2/3 的節(jié)點接受了最終結果,就可以認為大部分節(jié)點達成了共識,就把該共識反饋給客戶端;如果客戶端收到超過 1/3 的節(jié)點的相同的共識,就可以認為全網(wǎng)達成了共識。

到此,我們就解決了有拜占庭節(jié)點的分布式系統(tǒng)的共識問題。不過如果系統(tǒng)中壞人的數(shù)量等于或多于 1/3,依然是無法達成共識的。我們能做的是通過系統(tǒng)的準入條件或激勵措施,讓壞人可以少于1/3。

對分布式系統(tǒng)的第二階段的探索到這里就結束了,接下來進入到第三階段。

五、中本聰共識算法不管 Paxos 還是 PBFT,都使用了同步性假設,事實上,大家對共識算法的研究幾乎都是在該方向上的,直到中本聰共識的出現(xiàn)。中本聰共識使用的是非確定性機制。

這是什么意思呢?我們可以把一個由 12 臺計算機組成的分布式系統(tǒng)想象成一個由 12 名陪審員組成的陪審團。我們把這 12 個人關在會議室里,遞進去一張紙條闡述案情,然后坐在會議室門口等他們給出審理的結果。

這 12 個人對于如何判決會有不同的意見,隨著討論的深入也可能改變自己的立場,還有的人可能睡著了無法發(fā)表看法(參考《十二怒漢》)。那么坐在門口等的人有兩種選擇。第一種選擇是你們去討論吧,讓我等多久都可以,但最后你們給我的必須是唯一確定的審理結果;第二種選擇是我等不了,你們先把最多人同意的那個結果給我,如果之后出現(xiàn)一個更多人同意的結果,我再改成那個結果。

顯而易見,我們只能二選一,如果要求結果確定,就不能保證一定能等到結果;如果要求拿到結果,就無法保證該結果一定是最終結果。

分布式系統(tǒng)就是這樣,只能二選一,第一種選擇被稱作 Finality,即「結果的確定性」或安全性;第二種選擇被稱作 Liveness,即網(wǎng)絡的活性或可用性。這兩種選擇決定了分布式共識兩種不同的設計思路:

追求 Finality,是優(yōu)先結果,就要對網(wǎng)絡做出要求。PBFT、Tendermint 都是這一類型的算法,它們走的是網(wǎng)絡的同步性假設路線,使用這類算法的系統(tǒng)不會出現(xiàn)分叉。追求 Liveness,是優(yōu)先網(wǎng)絡,就要對結果做出讓步。中本聰共識是這一類型的算法,它走的是結果的非確定性路線,使用這類算法的分布式網(wǎng)絡始終可用,而且任意節(jié)點都可以隨時加入 / 離開系統(tǒng)。

題外話,在 Finality 和 Liveness 中二選一也是分布式系統(tǒng) CAP 定理(不可能三角)的體現(xiàn)。該定理說的是:對于一個分布式系統(tǒng)來說,不可能同時滿足一致性、可用性和分區(qū)容錯性。因為分區(qū)容錯性是指該系統(tǒng)要能容忍網(wǎng)絡出現(xiàn)分區(qū),而現(xiàn)實網(wǎng)絡是一定會分區(qū)的,所以這個條件必須滿足,那么實際上,CAP 定理說的是一個分布式系統(tǒng)不可能同時滿足一致性和可用性,這其中,CAP 一致性體現(xiàn)的是 Finality,CAP 可用性體現(xiàn)的是 Liveness。

而不管是 FLP 不可能原理,還是 CAP 不可能定理,它們不是在告訴我們:這條路很難走通,你如果突破就是了不起的創(chuàng)新;它們告訴我們的是:這條路走不通,你要做的是根據(jù)需求來做權衡和選擇。

使用同步性假設的共識算法在前文已經(jīng)詳細地介紹過了,它們通過引入超時概念忽略出現(xiàn)問題的計算機,從而達成共識。使用非確定性機制的中本聰共識描述起來也很簡單:如果你看到某提議的區(qū)塊擁有最多的工作量證明,就接受該區(qū)塊,這也被稱作最長鏈規(guī)則。它的具體實現(xiàn)過程大家都很熟悉,本文就不再贅述了。

現(xiàn)在,讓我們看看使用同步性假設的系統(tǒng)(Finality,PoS 中使用較多)和使用非確定性機制的系統(tǒng)(Liveness,PoW 中使用較多)有什么不同。但需要提醒的是,并非所有的 PoS 都是 Finality 路線,比如 Casper FFG 就不是;而 PoW 也不是只能走 Liveness 路線,雖然并沒有人設計 PoW 上的 Finality 共識。

PoW 和 PoS 的不同在于一個是 Work,一個是 Stake。之所以需要強調這一點,是因為在關于 PoW 和 PoS 的討論中,我們往往不是在討論 Work 機制與 Stake 機制的不同,而是在比較 Finality 系統(tǒng)與 Liveness 系統(tǒng)的不同。比如「無需許可」性,它基本是一個 Finality 系統(tǒng)與 Liveness 系統(tǒng)的話題,而不是 Work 與 Stake 的爭論點。

讓我們回到有 12 個評審員的會議室。為了追求 Finality,每個評審員都需要了解其他每一個人的想法,也需要把自己的想法告訴其他每一個人,因此通信復雜度會隨著評審員人數(shù)的增加而迅速遞增,整個系統(tǒng)將因此不可用,所以必須控制陪審員的數(shù)量。

那么對于一個分布式系統(tǒng)而言就是,只挑選少數(shù)節(jié)點進入會議室,由它們決定共識,而其他節(jié)點只接受共識。因此這種系統(tǒng)中有三種角色,領導者、追隨者和學習者,領導者和追隨者是會議室中的評審員,他們需要好好工作,不然可能導致系統(tǒng)無法達成共識。

中本聰共識追求的是 Liveness,節(jié)點 / 評審員不需要與其他的每一個節(jié)點溝通,它只需要與自己身邊的節(jié)點交流即可,因此通信復雜度不會因為節(jié)點數(shù)量的增加而增加。你想成為評審員,就可以走進會議室成為評審員,無需許可,也不會增加陪審團達成共識的難度,同時你也可以不工作或隨時離開。該系統(tǒng)中只有領導者和追隨者兩種角色,所有人都在那間會議室里參與共識。

這樣看來中本聰共識似乎更符合大家對分布式系統(tǒng)的開放性的期望,但別忘了它之所以可以如此設計,是因為犧牲了 Finality,它的輸出結果是一個概率上的最終結果。

試想,你百分百在星巴克得到一杯咖啡,但星巴克并不能百分百收到錢,這并不符合大多數(shù)人能理解的世界運轉規(guī)則。所以非確定性機制有它自己的短板,以及不適合的場景。

另一方面,F(xiàn)inality 系統(tǒng)在保證了結果的確定性后,系統(tǒng)設計就要反過來追求 Liveness;而 Liveness 系統(tǒng)在保證了網(wǎng)絡的開放性后,系統(tǒng)設計就要反過來追求 Finality。中本聰共識為了提高結果的確定性或安全性,就需要做出其他讓步,比如 TPS。

比特幣為例。比特幣可以把出塊時間從 10 分鐘提高到 1 分鐘,TPS 會大幅提升,但 1 分鐘的時間不夠把消息傳遍全網(wǎng),系統(tǒng)中就會出現(xiàn)很多分叉,導致結果的可確定性變低;比特幣也可以把區(qū)塊大小從 1MB 提高到 100MB,TPS 也會提升,但大區(qū)塊對網(wǎng)絡和節(jié)點的要求高,會增加節(jié)點的進入門檻從而帶來中心化,導致輸出結果容易被篡改。

所以你看,設計分布式系統(tǒng)就像與撒旦做交易,你得到一些,必然要交出一些。沒有最好的系統(tǒng),只有適合解決某類問題的系統(tǒng);沒有單純的指標比較,只有是在什么設定下實現(xiàn)這種指標。

如果你理解了這一點,這篇文章的目的就達到了,而我們對分布式系統(tǒng)的探索到此也就全部結束了。

撰文:李畫

致謝:Genaro CTO 吳為龍

聲明:本文為入駐“火星號”作者作品,不代表火星財經(jīng)官方立場。

未經(jīng)許可擅自轉載本站文章,將追究相關法律責任,侵權必究。

提示:投資有風險,入市須謹慎,本資訊不作為投資理財建議。

以上就是關于pos機入門基礎,零基礎讀懂分布式系統(tǒng)的知識,后面我們會繼續(xù)為大家整理關于pos機入門基礎的知識,希望能夠幫助到大家!

轉發(fā)請帶上網(wǎng)址:http://m.dsth100338.com/news/33019.html

你可能會喜歡:

版權聲明:本文內容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權/違法違規(guī)的內容, 請發(fā)送郵件至 babsan@163.com 舉報,一經(jīng)查實,本站將立刻刪除。