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: 由于官网 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 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里面上传一张照片》上传的那张纪念性图片。

作者飞向未来,致力于IPFS/Filecoin在中国的技术推广,他的微信公众号和社群,目前是中国最活跃最顶级的IPFS社群。作者飞向未来是圆方圆区块链的特邀嘉宾,所有转载都已经得到飞向未来本人授权。

更多飞向未来导师的公众号,可以在IPFS指南公众号中找到。

圆方圆链圈

IPFS家族(二)的更多相关文章

  1. IPFS家族(一)

    IPFS这个项目其实很大,并不像大家想象的是一个东西,IPFS是由很多模块组成,每一个模块现在都已经独立成项目了,并且有自己的主页.让我们来简单看一下IPFS家族成员. 协议实验室的主页:https: ...

  2. 学习IPFS

    注:以下所有操作均在CentOS 6.8 x86_64位系统下完成. IPFS(InterPlanetary File System)是一个点对点的分布式超媒体分发协议,被认为是最有可能取代HTTP的 ...

  3. 最新Java面试题及答案整理

    基础篇 一.基本功 面向对象特征 封装,继承,多态和抽象 1. 封装 封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内部的数据.在 Java 当中,有 3 种修饰 ...

  4. Libp2p 简介

    这是一个翻译的系列文章,原文参考:Introduction :: libp2p Documentation 欢迎来阅读libp2p相关文档,不论你是刚开始学习如何用libp2p来搭建P2P系统, 还是 ...

  5. IPFS系列 多节点搭建 二

    IPFS系列 多节点搭建 二 上一篇介绍了IPFS的分布式点对点超媒体传输协议的背景和安装介绍,本篇将继续指导搭建多节点的IPFS私有网络 文件服务.如果没还没开始搭建IPFS节点的小伙伴, 请戳此链 ...

  6. drf序列化高级、自定义只读只写、序列化覆盖字段、二次封装Response、数据库查询优化(断关联)、十大接口、视图家族

    目录 自定义只读 自定义只写 序列化覆盖字段 二次封装Response 数据库关系分析 断外键关联关系 ORM操作外键关系 ORM四种关联关系 基表 系列化类其他配置(了解) 十大接口 BaseSer ...

  7. 二次封装 Reponse,视图家族

    复习 """ 1.整体修改与局部修改 # 序列化 ser_obj = ModelSerializer(model_obj) # 反序列化,save() => cre ...

  8. drf二次封装response-APIViews视图家族-视图工具集-工具视图-路由组件

    视图类传递参数给序列化类 (1).在视图类中实例化 序列化对象时,可以设置context内容. (2).在序列化类中的局部钩子.全局钩子.create.update方法中,都可以用self.conte ...

  9. 《CSS世界》笔记二:盒模型四大家族

    上一篇:<CSS世界>笔记一:流/元素/尺寸下一篇:<CSS世界>笔记三:内联元素与对齐 写在前面 在读<CSS世界>第四章之前,粗浅的认为盒模型无非是margin ...

随机推荐

  1. UVALive - 3644 X-Plosives (并查集)

    思路:每一个product都可以作一条边,每次添加一条边,如果这边的加入使得某个集合构成环,就应该refuse,那么就用并查集来判断. AC代码: //#define LOCAL #include & ...

  2. UVA - 11270 轮廓线DP

    其实这题还能用状压DP解决,可是时间达到2000ms只能过掉POJ2411.状压DP解法详见状压DP解POJ2411 贴上POJ2411AC代码 : 2000ms 时间复杂度h*w*(2^w)*(2^ ...

  3. Mac上使用selenium自动运行chrome

    一.用我们的老朋友pip把selenium装好 pip install selenium 二.用webdriver.Chrome启动Chrome浏览器 from selenium import web ...

  4. ADS1.2中RO base与RW base

    ARM映像文件 ARM中的各种源文件(包括汇编文件,C语言程序及C++程序等)经过ARM编译器编译后生成ELF(Executable and linking format)格式的目标文件.这些目标文件 ...

  5. Java StringBuilder 和 StringBuffer 源码分析

    简介 StringBuilder与StringBuffer是两个常用的操作字符串的类.大家都知道,StringBuilder是线程不安全的,而StringBuffer是线程安全的.前者是JDK1.5加 ...

  6. javascript 学习笔记 -内部类

        js的内部类    javascript内部有一些可以直接使用的类    javascript主要有以下     object Array Math boolean      String D ...

  7. HighCharts之2D柱状图、折线图的组合双轴图

    HighCharts之2D柱状图.折线图的组合双轴图 1.实例源码 DoubleAxis.html: <!DOCTYPE html> <html> <head> & ...

  8. RTP、RTCP、RTSP 概念

    用一句简单的话总结:RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制.同步. 之所以以前对这几个有点分不清,是因为CTC标准里没有对RTCP进行要求,因此在标准RTSP的代码 ...

  9. 机器学习相关的tutorial

    1. MRF 马尔可夫随机场 http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/AV0809/ORCHARD/ 从MRF,讲到Gibbs分 ...

  10. iOS - Quartz 2D 手势截屏绘制

    1.绘制手势截屏 具体实现代码见 GitHub 源码 QExtension QTouchClipView.h @interface QTouchClipView : UIView /** * 创建手势 ...