IPFS家族(二)

go-ipfs


IPFS协议的go语言实现,ipfs的核心协议,最新版是v0.4.13

源码阅读

如何使用

之前的文章已经介绍过了go-ipfs的使用方式,这里不再介绍如何使用。

js-ipfs

IPFS协议js语言实现

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好的二进制版,只需要简单解压缩就完成了安装。

官网二进制版本的下载地址

Note: 由于官网 ipfs.io 被ipfs官方作为了一个ipfs网络的接入点网关,由于某些特殊的原因,国内可能访问不了。

小编帮大家下载放到了这里:pan.baidu.com/s/1eUjKZA


下面来详细说明一下 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 daemon
  2. 初始化 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.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集群里面

使用命令:ipfs-cluster-ctl peers ls 查看集群详情

集群的运行如下,从截图上我们可以看到新添加的节点进入了集群的日志

至此,我们的ipfs-cluster集群就建好了,下面我们来看看如何管理集群。

pin一个文件,执行命令(节点A)

ipfs-cluster-ctl pin add QmdDTor6dWzknFJPJuhJgrUYqd56WkFXYAxyxpEY7kUrEb

QmdDTor6dWzknFJPJuhJgrUYqd56WkFXYAxyxpEY7kUrEb,如果你是公众号或者知乎专栏的深度读者,也许会对这个哈希值有印象,这就是小编在《如何在IPFS里面上传一张照片》上传的那张纪念性图片。


weixin.qq.com/r/tyoVDfP (二维码自动识别)


执行结果如图所示

从其他节点的日志查询

可以看到pin操作在所有的节点被执行。我们可以通过ipfs-cluster对集群数据进行管理。

ipfs-cluster共识协议:Raft

细心的读者也许会从上面的日志截图看到如上面的日志记录:

consensus共识,是的,这是共识协议

ipfs-cluster是一个基于ipfs的分布式节点管理工具,要在多个节点之间执行同样的动作(比如:pin ,rm),ipfs是个分布式对等网络,那么逃不开的一个问题就是拜占庭共识问题(拜占庭问题对于分布式对等网络如影随形),ipfs-cluster在这里使用了Raft协议来达成作为节点之间的共识协议。

什么是Raft?

Raft分布式对等网络一致性的一种解决方案,即拜占庭问题的一种解决方案。

小编原先想把Raft协议完整的给大家讲一遍,发现篇幅比较长,所以小编就翻遍了网络,为大家找到两篇文章来解释什么Raft协议,感兴趣的读者可以认真参考一下,保证可以完全理解Raft协议,关键是动画版做的太好了,很直观的看到了Raft协议共识过程,甚至可以看到分叉合并的过程,生动的重现了Raft协议。

那么大家可能会问,为什么我们比特币或者其他协议不使用Raft协议来达成节点之间的共识,同样是解决的拜占庭问题?

小编给大家对比一下Raft协议和BTC共识协议之间的不同点和共同点

共同点

  1. 比特币和Raft协议都解决是对等网络分布式一致性问题,所有的节点状态最终是一致的
  2. 比特币和Raft都允许临时性的分叉
  3. 都是通过单节点记录的方式进行一致性解决方案,比特币通过挖矿,Raft通过选举

不同点

  1. Raft协议里面所有的节点都是可信的,就是说每个节点成为领导节点后,所发送的信息其他节点都会接受;比特币网络里面节点只信任拥有最大工作量(最长链)
  2. Raft协议选举领导节点;比特币系统中不存在领导节点;

ipfs-cluster就介绍到这里了。

ipget

类似wget命令,可以从ipfs网络里面下载文件,ipget是一个独立的ipfs文件检索工具,不需要安装ipfs, 一个简单的检索文件的工具

使用方法

ipget /ipfs/QmdDTor6dWzknFJPJuhJgrUYqd56WkFXYAxyxpEY7kUrEb

本专栏的微信公众号IPFS指南(ipfs_guide),致力于IPFS的知识的普及,如果你对IFPS、Filecoin,挖矿感兴趣,敬请关注!

本专栏的文章允许转载,但请注明:原文来自于知乎专栏:IPFS指南(IPFS指南)作者:飞向未来


IPFS 是分布式文件系统,寻求连接所有计算机设备的相同文件系统。在某些方面,这很类似于原始的 Web 目标,但是 IPFS 最终会更像单个比特流群交换的 git 对象。 IPFS = InterPlanetary File System IPFS 云成为一个新的,重要的网络子系统,如果构建得当,那么可以完善或者替换 HTTP,或者说可以完善或者替代更多,听起来很疯狂,但是确实很疯狂! IPFS 结合了 Git,BitTorrent,Kademlia,SFS 和 Web 的优势,提供跟 HTTP web 一样简单的接口。 IPFS 分为 3 个代码库:github.com/ipfs/ipfs - IPFS 规范github.com/ipfs/go-ipfs - Go 实现github.com/protocol/ipfs-webui - Web 工作台 使用:USAGE:     ipfs - global p2p merkle-dag filesystem     ipfs []  [] ...     BASIC COMMANDS         init          Initialize ipfs local configuration         add     Add an object to ipfs         cat      Show ipfs object data         get      Download ipfs objects         ls       List links from an object         refs     List hashes of links from an object     DATA STRUCTURE COMMANDS         block         Interact with raw blocks in the datastore         object        Interact with raw dag nodes         file          Interact with Unix filesystem objects     ADVANCED COMMANDS         daemon        Start a long-running daemon process         mount         Mount an ipfs read-only mountpoint         resolve       Resolve any type of name         name          Publish or resolve IPNS names         dns           Resolve DNS links         pin           Pin objects to local storage         repo gc       Garbage collect unpinned objects     NETWORK COMMANDS         id            Show info about ipfs peers         bootstrap     Add or remove bootstrap peers         swarm         Manage connections to the p2p network         dht           Query the dht for values or peers         ping          Measure the latency of a connection         diag          Print diagnostics     TOOL COMMANDS         config        Manage configuration         version       Show ipfs version information         update        Download and apply go-ipfs updates         commands      List all available commands
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值