分布式系統CAP定理與區塊鏈不可能三角

注:本文由網絡整理而來,首發于微信公眾號:硬幣研究院。

一、CAP定理

分布式系統CAP理論的三個特性:

● 一致性(C):在分布式系統中的所有數據備份,在同一時刻是否同樣的值。(等同于所有節點訪問同一份最新的數據副本)

● 可用性(A):在集群中一部分節點故障后,集群整體是否還能響應客戶端的讀寫請求。(對數據更新具備高可用性)

● 分區容錯性(P):以實際效果而言,分區相當于對通信的時限要求。系統如果不能在時限內達成數據一致性,就意味著發生了分區的情況,必須就當前操作在C和A之間做出選擇。

CAP原則又稱CAP定理,指的是在一個分布式系統中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區容錯性),三者不可兼得。

CAP理論就是說在分布式存儲系統中,最多只能實現上面的兩點。而由于當前的網絡硬件肯定會出現延遲丟包等問題,所以分區容忍性是我們必須需要實現的。所以我們只能在一致性和可用性之間進行權衡,沒有NoSQL系統能同時保證這三點。

當前的區塊鏈 技術也存在“不可能三角”,即無法同時達到“高效低能(環保)”、“去中心化”、以及“安全”這三個要求,具體來看:


(一)追求“去中心化”和“安全”則無法達到“高效低能”, 比特幣區塊鏈技術便是一種極致追求“去中心化”和“安全”的技術組合。?

從數據結構上看,它采用擁有時間戳的“區塊+鏈”的結構,在可追溯、防篡改上具備安全優勢,也易于分布式系統中的數據同步,但是若需要對信息進行查詢、驗 證,則涉及到對鏈的遍歷操作,而遍歷是較為低效率的查詢方式。

在數據存儲上,它的每一個節點都下載和存儲所有數據包,利用強冗余性獲得強容錯、強糾錯能力,使得網絡可以民主自治,但同時也帶來了巨大的校驗成本和存 儲空間損耗。它并不像分布式數據庫那樣隨著節點的增加可以通過分布式存儲提高整體存儲能力,而只是簡單地增加副本。未來隨著區塊鏈技術所承載的內容增 多,單個節點的存儲空間將是個問題。

在并發處理上,比特幣區塊鏈技術最終只允許一個 “礦工”獲得記賬權建立一個交易區塊,這種機制可以有 效保證一個民主網絡運行的安全和穩健,但其實質上是擁有所有數據的整個“鏈條”在進行串行的“寫”操作。 相比關系數據庫將數據分為若干表,僅僅根據操作涉及 的數據鎖定若干表或表中的記錄、其他表仍能并發處理 相比,比特幣區塊鏈技術的串行操作效率遠低于普通數據庫。

在對內容的驗證上,比特幣區塊鏈讓每個節點都擁 有所有的內容,同時對區塊內的所有內容進行哈希,這 增強了民主性和安全性。但是這種整體哈希的設計思 路則意味著不能以地址引用的方式存儲數據,否則由于 所引用地址上所存儲的信息由于并未進行哈希校驗而 可能存在篡改。

因此,比特幣區塊鏈技術缺乏高效的可 擴展性,在對大型內容的處理上存在效率問題。

(二)追求“高效低能”和“安全”則無法完全實現“去中心化”

從“共識機制”角度看,為了在確保“安全”的前提下解決比特幣區塊鏈技術所采用的工作量證明方式的低 效性,權益證明(Proof of Stake)、股份授權證明(Dele? gate Proof of Stake)等機制被采用。

但是無論是基于網 絡權益代表的權益證明,還是利用101 位受委托人通過 投票實現的股份授權證明,實際上都是對“去中心化”的 退讓,形成了部分中心化。

同樣在區塊鏈技術的演化上,除了以比特幣為代表 的公有鏈技術外,又衍生了聯盟鏈技術和私有鏈技術。

聯盟鏈技術只允許預設的節點進行記賬,加入的節點都 需要申請和身份驗證,這種區塊鏈技術實質上是在確保 安全和效率的基礎上進行的“部分去中化”或“多中心 化”的妥協。

