官术网_书友最值得收藏!

1.2 正說區塊鏈

2018年年初以來,區塊鏈一詞火遍了大街小巷,出租車司機、程序員、培訓機構等都在談論區塊鏈。區塊鏈在網絡上也成了熱門搜索詞匯,在百度指數上搜索區塊鏈可以看到,區塊鏈從2018年1月陡然成為熱詞,之后持續保持“網紅”趨勢,搜索指數居高不下,如圖1-1所示。

圖1-1 區塊鏈百度搜索指數

什么是區塊鏈呢?

區塊鏈一詞最早出現在中本聰(Satoshi Nakamoto)的“比特幣:一種點對點的電子現金系統(Bitcoin: A Peer-to-Peer Electronic Cash System)”一文中。

在比特幣系統中,區塊鏈作為存儲底層,承載了上層眾多認同比特幣相關協議并嚴格遵守及維護協議的節點(個人或組織)的記錄各類信息的行為。

區塊鏈的存儲是一種鏈式存儲,區塊按照生成的時間順序前后鏈接,區塊的鏈接基于區塊存儲內容的哈希值構建。區塊生成后會在區塊鏈系統的各個節點(個人或組織)中同步,因此各個節點最終均保存了一份完整且一致的數據。也就是說,區塊鏈系統會保持最終一致性,但不保證實時一致性。

比特幣系統中理論上不支持數據的刪除和修改。數據的刪除和修改意味著其修改所在區塊的哈希值也需要隨之修改,而該區塊之后的所有區塊的前向鏈接哈希值均需改變。隨著比特幣系統中節點(個人或組織)數量的增多,前向哈希值的修改和同步工作會愈發繁重。在比特幣全網絡中對數據刪除和修改變得愈發困難,因此比特幣系統中區塊數據的不可篡改性就體現了出來。

由于加入比特幣網絡的節點(個人或組織)嚴格遵守比特幣協議,因此區塊鏈從理論上具備了承載信用的特性。

從技術上來說,區塊鏈技術并非憑空產生,而是基于已有技術演變而來的。

區塊鏈的鏈式構成和我們上學時所學的《數據結構和算法》這類書籍中的單鏈表有一定的相似性,鏈表中的各部分內容均通過指針(哈希值也是泛化指針的一種形式)相連。不同之處在于,單鏈表是從前向后構建關聯關系,即新插入一個內容時,需從鏈表的表頭開始移動指針至鏈表尾部,再將尾部的指針指向新建的內容,新建的內容自動成為鏈表的尾部。而區塊鏈是從后向前構建關聯關系,即新生成的區塊通過前面區塊的哈希值與前面區塊建立連接。

區塊中header+body的結構設計與Web開發中常見的HTTP協議有一定的相似性。HTTP協議的request和response均由三部分組成:request/response line、request/response body、request/response header。

區塊內容的加密就更常見了,無論是對稱加密,抑或是非對稱加密,在MySQL敏感數據存儲、接口參數加密、OAuth授權等無處不在。而區塊內容中多條交易信息對應的Merkle樹源于《數據結構和算法》中的二叉樹。

區塊鏈中P2P網絡是區塊鏈系統的基礎。共識的達成、數據的同步均依賴于高效的P2P網絡系統。P2P網絡的構建源于少見的Java網絡編程部分。在生活中,QQ、微信、微博等場景均有類似應用。如果讀者研究過ElasticSearch、Redis集群、Kafka集群等數據同步的代碼,對開發和構建P2P網絡應該更有信心。不過隨著技術的發展,Java開發小伙伴可以不再基于原始的Socket進行開發,可以選用WebSocket或t-io等組件進行開發。

區塊鏈上共識的達成基于共識算法。共識算法的起源算法很多讀者都熟知,如Paxos一致性算法,分布式數據庫的二、三階段提交協議、ZooKeeper的快速選舉算法等。當然,不同的公鏈、聯盟鏈的共識算法在不同場景有不同的選擇,但算法基礎都是一脈相承的。

區塊的存儲和常見的分布式應用開發略有不同。在分布式應用開發中,我們熟悉的分庫分表、分布式緩存集群等并不適用。區塊鏈的每個節點是一個單機,存儲也隨本機進行。因此,區塊的存儲往往選用高性能的文件系統或高性能的單機版SQL/NoSQL數據庫,如SQLite、LevelDB、RocksDB等。當然,單機的存儲空間始終是有限的,隨著存儲承載壓力的增加,后續區塊鏈存儲的擴容也可能成為區塊鏈領域的另一種創新。

看到這么多相似的技術,是不是已經覺得區塊鏈底層的研發不再高不可攀了呢?來吧,筆者將帶你走進區塊鏈底層開發世界,曾經以為的高門檻將不再遙不可及!

主站蜘蛛池模板: 德令哈市| 栾川县| 轮台县| 大埔县| 曲阜市| 英超| 宝兴县| 南平市| 安多县| 清徐县| 莱西市| 共和县| 含山县| 新蔡县| 芒康县| 浪卡子县| 彰武县| 屯留县| 陈巴尔虎旗| 曲麻莱县| 星座| 遵义县| 双桥区| 新乡县| 绥阳县| 崇仁县| 天长市| 沁源县| 武宁县| 土默特右旗| 忻城县| 年辖:市辖区| 湟中县| 乌拉特中旗| 和平区| 贵定县| 江津市| 南投市| 杭州市| 陵川县| 都兰县|