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

IPFS家族(二)

245

微信圖片_20180621163347.jpg

go-ipfs
IPFS協議的go語言實現,ipfs的核心協議,最新版是v0.4.13下載地址:https://dist.ipfs.io/#go-ipfs源代碼地址:https://github.com/ipfs/go-ipfs
源碼閱讀:Go 主文件: https://github.com/ipfs/go-ipfs/blob/master/cmd/ipfs/main.go命令行 : https://github.com/ipfs/go-ipfs/tree/master/core/commandsBitswap協議:https://github.com/ipfs/go-ipfs/tree/master/exchange/bitswapDHT(分布式哈希表): https://github.com/libp2p/go-libp2p-kad-dhtPubSub: https://github.com/libp2p/go-floodsub (該功能還沒有納入到IPFS協議的之功能里面,當前作為測試功能存在)libp2p(網絡層): https://github.com/libp2p/go-libp2p
如何使用
之前的文章已經介紹過了go-ipfs的使用方式,這里不再介紹如何使用。

js-ipfs
IPFS協議js語言實現

  • Github主頁:https://github.com/ipfs/js-ipfs

Js版的使用方式跟go版本大同小異,這里不再詳細討論,有興趣的讀者可以直接去Github主頁上查看相關信息。

ipfs-cluster
從名稱我們就可以判斷這個工具的作用了,ipfs節點集群。該工具允許同時管理多個ipfs節點的數據。ipfs-cluster本身也是一個基于ipfs分布式管理軟件。
今天主要來講一下這個工具,對于管理多個ipfs節點這個,工具非常有用。比如,你啟動N個ipfs節點,那么希望批量管理ipfs節點數據的時候ipfs-cluster就發揮很重要作用了。
ipfs-cluser工具分為兩個1.ipfs-cluster-service:ipfs-cluster的服務端2.ipfs-cluster-ctl:ipfs-cluster的管理端,用來管理ipfs-cluster-service服務器的ipfs集群安裝下載安裝非常簡單:建議從ipfs官網下載build好的版本,也可以從Github現在源碼,自己build工程。如果是下載已經build好的二進制版,只需要簡單解壓縮就完成了安裝。Github地址:https://github.com/ipfs/ipfs-cluster
官網二進制版本的下載地址https://dist.ipfs.io/#ipfs-cluster-ctlhttps://dist.ipfs.io/#ipfs-cluster-service
Note:?由于官網 ipfs.io 被ipfs官方作為了一個ipfs網絡的接入點網關,由于某些特殊的原因,國內可能訪問不了。
小編幫大家下載放到了這里:https://pan.baidu.com/s/1eUjKZAi
下面來詳細說明一下 ipfs-cluster的使用方法和原理為了說明如何使用ipfs-cluster,小編在亞馬遜aws上啟動了三個ipfs節點,并且為三個節點啟動了ipfs-cluster集群服務。不知道怎么安裝ipfs節點的去這篇文章看一下《如何在IPFS里面上傳一張照片》。
依賴關系ipfs-cluster-service:要求ipfs節點已經啟動(ipfs daemon)ipfs-cluster-ctl:要求ipfs-cluster-service已經啟動。
首先創建ipfs節點A,步驟如下:1.啟動ipfs daemon2.初始化 ipfs-cluster-service:ipfs-cluster-service init:初始化ipfs-cluster-service服務,初始化ipfs-cluster-service服務。如果沒有啟動過或者設置過 ipfs-cluster-service,ipfs-cluster-service默認會啟動單一節點的ipfs集群管理。這個步驟跟ipfs節點啟動是一樣的。3.啟動ipfs-cluster-service服務:執行 ipfs-cluster-service daemon啟動服務,這個也跟ipfs的啟動命令是一樣的。
當執行ipfs-cluster-service init后,會在你的home文件夾下生成一個文件夾 ./ipfs-cluster,ipfs-cluster-service的配置文件 service.json就在里面保存。稍后我們需要配置這個文件里面的一個字段 secret。
至此單節點的ipfs-cluster-service已經完成啟動了。但是單節點啟動ipfs-cluster-service是沒有意義的,我們本來就是要管理多個ipfs節點的。
重復上面 1-4, 再新建兩個節點B和C。
我們在A節點上比B,C節點上額外多安裝ipfs-cluster-ctl。這個是ipfs-cluster-service的命令行管理工具,于是我們有了三個ipfs節點,小編的節點運行在亞馬遜日本服務器的東京區域。節點A:亞馬遜服務器(日本)
節點B:亞馬遜服務器(日本)節點C:亞馬遜服務器(日本)
上面的準備工作完成后,我們來看一下三個ipfs節點的配置情況
A:?54.95.29.13
ipfs節點id:Qmf4p5G4Hd29Djzg9Cjjggpa2d4PSBMpFxFdPMbddhsZMm服務節點ID:Qmc95KCJsiE3xm5JVndBTqVGU1UanpQMYpcigSLvZnyDVT服務節點地址:/ip4/54.95.29.13/tcp/9096/ipfs/Qmc95KCJsiE3xm5JVndBTqVGU1UanpQMYpcigSLvZnyDVT
B:?18.182.8.13ipfs節點id:?QmRQH6TCCq1zpmjdPKg2m7BrbVvkJ4UwnNHWD6ANLqrdwsIpfs-service:服務節點ID:QmevDxdpGqiYbjxYhvDvH7Y9hJEPyZFqPttPhMXf1bWBYr服務節點地址:/ip4/18.182.8.13/tcp/9096/ipfs/QmevDxdpGqiYbjxYhvDvH7Y9hJEPyZFqPttPhMXf1bWBYr
C:?13.230.8.172ipfs節點id:QmVt1zSep5v8r8tzKBLZUicEu9NoeQX9sWxvVD6UXgcL4t/home/ubuntu/.ipfs-cluster/service.json服務節點ID:?QmSjVWduwztX9Tj3rN1YtfuAwzMLV5PywNgLxvpCLbu3TK服務節點地址:/ip4/13.230.8.172/tcp/9096/ipfs/QmSjVWduwztX9Tj3rN1YtfuAwzMLV5PywNgLxvpCLbu3TK
配置首先把每一個節點上面執行 ipfs-cluster-service初始化的配置文件(../ipfs-cluster/service.json)里面的secret字段修改成一樣的,每一個節點都必須保證一樣,否則節點之間是無法形成集群的。secret是一個32位的隨機字串。微信圖片_20180621163355.jpgsecret是個32位的隨機字符串
組建IPFS節點集群由于我們之前在A節點上安裝了ipfs-cluster-ctl命令行管理端,我們的例子將使用A節點作為管理節點。
執行下面兩個命令將節點B和C添加到集群里面1.ipfs-cluster-ctl peers add?/ip4/18.182.8.13/tcp/9096/ipfs/QmevDxdpGqiYbjxYhvDvH7Y9hJEPyZFqPttPhMXf1bWBYr
2.ipfs-cluster-ctl peers add?/ip4/13.230.8.172/tcp/9096/ipfs/QmSjVWduwztX9Tj3rN1YtfuAwzMLV5PywNgLxvpCLbu3TK微信圖片_20180621163826.jpg