而私有鏈技術的區塊建立則掌握在一個實 體手中,且區塊的讀取權限可以選擇性開放,它為了安 全和效率已經完全演化成為一種“中心化”的技術。

(三)追求“高效低能”和“去中心化”則必須犧牲“安全”

一個極端的案例便是基于 P2P(Peer-to-Peer)的視 頻播放軟件。

以往當在線觀看人數增多時,基于中央服 務器設計的視頻服務器會因承載壓力變大而速度緩 慢。為了提高效率,P2P 視頻播放軟件的設計使得一個 節點在下載觀看視頻文件的同時也不斷將數據傳輸給 別人,每個節點不僅是下載者同時也是服務器,資源的分享形成不再依賴于中央服務器的“去中心化”模式。

同時,由于視頻一秒有24 幀,少量圖片的局部數據 損壞并不影響太多的視覺感官,但是用于數據校驗而出 現的圖像延遲則是不可接受的。于是 P2P 視頻播放軟 件犧牲了“安全”性,允許傳輸的數據出現少量錯誤。

在 這種去中心化的網絡中,參與的節點越多,數據的傳播 越快,傳播的效率越高。當然這對于嚴謹的金融業來說,數據的錯誤是不可接受的,安全也是金融業所首要 考慮的問題。

總之,從當前的技術條件來看尚無法實現“高效低 能”、“去中心化”和“安全”三者皆得的區塊鏈技術。但是若對其一個或若干個要求進行妥協,所產生的新技術 集合由于更符合實際需求,有可能它對實際應用的吸引力反而增強。

二、為什么比特幣這么慢?


你可能會聽人說過,BTC轉賬太慢、技術落后,要被淘汰了等等一些話。但是如果你明白了CAP定理,你就會知道,BTC的慢,是有它的道理的。

區塊鏈是一個分布式系統,分布式系統中就一定存在CAP定理,因此BTC也滿足CAP原理。

這里著重說一下 P ,?就是分區容忍性。這個分區容忍性什么意思?所謂分區指的是網絡分區的意思,詳細一點解釋,比如你有A B兩臺服務器,它們之間是有通信的,突然,不知道為什么,它們之間的網絡鏈接斷掉了。好了,那么現在本來AB在同一個網絡現在發生了網絡分區,變成了A所在的A網絡和B所在的B網絡。所謂的分區容忍性,就是說一個數據服務的多臺服務器在發生了上述情況的時候,依然能繼續提供服務。所以顯而易見的,P是大前提,如果P發生了,咱們的數據服務直接不服務了,還談個毛的可用性和一致性呢。

所以其實并不是三選二,而是二選一。P是必然的,然后或者選擇一致性,或者選擇可用性。

所以大家首先要明白,比特幣,就是因為選擇了一致性,所以放棄了可用性。簡單說,就是慢。

所以,分布式系統天生就慢。這種慢,更像是遲鈍,原因很簡單:分布式系統范圍一大,節點間的通信耗時就長。


我們拿銀行的ATM舉例,再理解下 CAP。

銀行設計ATM時,強一致性是必然選擇,因為算不清楚錢對銀行來說是件很嚴重的事情。可實際場景中,對可用性的渴求卻超越了一致性,銀行的理由很直白:更高的可用性意味著更高的收入。

我們知道,ATM機有三個基本功能:存錢、取錢和查余額。不管怎么折騰,銀行有一條底線規則必須遵守:用戶借記卡余額不得小于零。我們看存款和查余額,都不破壞這條規則,于是在這兩種的設計上,就可以放棄一直性,照顧更多的可用性。

所以你可以隨時存款,盡管存款后的余額不可能立即傳遍全網;隨時能查余額,盡管屏幕顯示的余額未必最新鮮準確。

只有取款,被另外設計了一下。

我們知道,在通訊網絡故障,或者延遲的情況下,分布式系統會產生分區現象。銀行本來是可以在發生分區的時候,禁止你取款的。但是這樣,你就會覺得不舒服,ATM用起來,也不便利。所以銀行為了照顧用戶的感情,權衡之后,只能選擇可用性。銀行做了兩件事:

一是提升內部通信速度,壓縮節點間的通信時長

