?

基于區塊鏈的數據存儲方案的實現方法研究

2022-11-22 09:08張亞蘋楊少英
信息記錄材料 2022年9期
關鍵詞:哈希區塊服務器

張亞蘋,楊少英

(廣東科技學院 廣東 東莞 523000)

0 引言

根據有關部門的推測,預計在2025年時全世界的數據生產量會是2016年的10倍,數據預計達到163 ZB。如此龐大的數據增長促使數據存儲行業進行改革發展,以指數形式增長的數據使得傳統的集中式數據存儲系統不堪重負。傳統的數據存儲系統幾乎均采取中心管理式的存儲方式,在如此大量的數據面前,傳統的數據存儲方案的集中管理可靠性低、擴展性差、成本昂貴等缺點被不停放大,如此一來傳統的數據存儲系統也將逐漸退出歷史舞臺。

伴隨著云計算的橫空出世,分布式的數據存儲模式也隨之誕生。分布式的存儲服務器采用易于擴張的系統架構,使用散布在各個位置的存儲服務器來共同存儲數據,存儲數據的位置信息由特定的服務器進行記錄[1]。 然而分布式存儲環境的不穩定以及高度集中化的管理,使得用戶的數據面臨泄露和被非法入侵的問題。為了在提供一定的數據存儲服務能力的同時保障用戶隱私安全,基于區塊鏈的分布式存儲系統由此誕生。

比特幣的橫空出世使得其底層技術區塊鏈也首次踏入了21世紀,無中心服務器管理的分布式存儲系統最大的特性就是安全、無第三方機構參與,同時利用點對點通信網絡來實現性能高效、成本低廉等特性。與傳統的數據存儲方案相比,利用區塊鏈技術構建的數據存儲方案可以有效地確保數據的完整性和有效性,同時區塊鏈也為全世界的數據存儲行業提供一個新的存儲方向從而緩解大量數據的存儲壓力[2]。

1 區塊鏈系統需求分析及關鍵技術

1.1 區塊鏈系統需求分析

本系統是基于區塊鏈實現的簡易數據存儲服務器,該系統可以較為良好地實現區塊鏈的基礎特性。存儲于該服務器中的數據具有不可篡改的特性,同時本系統是去中心化管理的,沒有服務器會對系統進行維護,因此在系統運行時要確保應用層的功能盡可能地簡便,而底層支持功能要盡可能地完善以保障系統的正常運轉。系統應用層的功能是:數據發送和數據展示功能。系統的底層支持功能主要有:提交數據(挖礦)、注冊節點、沖突解決等。綜上所述,本系統可以分為應用層與底層支持兩個模塊,如圖1所示。

圖1 系統總體框圖

1.2 區塊鏈系統關鍵技術

1.2.1 點對點網絡通信

點對點網絡(peer-to-peer)又名對等式網絡,是一個無服務器管理的開放式節點網絡,網絡由各個節點共同維護。在點對點網絡中用戶可以作為節點參與整個服務器,節點可以同時作為前端與后端,前端為用戶提供相應功能,后端則是在后臺作為服務器進行使用。在對等式網絡中節點與節點之間無法直接進行聯系,節點與節點之間的交互聯系必須依靠網絡來實現。在一個開放的點對點網絡中,每個節點都可以擁有完整的數據,即便單點出現故障也很難影響整個系統的數據安全[3]。

1.2.2 數字加密技術

數字加密技術簡而言之就是將一段需要進行保護的文件數據通過特定的算法手段將其變成一段無意義的數據,文件接收者可以通過特定的算法對無意義的數據進行還原,數據內容在還原后不會發生變化,在文件數據的加密過程中可以有效地保護數據的安全。加密技術根據使用方法不同可以分為:對稱加密和非對稱加密。

1.2.3 共識機制

共識機制是區塊鏈技術關鍵的組件,在區塊鏈的分布式存儲管理中,由于缺乏中心服務器的管理,在新數據被寫入服務器后,節點之間更新數據的速度不一樣,共識機制的存在可以確保節點之間達成共識,可以確保節點之間存儲的數據具有一致性[4]。目前主流的共識機制有:工作量證明機制(POW)、權益證明機制(POS)、股份授權證明機制(DPOS)、驗證池(POOL)。

1.2.4 區塊鏈技術

