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. AC Dream1069

    这题的加密字符 - (Fibnacci % 26),如果得到的字符小于'a',就等于加密字符 - (Fibnacci % 26)+26. 获得题目的函数如下: void getItem(){ char ...

  2. (转载)SVM-基础(一)

    支持向量机: Maximum Margin Classifier  by pluskid, on 2010-09-08, in Machine Learning     87 comments 本文是 ...

  3. Mybatis的基本使用

    .什么是Mybatis? Mybatis:根据官方解释,MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及 ...

  4. java I/O框架 (一)总览

    一.前言 java io框架非常庞大,各种功能的类让人目不暇接,为了系统学习io框架,搜集了各种资料,整理出这篇文章,尽可能详细的讲述java io框架,其中会牵扯到许多信息,不仅包括框架内各种类的方 ...

  5. Jlink 烧写Uboot

    第一章 Hi3531_SDK_Vx.x.x.x版本升级操作说明 如果您是首次安装本SDK,请直接参看第2章. 第二章首次安装SDK 1.Hi3531 SDK包位置 在"Hi3531_V100 ...

  6. FusionCharts ScrollColumn2D图

    FusionCharts ScrollColumn2D图 1.JSP页面 ScrollColumn2D.jsp: <%@ page language="java" conte ...

  7. HighCharts之气泡图

    HighCharts之气泡图 1.HighCharts之气泡图源码 bubble.html: <!DOCTYPE html> <html> <head> <m ...

  8. Linux显示内存统计最大和最小的详情

    Linux显示内存统计最大和最小的详情 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ free -l total used free shared buffe ...

  9. Java中的throw和throws的区别

    Java中的throw和throws的区别 1.throw关键字用于方法体内部,而throws关键字用于方法体部的方法声明部分: 2.throw用来抛出一个Throwable类型的异常,而throws ...

  10. python学习之字典(Dictionary)练习

    Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型 字典中分为键值对 , key 类型需要时被哈希. value 类型可以是 字符串.数字.元组等其他容器模 ...