陳杰 張再躍 張曉如
摘 要:目前的爬蟲框架及分布式系統集群成熟,但是代價高,硬件設備昂貴,技術較復雜。結合區塊鏈技術設計一種爬蟲方案,部署簡單且省去服務器資金投入。該方案融合IPFS技術,使用智能合約募集公網上閑散的硬件資源代替傳統服務器,節約成本,使用簡單,可為IPFS融合區塊鏈技術的應用提供參考。
關鍵詞:爬蟲;區塊鏈;智能合約;IPFS
DOI:10. 11907/rjdk. 191590
中圖分類號:TP391 ? 文獻標識碼:A??????????????? 文章編號:1672-7800(2020)003-0200-04
Crawler on Smart Contract Based on IPFS and Ethereum
CHEN Jie, ZHANG Zai-yue, ZHANG Xiao-ru
(School of Computer Science, Jiangsu University of Science and Technology, Zhenjiang 212003,China)
Abstract:The current crawler has a mature framework and cluster distributed system, but the cost is high, the price of hardware equipment is expensive, the technology is more complex. A crawler solution incorporating blockchain technology is designed that makes it easy for users to deploy and saves money on servers. The scheme integrates IPFS technology and uses smart contract to collect idle hardware resources on the public network. This research scheme replaces traditional servers with public network resources, saves expensive investment on server hardware,saves the cost and is simple to use, and provides a reference for the use of IPFS fusion blockchain technology in other directions and fields.
Key Words: crawler; blockchain; contacts; IPFS
0 引言
在人工智能與大數據相互交叉時代,不論是工程領域還是研究領域,數據都是極其重要的戰略資源,高效的數據采集是關鍵。現在的分布式爬蟲在海量數據爬取上非常高效,但是分布式爬蟲硬件需要投入大量資金,所以結合新技術構建信息采集系統是研究熱點。
分布式爬蟲大多基于Scrapy-Redis、Nutch等框架開發,而現在已有部分AI公司創新地結合云技術開發云爬蟲,通過開放API提供服務。Diffbot是美國一家指令機器學習和計算機視覺算法以及公共API開放的初創公司,該公司通過計算機視覺、機器學習和人工智能處理Web頁面,計劃實現整個網頁的“機器可讀”。但Diffbot收費較高,包月要5 000美元、擁有500萬次調用,超出另付。一條數據需要多次API調用,在海量數據面前這種收費標準難以承受。
本文將區塊鏈分布式公共信用賬本引入爬蟲[1],通過在區塊鏈上部署智能合約驅動爬蟲[2]。該研究方案充分利用公網資源,可以更低成本和更高效率傳遞信息與價值[3-4],發揮比云端服務器更強性能[5],免去云爬蟲的高昂使用費,節省傳統分布式爬蟲昂貴的硬件服務器費用。
1 區塊鏈底層核心算法與數據結構
1.1 密碼學哈希函數
哈希函數是整個區塊鏈的單元組成結構,整個區塊鏈都是哈希函數的增加、改變、嵌套、迭代等[6]。雖然哈希函數是組成細胞,但其也要根據實際情況進行變種處理[7]。
一般哈希函數的特性有:①哈希函數的輸入不限制大小;②哈希函數的輸出是固定大小;③哈希函數在合理的時間內能有效處理。
但是,作為區塊鏈項目的哈希函數還需要一些附加特性。
(1)碰撞阻力。無法找到兩個值x和y,x≠y,而且H(x)≠H(y),則稱哈希函數H具有碰撞阻力(見圖1)。我國密碼學專家給出了包括MD5、RIPEMD等哈希函數的碰撞[8]。
(2)隱秘性。假設哈希函數的輸入為y=H(x),但是無法推導y→x,這是不可逆的。
(3)謎題友好性。假設任意n位輸出值為y,而k是一個非常隨機的數,這種函數不可能再比2n小。
1.2 區塊鏈數據結構與哈希挖礦
區塊鏈在數據結構上就是用一個個哈希指針構造出的哈希區塊組成一個公共鏈表,每個區塊的整體哈希值可以指向唯一的下一個區塊(見圖2),每個區塊都有自己的梅克爾二叉樹[9],每個事務都有自己的哈希值。然后每兩個結對再次計算哈希值,以此類推最后計算出來一個哈希值,也就是根哈希。Nance為優質的隨機數[10]。
哈希挖礦就是對整個區塊做哈希值,讓它小于某個值,這需要大量的時間算力[11],用式(1)表示為:
1.3 區塊鏈數字、簽名和雙鑰
數字簽名由3個算法組成[12-13]:
式(2)中,generateKeys是秘鑰產生方法,把keysize作為輸入產生一對公鑰pk和私鑰sk。sk必須秘密保存,所有人都可用pk驗證簽名。
式(3)是簽名方法。輸入是兩個參數,一個是私鑰,還有一個是一段信息,對外輸出是數字簽名。
式(4)是驗證公式,通過keysize作為輸入產生一個公鑰pk和私鑰sk,通過sk和一段信息產生數字簽名sig,最后通過pk、message、sig作為驗證函數的參數來驗證數字簽名。
在區塊鏈中,常用的數字簽名方案是橢圓曲線數字簽名算法,其利用橢圓曲線密碼對數字簽名算法進行模擬[14-16]。這種算法除以上幾個特點外,還具有安全性高、生成公私鑰較方便、處理速度較快和存儲空間小等優點。
公鑰和私鑰是密碼學中非對稱加密名詞,通常情況下用公鑰加密,再用私鑰解密,其是一種公開的密鑰算法。私鑰可以決定公鑰,公鑰可以決定地址。
1.4 共識算法
區塊鏈本質上是一種分布式系統,但是它是去中心化的,所以一致性問題是關鍵核心問題,但是和傳統的分布式系統不同,它是異步的,每個節點同步時間不一樣。其具有容錯性,有些節點可能關閉或者沒有同步或反饋[17]。
FLP定理不允許傳統計算機系統解決錯誤進程和網絡分區問題[18],科學家結合社會學及博弈論引入了激勵機制和隨機性。
激勵機制。通過設置恰當的機制,讓每個節點都能通過遵守規則實現利益最大化,讓其自發成為公正的節點。
隨機性。POW共識協議就是算力共識,依靠算力解決哈希函數無限求解,優先計算出來的可以擁有打包權利從而獲得網絡的代幣獎勵。POS是權益證明共識,主要看參與者持有幣的數量和時間,數量越大的人用越大的概率去打包區塊從而獲得獎勵,有事實上的中心化趨勢,“貧富”差距也會更大。
1.5 區塊鏈整體模型架構
整個區塊鏈系統由自下而上的數據層、網絡層、共識層、激勵層、合約層和應用層組成(見圖3)。
2 IPFS
2.1 IPFS核心理念
IPFS是Inter Planetary File System的簡稱,對標Http而言是一種點對點的分布式文件系統。傳統的Http是基于中心化的服務器,具有天然瓶頸。服務器空間是珍貴的資源,這注定站點的數據不能長期儲存,而且服務器文件定位不夠平緩,都是多級目錄形式。相對而言,IPFS沒有這些局限性,它將文件的碎片分布在整個公網上,IPFS不使用多級目錄儲存,而是結合了密碼學加密技術,可以基于內容對其進行尋址[19]。
IPFS基本原理就是對整個內容進行哈希運算,然后反饋哈希值,這個哈希值就是對應儲存的內容,可以通過哈希值尋找內容。
2.2 爬蟲代碼儲存
為了充分延展爬蟲程序的能力,將其部署在公鏈上。爬蟲的代碼儲存在IPFS上,其它節點參與這個項目。可以從IPFS上下載相應的爬蟲代碼,然后由其它節點運行代碼。同時,爬蟲所采集的數據也儲存在IPFS上。
上傳整個代碼目錄的IPFS偽代碼:
localhost:1121 chan$ ipfs add -r myscrapy/
add 哈希值1 myscrapy/project/__init__.py
add 哈希值2 myscrapy/project/items.py
……
add 哈希值n-1 myscrapy/scrapy.cfg
add 哈希值n myscrapy
哈希值來源于對后面文件的整體哈希運算。
下載上傳IPFS文件的偽代碼:
Ipfs cat 哈希值n
Ipfs daemon
3 以太坊與智能合約
3.1 以太坊
如果比特幣代表區塊鏈1.0,那么以太坊就是區塊鏈2.0的代表。由于比特幣不太靈活,部分基于比特幣的項目對比特幣系統作了一些改變,添加了一些新功能,然后獨立運行在不同的節點上,這就意味著每一個項目都要重復、獨立地建立一個類似的比特幣系統。以太坊塑造了一種能被重編程用于任意復雜計算功能的單一區塊鏈。
以太坊與比特幣有許多不同,從性能表現和特性上看主要有以下區別:首先,以太坊有更快的“出塊”速度及更先進的獎勵機制。比特幣的出塊時間平均是10min,以太坊的出塊間隔為12s,這表示以太坊有更大的吞吐量和更小的交易確認間隔;其次,以太坊支持智能合約,用戶可以定義數字資產和流通邏輯,通過以太坊虛擬機幾乎可執行任何計算。相比之下,比特幣只支持轉賬,這說明以太坊可作為更加通用的區塊鏈平臺,支持各種去中心化應用。
3.2 智能合約概念
以太幣作為一種雄心勃勃的虛擬幣,致力于提供一種滿足圖靈計算要求的可編程語言[20],用這種語言可以編寫腳本和合約[21]。在該體系中,智能合約是應用層程序,被以太坊的虛擬機執行。在這個體系中,智能合約起到任務發布和激勵的作用,空閑的計算機可以發揮作用,降低大規模數據采集成本,減少大量硬件需求。
智能合約行為由合約代碼控制,合約賬戶存儲則保存合約狀態。合約代碼運行在以太坊虛擬機上。合約的代碼編寫需要使用一些高級語言,例如語法與JavaScript相似的Solidity語言、與Python相似的Serpent語言、與Lisp相似的LLL語言等。
3.3 爬蟲合約與系統結構
爬蟲合約是爬蟲系統的紐帶,起著核心作用。為對整個系統產生激勵作用,在Scrapy-redis框架基礎上引入區塊鏈技術[22],整個系統結構相對簡潔明了,如圖4所示。
圖4中MasterSpider是本機節點,a是確定采集的目標,然后反饋給主節點并同時通過b將爬蟲代碼傳給IPFS。爬取的隊列在緩存內,SlaveSpiders爭取隊列的數據采集,c是MasterSpider和所有SlaveSpiders共同維護的一個Redis,d代表所有的SlaverSpider從IPFS獲取相應的爬蟲代碼,e是爬蟲從隊列中拿到任務并且去爬取并把爬取信息傳送回Redis,f是把爬取的信息上傳到IPFS,g是以太坊捕捉IPFS的觸發信息,h是智能合約將激勵發送給SlaveSpider。
3.4 信息爬取與激勵
IPFS是非常重要的核心樞紐,信息爬取結果最后匯總在IPFS上,以太坊智能合約對參與者的獎勵通過IPFS上的信息進行(見圖5)。
首先,信息爬取要求Master端和Slave端都安裝好基于Python的爬蟲基礎框架Scrapy以及Redis數據庫。Master端和Slave端需要共同維護存儲在Master端的Redis,Slaver端連接遠程Redis的命令是:redis-cli -h ip -p port。爬取過程中,Master端的Redis是有數據的,Slave端的Redis是沒有數據的,共同維護一個Redis。Redis會給Slave任務,Slaver會獲得任務并且完成相關爬取任務,并把結果傳給Redis,最后上傳到IPFS。數據結構應該包括數據的哈希值和參與者錢包地址。主機可以從IPFS上解析到所要的數據。
其次,激勵具體指智能合約通過Oraclize從IPFS上取出數據,并從數據中解析出錢包地址,向其發送相應代幣,這樣參與者就可以得到相應激勵,以此不斷循環。參與者一方面將數據傳輸給IPFS,另一方面通過IPFS得到相應激勵。
最后,通過這種業務邏輯募集公網上的閑散資源,一方面減少資源浪費,另一方面避免傳統分布式系統昂貴的硬件投入。
4 結語
本文依托區塊鏈技術,分析了爬蟲智能合約的封裝問題。爬蟲合約充分利用區塊鏈的去中心思想建立公共信任賬本,對公網閑散資源進行眾籌,這種公共信用體系將在金融等領域發揮重要作用。
參考文獻:
[1]袁勇,王飛躍. 區塊鏈技術發展現狀與展望[J]. 自動化學報,2016,42(4):459-481.
[2]SWAN M. Blockchain: blueprint for a new economy[M]. Sebastopol:OReilly Media Inc,2015:9-26.
[3]袁勇,周濤,周傲英,等. 區塊鏈技術:從數據智能到知識自動化[J]. 自動化學報,2017,43(9):1485-1490.
[4]常漢杰,付賽紅,石志明. 淺談區塊鏈對于文件存儲系統的變革[J]. 計算機時代, 2019(3):101-104.
[5]李世勇,苑凱博,汪棪,等. 企業應用云遷移與部署:現狀、挑戰與展望[J]. 管理現代化,2019(2):75-78.
[6]王化群,吳濤. 區塊鏈中的密碼學技術[J]. 南京郵電大學學報:自然科學版,2017(6):61-67.
[7]李佩麗,徐海霞,馬添軍,等. 可更改區塊鏈技術研究[J]. 密碼學報,2018(5):501-509.
[8]WANG X Y. Collisions for hash functions md4, md5, haval-128 and ripemd[EB/OL]. http://eprint.iacr.org/2004/199.pdf,2004
[9]蔣勇. 白話區塊鏈[M]. 北京:機械工業出版社,2017:91-93.
[10]楊振海,張國志. 隨機數生成[J]. 數理統計與管理,2006(2):244-252.
[11]唐長兵,楊珍,鄭忠龍,等. PoW共識算法中的博弈困境分析與優化[J]. 自動化學報,2017(9):1520-1531.
[12]ARVIND NARAYANAN,JOSEPH BONNEAU,EDWARD FELTEN,et al. Bitcoin and cryptocurrency technologies[M]. USA:Princeton University Press,2016:43-46.
[13]趙翔. 數字簽名綜述[J]. 計算機工程與設計,2006(2):195-197.
[14]張方國,王常杰,王育民. 基于橢圓曲線的數字簽名與盲簽名[J]. 通信學報,2001(8):22-28.
[15]趙文清,姜波,王德文,等. 數字簽名中哈希函數的分析與研究[J]. 計算機工程與應用,2004(32):155-157.
[16]暴金雨. RSA公鑰密碼體制的原理及應用[J]. 科技傳播,2019(6):137-139.
[17]李劍鋒. 基于拜占庭容錯機制的區塊鏈共識算法研究與應用[D]. 鄭州:鄭州大學,2018.
[18]URBAN P,DEFAGO X,SCHIPER A. Chasing the FLP impossibility result in a LAN or how robust can a fault to lerant server be[C]. 20th IEEE Symposium on Reliable Distributed Systems,2001,28-31.
[19]NIZAMUDDIN N,SALAH K,AJMAL AZAD M,?et al. Decentralized document version control using ethereum blockchain and IPFS[J]. Computers and Electrical Engineering,2019(3):183-197.
[20]任曉明,劉川. 認知、信息與計算的哲學省思考[J]. 科學經濟社會,2018(4):1-8.
[21]邵奇峰,金澈清,張召錢,等. 區塊鏈技術:架構及進展[J]. 計算機學報,2018(5):969-988.
[22]嚴慧,彭緒富,朱小婉,等. 基于Scrapy-Redis分布式數據采集平臺的設計與實現[J]. 湖北師范大學學報:自然科學版,2019(1):19-25.
(責任編輯:杜能鋼)
收稿日期:2019-04-23
作者簡介:陳杰(1988-),男,江蘇科技大學計算機科學與工程學院碩士研究生,研究方向為為軟件工程、信息檢索、智能信息處理;張再躍(1961-),男,江蘇科技大學計算機科學與工程學院教授,研究方向為數理邏輯與應用邏輯、知識表示與推理、智能信息處理;張曉如(1963-),女,江蘇科技大學計算機科學與工程學院教授,研究方向為智能信息處理、計算機教育。本文通訊作者:張曉如。