區塊鏈從原理上可以理解成是一個無中心服務器管理的分布式數據庫。區塊鏈由眾多合法的區塊共同連接而成,每個區塊都存儲著其自身的哈希值,區塊哈希值依據哈希算法不可逆地產生,因此每個區塊都有不同的特征值。同時每個區塊都存儲著上一個區塊的哈希值和區塊被創建時的時間戳,區塊鏈通過相鄰區塊的哈希值進行連接。因而如果想要修改某一個區塊上的數據,從理論上應該修改3個及以上數量的區塊信息才可實現。但由于區塊鏈的分布式網絡的存在,數據篡改幾乎難以實現,如果擁有具有修改區塊鏈數據的算力,通過篡改數據獲得的收益遠不如在區塊鏈系統中合法“挖礦”獲得的獎勵。公有鏈是完全開放的網絡,其特點是任何用戶均可注冊加入該網絡。完全開放的公有鏈中不存在任何服務器或組織對節點網絡進行管理,因此公有鏈的去中心化程度是三類區塊鏈中最高的。公有鏈的代表是出現時間最早,發展也最為成熟的比特幣交易系統[5]。

私有鏈是由某個機構或個人控制的區塊鏈。用戶想要將數據寫入區塊或者創建新區塊,需得到機構或相關節點的授權。私有鏈與公有鏈對比,交易的周期花費的時間更短,交易的成本更為廉價。私有鏈在保護用戶數據這一方的性能也更加優越,因為私有鏈的區塊鏈信息不會對全網公開。聯盟鏈,是在多方機構共同監督下運行的區塊鏈,由機構控制網絡中的節點,再利用節點來存儲區塊鏈中的數據,多方組織機構共同維護整條區塊鏈的利益。從本質上而言,聯盟鏈算是一種特殊私有鏈,不過相對于普通的私有鏈,聯盟鏈的去中心化程度較高。聯盟鏈的代表為螞蟻金服于2020年推出的螞蟻聯盟鏈,其旨在通過一種更為簡便的方式來實現商業的聯盟鏈發展,幫助小微企業在不同的區塊鏈上開發更好的應用以及智能合約。

2 區塊鏈系統設計

2.1 區塊鏈存儲系統開發環境

本系統基于Python語言進行編碼開發,前端網頁使用Python的Flask框架。Flask與Python有很好的兼容性,可以較為出色地完成網頁的開發。

Flask框架誕生于2010年,是一個用Python語言基于werkzeug工具箱編寫的輕量級Web開發框架。它主要面向內容較少、周期較短的小項目。依賴其簡易的使用特性可以較為出色地完成本系統的框架搭建。

下面將對Flask中使用到的路由協議和Http常用的請求方法進行簡單的描述。

2.1.1 路由(Route)

當用戶在使用網頁發送數據時,網頁會將用戶的請求轉交發送給程序實例,在程序實例中記載了接收到不同請求時應返回的數據內容。由于程序實例中無法直接處理多種類型的請求,需要一個中介進行信息的轉換,可以使得程序實例在接收到網頁發送的請求時,可以直接返回相應的內容。這個進行信息轉換的中介便是路由,在路由中存儲了各種請求與對應的特定函數的關系表,在FLASK中使用route()來將用戶的請求轉換成程序實例中的函數。

2.1.2 Http的常用請求方法

Http協議是一個使用范圍最大的Internet協議,目前主流的請求方式有8種,分別是GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

下面將對GET、POST、PUT方法進行簡單的介紹。

GET方法是利用特定的URI在特定的服務器中發出請求信息,可以簡單理解為GET方法是用于請求獲取指定的資源。GET請求是可以被瀏覽器進行記錄保存的,當發生遺漏時,用戶可以在瀏覽器的歷史訪問記錄中找回GET請求。GET請求只能用于向指定資源請求獲取數據,請求長度也存成一定的限制。

POST方法可以將數據發送至指定的資源中,使得服務器創建新的資源或者修改已有的資源。與上述的GET請求不同,瀏覽器無法記錄POST請求,請求的內容也不存在限制。

PUT方法,PUT請求的功能也是向服務器進行信息的發送。PUT方法與POST方法的不同之處在于,POST請求每次都會讓服務器創建一個文件,而PUT請求只是請求服務器將資源進行更新??梢院唵卫斫鉃?,PUT請求用于更新資源,POST請求用于創建資源。