添加節點到ipfs集群里面
使用命令:ipfs-cluster-ctl peers ls 查看集群詳情
微信圖片_20180621163358.jpg
集群的運行如下,從截圖上我們可以看到新添加的節點進入了集群的日志微信圖片_20180621163400.jpg
至此,我們的ipfs-cluster集群就建好了,下面我們來看看如何管理集群。pin一個文件,執行命令(節點A)
ipfs-cluster-ctl pin add?QmdDTor6dWzknFJPJuhJgrUYqd56WkFXYAxyxpEY7kUrEb
QmdDTor6dWzknFJPJuhJgrUYqd56WkFXYAxyxpEY7kUrEb,如果你是公眾號或者知乎專欄的深度讀者,也許會對這個哈希值有印象,這就是小編在《如何在IPFS里面上傳一張照片》上傳的那張紀念性圖片。
微信圖片_20180621163402.jpg

執行結果如圖所示
微信圖片_20180621163408.jpg
從其他節點的日志查詢
微信圖片_20180621163410.jpg
可以看到pin操作在所有的節點被執行。我們可以通過ipfs-cluster對集群數據進行管理。
ipfs-cluster共識協議:Raft
微信圖片_20180621163412.jpg
細心的讀者也許會從上面的日志截圖看到如上面的日志記錄:
consensus共識,是的,這是共識協議
ipfs-cluster是一個基于ipfs的分布式節點管理工具,要在多個節點之間執行同樣的動作(比如:pin ,rm),ipfs是個分布式對等網絡,那么逃不開的一個問題就是拜占庭共識問題(拜占庭問題對于分布式對等網絡如影隨形),ipfs-cluster在這里使用了Raft協議來達成作為節點之間的共識協議。
什么是Raft?
Raft分布式對等網絡一致性的一種解決方案,即拜占庭問題的一種解決方案。
小編原先想把Raft協議完整的給大家講一遍,發現篇幅比較長,所以小編就翻遍了網絡,為大家找到兩篇文章來解釋什么Raft協議,感興趣的讀者可以認真參考一下,保證可以完全理解Raft協議,關鍵是動畫版做的太好了,很直觀的看到了Raft協議共識過程,甚至可以看到分叉合并的過程,生動的重現了Raft協議。
中文版:https://www.cnblogs.com/mindwind/p/5231986.html動畫版:http://thesecretlivesofdata.com/raft/
那么大家可能會問,為什么我們比特幣或者其他協議不使用Raft協議來達成節點之間的共識,同樣是解決的拜占庭問題?

小編給大家對比一下Raft協議和BTC共識協議之間的不同點和共同點:
共同點1.比特幣和Raft協議都解決是對等網絡分布式一致性問題,所有的節點狀態最終是一致的
2.比特幣和Raft都允許臨時性的分叉3.都是通過單節點記錄的方式進行一致性解決方案,比特幣通過挖礦,Raft通過選舉
不同點1.Raft協議里面所有的節點都是可信的,就是說每個節點成為領導節點后,所發送的信息其他節點都會接受;比特幣網絡里面節點只信任擁有最大工作量(最長鏈)2.Raft協議選舉領導節點;比特幣系統中不存在領導節點;ipfs-cluster就介紹到這里了。

ipget
類似wget命令,可以從ipfs網絡里面下載文件,ipget是一個獨立的ipfs文件檢索工具,不需要安裝ipfs,?一個簡單的檢索文件的工具
下載地址:https://dist.ipfs.io/#ipget
使用方法
ipget /ipfs/QmdDTor6dWzknFJPJuhJgrUYqd56WkFXYAxyxpEY7kUrEb微信圖片_20180621163416.jpg


 

贊(0)

評論 搶沙發

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