區塊鏈
挖礦,比特幣,EOS,以太坊

IPFS應用丨利用IPFS構建自己的去中心化分布式Wiki系統

427

IPFS全稱InterPlanetary File System,中文名:星際文件系統,是一個旨在創建持久且分布式存儲和共享文件的網絡傳輸協議。
它是一種內容可尋址的對等超媒體分發協議。在IPFS網絡中的節點將構成一個分布式文件系統。它是一個開放源代碼項目,自2014年開始由Protocol Labs (協議實驗室)在開源社區的幫助下發展。其最初由Juan Benet設計。
IPFS是點對點的超媒體協議,可以讓網絡更快、更安全、更開放。它是一個面向全球的、點對點的分布式版本文件系統,試圖將所有具有相同文件系統的計算設備連接在一起。
官網:https://ipfs.io/

ipfs_io.png

一、IPFS 簡介
IPFS—又稱“星際文件系統”。簡單點說,它是一個點對點的分布式文件系統(和比特幣技術一樣),通過底層協議,可以讓存儲在IPFS系統上的文件,在全世界任何一個地方快速獲取,且不受防火墻的影響(無需網絡代理)。
我們現在所使用的互聯網協議被稱作——超文本協議HTTP。這種協議具有超中心化特性。
也就是說,你從互聯網上下載文件或者是瀏覽網頁,一次只能從一個數據中心獲取你所需要的資料。如果這個數據中心出現故障,或者被限制或是攻擊,就會出現文件丟失或者網頁無法打開的問題。比如你存在某云盤的資料突然無法下載,或者你想瀏覽的網頁因為某些政策原因無法打開。
而IPFS的目的就是解決這些問題。在某些方面,IPFS類似Web,你一樣可以基于IPFS進行互聯網地址的鏈接。但IPFS是去中心化的,它不存在Web的主網故障問題。所以,IPFS完全取代掉HTTP也并非天方夜譚。

1.1 IPFS與HTTP的區別

HTTP的四大痛點IPFS%20is%20the%20Distributed%20Web.png

HTTP效率低下,服務器成本昂貴

使用HTTP協議從一臺計算機服務器上一次只能下載一個文件,而不是同時從多臺計算機中獲取文件。通過P2P方式的視頻傳輸可以節省帶寬成本的60%。

歷史文件被刪除

網頁的平均使用壽命為100天,大量的網站文件不能得以長期保存。有些重要的文件因操作不當,也有可能永遠在互聯網消失。

中心化的網絡限制了機會

互聯網一直是人類進步的催化器,但中心化的網絡容易被控制,是對互聯網良性發展的的威脅。

網絡應用太依賴骨干網

為保證數據的可靠性,我們開發的應用程序太依賴大型的中心服務器,并通過大量的備份來保證數據的安全。
HTTP協議已經用了20年的歷史,從HTTP 1.0 到現在的HTTP5,網頁的展示越來越美觀豐富,但它背后的Browser/Server 模式是從來沒變的。

IPFS區別于HTTP痛點的特質

互聯網信息永久存儲

IPFS像是一個分布式存儲網絡(類似于SIA),任何存儲在系統里的資源,包括文字、圖片、聲音、視頻,以及網站代碼,通過IPFS進行哈希運算后,都會生成唯一的地址。今后,你只要通過這個地址就可以打開它們。并且這個地址是可以被分享的。
而由于加密算法的保護,該地址具備了不可篡改和刪除的特性(在某種意義上,如果破解密碼還是有可能被篡改或刪除,但概率極低)。所以,一旦數據存儲在IPFS中,它就會是永久性的。比如我們經常會遇到的某個資源刪除無法訪問的問題。
這種情況,在IPFS上就不會發生。即便是把該站點撤銷,只要存儲該站點信息的網絡依然存在,該網頁就可以被正常訪問。存儲站點的分布式網絡越多,它的可靠性也就越強。
與SIA不同的是,IPFS存儲的一般是公共信息,普通大眾都可以獲得的。有一種說法認為,如果IPFS完全取代HTTP,那么此后,人類歷史將會被永久保存,且不會被篡改。
這也就意味著,人類所做的每一件事情都會被記錄,不管是正確的、抑或是錯誤的。

解決過度冗余問題,實現共享經濟