2.2 創建區塊

區塊鏈中任何一個區塊都需包含上一個區塊的哈希值、本區塊的哈希值、數據內容、時間戳這四項最為基礎的信息。區塊如圖2所示。

圖2 區塊框圖

初始區塊(祖先區塊):祖先區塊是區塊鏈最初始的一環,它后面連接著眾多區塊。祖先區塊的區塊信息中不含上一區塊的哈希值,這是最為關鍵的不同之處。區塊連接圖如3所示。

圖3 區塊連接圖

2.3 工作量證明機制(POW)

本系統采用簡單的工作量證明機制,系統需計算出一段滿足系統需求的數字。計算難度設置在計算出一段特殊數字中開頭數字為0的數量,程序思想采用窮舉法實現。程序如下所示:

計算出一串特殊的數字后,需對該數字再次進行驗證,驗證通過后才能確認這一段特殊數字的有效性。驗證的方法是直接驗證特殊數字是否滿足設置的難度要求,驗證規則是判斷數字0的數量是否大于或等于難度要求的數量。

程序示例:guessHash[:4]=='0000',這段程序中數字0的數量可以進行改變,比特幣系統也同樣使用這類最為簡便直接有效的驗證方法。但比特幣的難度是處于動態的自我調節中,由系統進行自動調整計算難度。比特幣系統會根據在目前算力環境下所花費的時間進行調整。截至今天計算難度已經達到21.87T,需計算出前17位數字為0的特殊數字(哈希值)。具體實現流程圖如圖4所示。

圖4 POW模塊程序流程框圖

3 區塊鏈系統實現

本系統采用Python的Flask框架來實現添加API接口,API接口是后端負責接收請求、響應純數據的端口。對于區塊鏈系統而言,實現新交易數據、查詢顯示數據、注冊節點模塊、解決沖突模塊都是非常關鍵。在所實現的技術領域上應當將區塊鏈的整體設計與模塊化的實現關聯起來,讓系統表現得更加充分。

3.1 提交新交易模塊

創建一個接口供于提交新數據,提交的數據包括作者及其數據。首先獲取信息數據,將獲取的內容轉換成JSON格式。再確認接收的數據是否滿足“作者+內容”的數據格式,若滿足則將其添加至新數據,不滿足則返回提交數據不符合規則的提示。

3.2 查詢顯示數據

創建一個API,該API的功能用于返回區塊鏈中的交易內容。這個接口可以獲取完整的區塊鏈內容,并將其按照時間順序進行顯示。

3.3 注冊節點模塊

注冊節點不同于上述的提交交易模塊和顯示數據模塊,注冊節點是POST請求,不是GET請求。用戶需使用Postman軟件或者curl來實現注冊節點。注冊節點需要注意注冊節點的格式,其格式需滿足要求。

3.4 解決沖突模塊

服務器網絡處于一個動態的變化之中,不斷有新區塊的產生,當網絡中的節點確認的區塊數量發生分歧時,需要一個解決沖突的方案。方案采用最為簡便有效的方法,最長鏈唯一有效制。模塊思想是尋求最長的鏈,并將出現問題節點的鏈的長度二者進行比較,鏈的長度較長的一方有效,將取代另一方。由此,沖突模塊能夠讓區塊鏈系統形成協調作用。

4 總結

系統基于一個單機網絡,無法實現其他設備對系統的訪問,在后續可以考慮設計局域網絡實現接入同一個網絡均可訪問的功能;系統處于一個開放的輸入環境,用戶輸入的昵稱是操作者個人進行輸入的,無法有效地驗證其身份。由于用戶的不確定性身份,無法在系統中實現數字簽名的功能;新注冊的節點無法實現單獨挖礦的功能,故新注冊的節點只能進行查看區塊鏈的操作,在后續的改善中希望可以實現新注冊節點實現“挖礦”的操作。

猜你喜歡
哈希區塊服務器
基于特征選擇的局部敏感哈希位選擇算法
哈希值處理 功能全面更易用
服務器組功能的使用
文件哈希值處理一條龍
理解Horizon 連接服務器、安全服務器的配置
《紅樓夢》的數字化述評——兼及區塊鏈的啟示
PowerTCP Server Tool
區塊鏈助跑財資管理
一場區塊鏈引發的全民狂歡
區塊鏈助力企業創新
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合