IPFS家族(二)
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/commands
- Bitswap協議:https://github.com/ipfs/go-ipfs/tree/master/exchange/bitswap
- DHT(分布式哈希表): https://github.com/libp2p/go-libp2p-kad-dht
- PubSub: 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-cluster
從名稱我們就可以判斷這個工具的作用了,ipfs節點集群。該工具允許同時管理多個ipfs節點的數據。ipfs-cluster本身也是一個基于ipfs分布式管理軟件。
今天主要來講一下這個工具,對于管理多個ipfs節點這個,工具非常有用。比如,你啟動N個ipfs節點,那么希望批量管理ipfs節點數據的時候ipfs-cluster就發揮很重要作用了。
ipfs-cluser工具分為兩個
- ipfs-cluster-service:ipfs-cluster的服務端
- 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-ctl
- https://dist.ipfs.io/#ipfs-cluster-service
Note: 由于官網 http://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,步驟如下
當執行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.13
- ipfs節點id: QmRQH6TCCq1zpmjdPKg2m7BrbVvkJ4UwnNHWD6ANLqrdws
- Ipfs-service:
- 服務節點ID:QmevDxdpGqiYbjxYhvDvH7Y9hJEPyZFqPttPhMXf1bWBYr
- 服務節點地址:/ip4/18.182.8.13/tcp/9096/ipfs/QmevDxdpGqiYbjxYhvDvH7Y9hJEPyZFqPttPhMXf1bWBYr
C: 13.230.8.172
- ipfs節點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位的隨機字串。
secret是個32位的隨機字符串組建IPFS節點集群
由于我們之前在A節點上安裝了ipfs-cluster-ctl命令行管理端,我們的例子將使用A節點作為管理節點。
執行下面兩個命令將節點B和C添加到集群里面
- ipfs-cluster-ctl peers add /ip4/18.182.8.13/tcp/9096/ipfs/QmevDxdpGqiYbjxYhvDvH7Y9hJEPyZFqPttPhMXf1bWBYr
- ipfs-cluster-ctl peers add /ip4/13.230.8.172/tcp/9096/ipfs/QmSjVWduwztX9Tj3rN1YtfuAwzMLV5PywNgLxvpCLbu3TK
使用命令:ipfs-cluster-ctl peers ls 查看集群詳情
集群的運行如下,從截圖上我們可以看到新添加的節點進入了集群的日志
至此,我們的ipfs-cluster集群就建好了,下面我們來看看如何管理集群。
pin一個文件,執行命令(節點A)
ipfs-cluster-ctl pin add QmdDTor6dWzknFJPJuhJgrUYqd56WkFXYAxyxpEY7kUrEbQmdDTor6dWzknFJPJuhJgrUYqd56WkFXYAxyxpEY7kUrEb,如果你是公眾號或者知乎專欄的深度讀者,也許會對這個哈希值有印象,這就是小編在《如何在IPFS里面上傳一張照片》上傳的那張紀念性圖片。
http://weixin.qq.com/r/tyoVDfPEJK5brbdu93_l (二維碼自動識別)
執行結果如圖所示
從其他節點的日志查詢
可以看到pin操作在所有的節點被執行。我們可以通過ipfs-cluster對集群數據進行管理。
ipfs-cluster共識協議:Raft
細心的讀者也許會從上面的日志截圖看到如上面的日志記錄:
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共識協議之間的不同點和共同點
共同點
不同點
ipfs-cluster就介紹到這里了。
ipget
類似wget命令,可以從ipfs網絡里面下載文件,ipget是一個獨立的ipfs文件檢索工具,不需要安裝ipfs, 一個簡單的檢索文件的工具
- 下載地址:https://dist.ipfs.io/#ipget
使用方法
ipget /ipfs/QmdDTor6dWzknFJPJuhJgrUYqd56WkFXYAxyxpEY7kUrEb本專欄的微信公眾號IPFS指南(ipfs_guide),致力于IPFS的知識的普及,如果你對IFPS、Filecoin,挖礦感興趣,敬請關注!
本專欄的文章允許轉載,但請注明:原文來自于知乎專欄:IPFS指南(IPFS指南)作者:飛向未來
總結
- 上一篇: IPFS家族(一)
- 下一篇: Android 8.0 adb分析