如果你喜歡某部電影,又擔心電影資源丟失,通常的做法是,你會把這部電影下載在自己的電腦上。比如電影《阿凡達》,在2016年一年的下載次數就達到了1658萬次,總下載數量更是驚人。
那么一個無法避免的問題是:同樣的一部電影被反復儲存,造成了內存資源極大浪費。這就是HTTP協議的弊端。同樣的資源備份的次數過多,就會造成過度冗余的問題。
而IPFS的出現可以很好的解決這個問題。IPFS會把存儲文件,做一次哈希計算,只字不差的兩個文件哈希值相同。所以,用戶只需要使用相同的哈希值,就可以訪問那個文件,這個哈希值就是文件的地址。只要獲取這個地址,就可以共享資源了。
基于上面的永久存儲特性,你再也不用擔心某個電影找不到了,也不用備份,因為全球電腦上只要有那么幾個人存儲著,你就能拿到它。而不是重復存儲幾十萬份。

同時基于內容尋址,而非基于域名尋址。

IPFS的網絡上運行著一條區塊鏈,即用來存儲互聯網文件的哈希值表,每次有網絡訪問,即要在鏈上查詢該內容(文件)的地址。
文件(內容)具有存在的唯一性,一個文件加入了IPFS的網絡,將基于計算對內容賦予一個唯一加密的哈希值。這將改變我們使用域名訪問網絡的習慣。
提供文件的歷史版本控制器(類似Git),并且讓多節點使用保存不同版本的文件。

節點存儲激勵,代幣分成

通過使用代幣(FileCoin)的激勵作用,讓各節點有動力去存儲數據。 Filecoin 是一個由加密貨幣驅動的存儲網絡。礦工通過為網絡提供開放的硬盤空間獲得Filecoin,而用戶則用 Filecoin 來支付在去中心化網絡中儲存加密文件的費用。

1.2 IPFS工作原理ipfswork.jpg
1.每個文件及其中的所有塊都被賦予一個稱為加密散列的唯一指紋。
2.IPFS通過網絡刪除重復具有相同哈希值的文件,通過計算是可以判斷哪些文件是冗余重復的。并跟蹤每個文件的版本歷史記錄。
3.每個網絡節點只存儲它感興趣的內容,以及一些索引信息,有助于弄清楚誰在存儲什么。
4.查找文件時,你通過文件的哈希值就可以在網絡查找到儲存改文件的節點,找到想要的文件。
5.使用稱為IPNS(去中心化命名系統),每個文件都可以被協作命名為易讀的名字。通過搜索,就能很容易地找到想要查看的文件。
6.從IPFS的介紹可以看出, IPFS設想的是讓所有的網絡終端節點不僅僅只充當 Browser或Client的角色,其實人人都可以作為這個網絡的運營者,人人都可以是服務器。

1.3 IPFS應用場景
ipfs-app.jpg

二、IPFS 配置

2.1 IPFS 下載
下載地址:https://dist.ipfs.io/#go-ipfs本篇博客下載并使用的版本是:go-ipfs Version v0.4.13 for OS X 64bit

2.2 IPFS 安裝ipfs_install1.png

ipfs –help ?//打開命令行,輸入,出現Log信息時,表示安裝成功

2.3 IPFS本地部署

2.3.1 創建節點
在本地全局目錄下新建倉庫:
ipfs_init.png

2.3.2 節點配置cd ~/.ipfs?export EDITOR=/usr/bin/vim?ipfs config edit
執行完ipfs config edit后會打開一個ipfs節點配置文件,可以如下修改配置參數
【IPFS】利用IPFS構建自己的去中心化分布式Wiki系統 _ 楓言楓語.png

2.3.3 節點ID每個節點都會存在一個唯一標識,查看節點ID方式如下:

ipfs id

2.3.4 啟動節點服務器ipfs daemonipfs-daemon-error.png

出現了5001端口被占用的情況,這邊可以通過對節點配置文件的修改來解決,如下所示:

  • 找到所有配置5001端口的地方
  • 替換成5002端口

ipfs-config-edit.png
再次啟動節點,服務成功啟動如下所示:
ipfs-run-successful.png

2.3.5 配置CORS跨域資源共享
為了方便后續前端的開發和數據訪問,提前對跨域資源共享CORS進行配置,ctrl-c?退出ipfs,然后按照下面的步驟進行跨域配置:

