区块链
挖矿,比特币,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)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址