- 區塊鏈底層設計Java實戰
- 牛冬編著
- 1499字
- 2019-07-25 11:59:19
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等。當然,單機的存儲空間始終是有限的,隨著存儲承載壓力的增加,后續區塊鏈存儲的擴容也可能成為區塊鏈領域的另一種創新。
看到這么多相似的技術,是不是已經覺得區塊鏈底層的研發不再高不可攀了呢?來吧,筆者將帶你走進區塊鏈底層開發世界,曾經以為的高門檻將不再遙不可及!
- WildFly:New Features
- Kali Linux Web Penetration Testing Cookbook
- Elastic Stack應用寶典
- Python Network Programming Cookbook(Second Edition)
- JavaScript by Example
- 深度學習:算法入門與Keras編程實踐
- 快速念咒:MySQL入門指南與進階實戰
- H5頁面設計:Mugeda版(微課版)
- Python忍者秘籍
- Web Development with MongoDB and Node(Third Edition)
- 深入分布式緩存:從原理到實踐
- MySQL從入門到精通(軟件開發視頻大講堂)
- Python機器學習算法: 原理、實現與案例
- JavaScript程序設計(第2版)
- Everyday Data Structures