ipfs config –json API.HTTPHeaders.Access-Control-Allow-Methods ‘[“PUT”, “GET”, “POST”, “OPTIONS”]’

?ipfs config –json API.HTTPHeaders.Access-Control-Allow-Origin ‘[“*”]’

2.3.6 驗證瀏覽器打開 http://localhost:5002/webui ,出現Web Console 圖形化控制臺
webui-connection.png
這里可以看到所有run在主網上的節點信息,和本地節點相關的配置數據。

三、IPFS 項目實踐

利用 IPFS 構建一個去中心化、不可篡改的分布式Wiki系統

 

3.1 新建workplace考慮到方便后期開源和推廣,這邊我是托管在github上,大家可以選擇自己熟悉的代碼托管服務,也可以克隆我的工程 ->?ipfs-wiki-system,在其基礎上進行你的二次開發,有任何問題,歡迎提交issue給我

mkdir workplace?

cd workplace

git clone [email protected]:daijiale/ipfs-wiki-system.git

3.2 wiki系統搭建cd workplace/ipfs-wiki-system/wiki-release?ll
可以看到如下文件:

  • wiki-release
    • index.html?//markdown模板渲染
    • navigation.md?//導航markdown
    • index.md?//首頁markdown

大家可以參考ipfs-wiki?Demo,根據自己的需求,通過markdown自定義不同的wiki內容和目錄。

3.3 掛載本地節點
ipfs-peer-id.png
記住文件根目錄的Hash值:QmV5ZVQxXURKPDcVDW8WjpLCiQYvNzg173XcB6rYFevoXm

3.4 發布到主網ipfs daemon
https://ipfs.io/ipfs/QmV5ZVQxXURKPDcVDW8WjpLCiQYvNzg173XcB6rYFevoXm/#!index.md

3.5 發布到IPNS由于ipfs的hash對應著一個不可變的內容,每次更新網站之后,website的hash都會變,舊的link不能訪問到新的內容。
ipfs提供了ipns來解決更新的問題。
ipfs允許用戶使用一個私有密鑰來對哈希附加一個引用,使用一個公共密鑰哈希(簡稱pubkeyhash)表示你的網站的最新版本。
具體操作是:ipns.png
通過上述方式,就完成了website和一個固定的link的綁定:
QmPS5NRXPCeAUtofKbW7c58Qm4PpM8mPEVJvaooE13LF78

3.6 綁定驗證ipfs name resolve QmPS5NRXPCeAUtofKbW7c58Qm4PpM8mPEVJvaooE13LF78?/ipfs/QmV5ZVQxXURKPDcVDW8WjpLCiQYvNzg173XcB6rYFevoXm
IPNS訪問固定節點Hash:https://ipfs.io/ipns/QmPS5NRXPCeAUtofKbW7c58Qm4PpM8mPEVJvaooE13LF78
驗證成功,出現如下效果:ipfs-wiki-demo.png

3.7 去中心化驗證以之前發布到主網的節點為第一節點,我們本地再新建一個節點,用以模擬第二節點的身份,打開Web Console:
ipfs-web-consolve.png
在第二節點上,我們依然可以通過IPFS HASH查詢到第一節點主網上的?ipfs-wiki-system目錄文件數據
同時,我們也能看到:控制臺顯示記錄了我們發布至主網數據的區塊節點數已經擴散至275個。ipfs-peer-id.png

也就是說,來自另外全球其他274地方的個體,在自己的”記賬本”中記下了你之前發布的數據,哪怕其中個別服務器宕機(天災人禍,挖斷電纜,世界末日等等),只要有一個節點安好,你的數據都不會丟失,真正意義實現了去中心化的服務機制。

四、項目體驗
ipfs-wiki-demo.png


作者簡介:戴嘉樂( Mr.Maple ) | 前百度高級研發工程師 | IPFS應用實踐者&布道師|
個人網站:https://www.daijiale.cn
聯系方式:微信號:daijiale6239
也歡迎加入知識星球:
提供更多詳細的提問回復IPFS應用和開發方面的實踐信息享受個人舉辦的一些IPFS線下活動的福利和權益

贊(0)

評論 搶沙發

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址
p3试机号99