二是設置限額,比如單次取款最高5000。每日最高2萬元。

這個大家都遇到過吧,是不是以前覺得這條規則特別煩人???但是這是銀行為了考慮把自己的損失降低到最小設計的,這是放棄用戶隨時取到借記卡內所有余額的可用性,轉身捕捉另一種可用性:能隨時取出小額現金,因為后一種可用性在雙方看來價值都更高。

因為會出現這種情況:

比如你賬戶余額5000元。銀行的網絡產生了分區,而此時,你的老婆,用存折在柜臺取出了1000元,此時你賬戶余額應該是4000。但是因為分區,數據并沒有形成一致,而你正好在ATM提款,你發現賬戶里面是5000,你全部取了出來。這樣銀行實際上,損失了1000元,這就是銀行的風險。但是1000元的風險,對于銀行來講是可控的,因為概率非常小,但是是存在的。銀行會通知你還錢,即使你不還,銀行的損失也可以接受。

比特幣,就是慢。慢到大家都接受不了,但是這種慢,是有道理的。

道理就是CAP定理:為了在一個分布式系統內追求全網賬本的嚴苛一致,可用性理所當然地被犧牲,所以只能悶等,直到交易信息被深深刻進鏈上。速度方面,比特幣的用戶體驗低落到極致,但以此為代價能堅守全網賬本信息一致,最終保證系統安全,那這點慢就忍了吧。而其他的幣,為了解決比特幣這種慢,八仙過海,各顯其能。

有的拓寬渠道,好比原來雙車道改成八車道,這樣單位時間內能承載更多的信息流,比特幣現金就是這樣。

有的采取離線交易的方式,比如閃電網絡。礦工忙的時候不會例會壓箱底的那堆小額交易,這是因為手續費激勵不足導致的動力不夠,那高頻小額交易就由“小銀行”幫你劃轉了吧,你就省錢省心吧。

BTC、BCH和閃電網絡三者都沒有違背CAP原理,后兩者在比特幣原有的嚴格一致性上給予用戶更多可用性,但在更大交易量的沖擊下,可用性和安全性是否會變形,還要讓時間去考驗它們。

保證比特幣一致性的共識算法是POW,起點思路在于追求完美的一致性,于是只能犧牲很多的可用性。POW發動全網礦工邊記賬邊猜數,猜到才能獎到,于是猜數字的算力逐漸演化為系統內的權力,最終這種格局牢不可破。

ETH要改的POS共識算法,要股權證明。是系統挑出一些區塊生產者,去掉POW的猜隨機數環節,產生的區塊交給符合條件的持幣者驗證上鏈。

這大大降低了達成一致所需的時間,可代價卻藏在另外的角落里。一些POS算法會產生一個反直覺的結果:一個塊可以在其后的塊都最終確定后,依然處于未確認的狀態,這樣可能會折損系統層面的安全或穩定。當然,這些都是需要時間來驗證的。

還有EOS,EOS的DPOS,所有持幣者天然都有等比例的投票權,以此選出一定數量的區塊生產者,不稱職的生產者可被投出局,以此確保全系統的高效安全穩定。

從Steemit和Bitshares兩個分布式應用順利運行一到三年的結果來看,DPOS是當前擴展區塊鏈最出色的共識算法。但是再快的DPOS也無法在當下瞬間反饋全網其他節點的最新狀態。

一致性永遠是相對的。所以,我們總結一下。?

CAP定理的存在,宣判了分布式系統天生的殘缺性,但是在實際應用中,我們可以通過努力,讓一般用戶感覺不到這種殘缺。實際場景中需要思考的是:犧牲的一致性能獲得多大的可用性。

所以到底哪種算法才是最好的?我沒法判斷,只能說,沒有最好的,只有最適合的。

這就是今天想分享的內容,讓大家明白一下,為什么BTC慢,EOS快。但是有得必須有舍, 跟網速沒關系的, 幣王所有的設計,都是完美的, 其他幣種所謂的技術進步,其實都是為了商業服務而已,本身就改變了BTC的初衷。

加助手微信:li879949137,一起學習區塊鏈。

掃碼關注我們的公眾號:

我們的小密圈:

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容