1. 程式人生 > >5分鐘用最簡單的道理理解區塊鏈

5分鐘用最簡單的道理理解區塊鏈

區塊鏈到底是啥?不明真相的群眾一般都去查維基百科,上面是這麼說的:

區塊鏈(英語:blockchain 或 block chain)是用分散式資料庫識別、傳播和記載資訊的智慧化對等網路,也稱為價值網際網路。中本聰在 2008 年,於《比特幣白皮書》中提出「區塊鏈」概念,並在 2009 年創立了比特幣社會網路,開發出第一個區塊,即「創世區塊」。

看完以後你是不是發現,都是中國字,怎麼就搞不懂是啥意思呢?所以區塊鏈的概念還是得解釋一下。首先需要明確的是,區塊鏈是一套協議和規範,用英文表述就是 Protocol,不是具體的程式碼或者專案。理解了這套協議,你可以基於不同的語言和技術去實現它,這和我們平時定義了一套 API,然後基於不同的技術實現沒有什麼分別。

但是區塊鏈在不同領域的人眼裡,可能是不同的東西。角度不同,我們得出的結論也不一樣。金融領域的人會認為區塊鏈是個分散式的賬本,是一個分散式的去中心化的記賬系統。搞安全和密碼學的人會說區塊鏈是基於密碼學構建的對等網路。而我們程式設計師瞭解了區塊鏈技術,會認為這不就是一個保證最終一致性的分散式資料庫嘛。

記賬系統

對於普通人來說,記賬系統最容易理解,我們從賬本說起。比如大家一起做生意,總要有個賬本,最初這個賬本由賬房先生管理。但一個人管,總會出現對賬不平衡的情況(比如挪用),於是大家開始輪流管。這種方式也有問題,在某個人保管賬本和記賬期間,一旦發生了資料丟失或賬本損壞的情況,也會搞不清真實原因。最後大家決定用一種新的記賬方式,每個人一個自己的賬本,任何人改動了自己的賬本都要告訴其他所有人,其他人也會在自己的賬本記上一筆。只要有人發現新的賬目不對,可以拒絕接受。最後以大多數人一致的賬目為準。

這就是分散式的去中心化的記賬系統。但這種做法時間長了還是會有問題,有人天天記,有人偷懶不記,會產生不公平。於是大家決定每天早上擲骰子,根據點數決定誰來記當天的賬,其他人核對一下,沒問題就複製過來。並且,當天的記賬者會獲得一點點獎勵(這就是挖礦)。

去中心化的分散式資料庫

把上面的記賬系統用軟體技術實現了,就是去中心化的分散式資料庫。

什麼是中心化,早期網際網路大都採用 CS 架構,一個伺服器 N 個客戶端,Client 和 Server 之間進行通訊,系統可靠性嚴重依賴 Server,這叫中性化。

隨著業務複雜度的增加,伺服器端也開始分拆,橫向和縱向擴充套件,讀寫分離等等,這就是我們常用的分散式架構系統,系統可靠性依賴分散式系統的熱備份和容災恢復能力。這時候伺服器雖然分佈了,但依然是中性化的。大部分商業公司都採用類似的架構和模式。

去中心化是怎麼回事呢?就是資料庫不屬於任何機構和管理員。只要伺服器端被某個機構或管理員控制,就存在宕機或資料篡改的風險。區塊鏈和 P2P 的網路通訊技術最終實現了去中心化。區塊鏈的作用就是儲存資訊,可以認為是一個數據庫,而任何人都可以通過 P2P 網路架設伺服器,接入區塊鏈網路,成為一個節點。這下人人平等了,大家都是 Server,也就沒有了 Server,每個節點既是生產者也是消費者。

你可以向任何一個節點讀寫資料,一旦寫入就是歷史,最後所有的節點都會同步資料,保證「賬本」的一致性。

區塊鏈是沒有管理員的,也不需要人工稽核和干涉。那人人都能寫資料,資料的可信度怎麼保證呢?資料被篡改了咋辦?別擔心,P2P 網路只是進行資訊通訊,保證資料安全的還有共識演算法和加密演算法。

共識演算法

關於共識演算法、拜占庭將軍問題,大家可以參考這一篇文章,很長,但容易看懂。

分散式一致性與共識演算法(https://draveness.me/consensus)

簡單來說,共識演算法就是保證少數服從多數,也就是我在記賬系統中寫過的「最後以大多數人一致的賬目為準」。大多數人認可的事情,就是事實。這種規則聽起來挺嚇人的,比如我們常常在文學作品和歷史經驗中知道,真理往往掌握在少數人手裡。但是在 P2P 的網路裡,有無數的節點,要想大部分節點一起作惡,除非這些節點都被某個組織控制了。這種可能性雖然不是沒有,但機率非常小。

總的來說,共識演算法解決的是對某個提案(Proposal)達成一致意見的過程。提案的含義在分散式系統中十分寬泛,包括多個事件發生的順序、某個鍵對應的值…等等,可以認為任何需要達成一致的資訊都是一個提案。

有了共識演算法和相關的加密演算法,就可以保證資料的安全性和一致性。

為什麼會挖礦?

談到比特幣,大家耳熟能詳的就是挖礦和礦機這種事。那為什麼會挖礦呢?挖礦其實是一種激勵和競爭機制。

在區塊鏈系統中,總有些節點被選中進行資料整理、驗證、打包,並把相關的改動廣播出去,這個工作還是挺耗資源的,所以會有獎勵機制。負責打包的節點會獲得系統的獎勵,類似積分,對於比特幣系統來說,就是獎勵比特幣。有了獎勵,很多節點都希望獲得這樣的獎勵,於是有些區塊鏈系統,比如比特幣就會設計出一種競爭機制,讓各個節點憑藉自己的算力和資源去搶,能搶到這個資料打包的機會,就會獲得獎勵,也就是比特幣。這個競爭的過程就是挖礦。

什麼是算力呢?就是計算機每秒產生 hash 碰撞的能力。也就是說,手裡的礦機每秒能做多少次 hash 碰撞。算力越高,獲得的獎勵越多。

區塊鏈的未來

很多人覺得區塊鏈的唯一應用就是發行虛擬貨幣,最近國內外市場也是烽煙四起,比如超過百年曆史的伊士曼柯達公司宣佈推出基於區塊鏈技術的「柯達幣」(KodakCoin)和 KodakOne 平臺,讓全球的攝影師能夠更好的控制圖片的版權和交易。然後股價就飆升了……

瞭解了區塊鏈的技術特點,我們就知道,區塊鏈的能力遠不止虛擬貨幣領域,未來的 金融服務、物流、保險、醫療、共享經濟、智慧合約領域,應該都會有區塊鏈的身影。

繁華落盡,洗盡鉛華,所有的技術都將經歷時間的洗禮。歷經爆發期、衰退期並進入成熟期的技術,才是真正能具備生命力的技術。