Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

IPFS实践之初体验

繁星如尘
188 0 0
IPFS的全称是InterPlanetary File System(星际文件系统),从名称上看,这是一个很炫酷、很有野心的项目。简单地说它就是一个点对点的分布式文件系统。官网和github都可以找到所有的相关资料。建议从它的白皮书,和直译中文版本开始了解,后面我们会慢慢地认识它。白皮书上指出了多个应用场景:, C  d% l6 D0 z
As a mounted global filesystem, under /ipfs and /ipns.) S/ U1 o- Q* ~! N" d
As a mounted personal sync folder that automatically9 b+ m  r% p( A& h" [; ^4 \
versions, publishes, and backs up any writes.7 t' f3 k# S0 d. {) K. W/ W
As an encrypted file or data sharing system.9 G# Q3 O. z1 L% u& I/ C
As a versioned package manager for all software.4 `6 q1 E7 n' K  V9 Y, ?
As the root filesystem of a Virtual Machine.
% D6 D8 R* n! H" _1 ^1 X( rAs the boot filesystem of a VM (under a hypervisor).0 t/ s& W  ~' h
As a database: applications can write directly to the5 g3 r% T" N3 n; O. G* X
Merkle DAG data model and get all the versioning,( Q  ?( O" E9 p+ }) _  H
caching, and distribution IPFS provides.
% {* k2 b8 {* U' Z  Z: W1 p( pAs a linked (and encrypted) communications platform.! u$ j1 D9 ~0 y6 z4 n0 z: \6 n
As an integrity checked CDN for large files (without
4 }: Z! O* s" _  WSSL).
  k: W% \) m8 h8 jAs an encrypted CDN.
4 V) t/ S; s2 o. j4 GOn webpages, as a web CDN.8 w9 K7 w- ~: y7 i" Y" t
As a new Permanent Web where links do not die.2 _/ Y  b9 }0 v0 h, q  [3 p
·6 _6 ]; _4 g4 S6 X8 Q
体验
0 H( v4 f# G' _2 I/ y6 o, K: i我想从第一个应用场景开始,开启我们的应用旅程。8 A& q6 Q) P  F9 a3 Y
这个场景可以把它想象成一个特别的"云盘",这个"云盘"不依赖任何云存储商,不依赖任何平台账号,不用担心云盘提供商的内容审核,不用担心个人隐私的泄密,不用担心内容丢失或被篡改。这些特性希望通过后面的介绍,大家能够自己体会到。可以先试想下,平常我们使用云盘的几个基本需求:
. ~3 U' P! W) f3 n) m; `上传文件下载文件分享文件
% U  k* p4 e. o, \4 C下面我们看IPFS如何作为一个“云盘”,来满足这些基本需求的。参考官方的get-start.
5 p$ [. |7 Q$ w1 k2 q" @

% h7 C* b( a) {( c2 [' T" f; F·# X0 \  v' x  z! {
下载Daemon  b, h: F; s9 ~4 J% ^' U4 {. N
首先下载官方提供了IPFS的Demo,比较完整的版本是Go实现的,目前最新版本是0.4.15,包含多个平台的版本,以windows 64bit系统为例,下载go-ipfs_v0.4.15_windows-amd64\go-ipfs,由于网络限制,可能有些同学无法下载,我这边上传了一个到IPFS网络上,有需要的同学可以直接下载。
6 Y: `; V+ [4 g( ?& z0 `9 G/ A这个demo中提供了Node/Cli/Http api/Http Gateway/Library/webUi功能,本文中暂使用CLI的来体验IPFS的基本功能,为了方便在cmd直接执行IPFS命令,可以将Go-ipfs加入环境变量path中。; c3 c* m& h6 ?3 K( Q
初始化0 h/ b5 l) y8 V! N3 K
> ipfs init8 @' U) ]1 h% w$ o$ u# s
执行初始化之后,user路径下会多了一个.ipfs的文件夹,其中有一个config文件,记录的是IPFS的配置,配置内容后续的讲述中会慢慢涉及,此刻我们先了解的是IPFS节点的身份标识Identity,其中peerid,是本机IPFS的地址,下文中IPNS的使用中会涉及到peerid。当然,peerid可以通过命令行直接查看:
" Z& h% m7 C% Q- d> ipfs id" J, ~! F) c5 u7 I
·
4 }! w$ u1 [5 [% O启动Deamon
! F# s, x2 r$ _6 W执行6 ~  N# d# p* A1 [6 f! i
> ipfs daemon, O% y! E3 I- h; z/ ]: V
开启deamon之后,会启动demo中包含的IPFS服务,至此,本机就可以作为一个"个人云盘"来使用了。
- `$ e  B5 l  F. E4 |  `1 w·6 B$ t9 H$ A: u. y
上传文件
6 H2 \! O1 H0 a> ipfs add  //添加文件/ a# O+ q) g+ [: j  P/ }4 J8 f
> ipfs add -r  //添加文件
) @+ v3 A) T: T0 h文件添加时,大文件会按照256KB的大小去分块,分块内容存储在.ipfs repo下的blocks文件夹下,每一个块都对应一个hash。文件添加完成之后,会返回一个文件hash,文件夹是递归添加的,会将每一个文件的hash返回,最后一个返回文件夹hash。由于IPFS中,文件都是基于内容寻址的,用户不需要关心这些文件放在哪,这些hash就是用来查找和得到文件的索引。
$ [5 z4 H* e. p9 d  h" _1 d·0 _) Z4 ]: n( a2 \, g
下载文件
7 m% b3 Z! [1 T. b% y' u6 l想要拿到一个IPFS上的文件,只需要知道文件的hash即可。& p4 W: R4 O; A! f  _. g
下载命令:: R; m7 v  M- @8 z/ G  Z4 y
> ipfs get  -o
$ g0 ]& O) D" u! g# ?& _% j或者查看命令:
0 ^/ k4 e9 G0 c  n+ x  j> ipfs cat
) K$ C2 ~/ y& i/ I5 h. EIPFS 的所有文件都是在本地的,Pin add可以将远端节点的文件长期保留在本地,不被垃圾回收。通过 add 添加的文件默认就是pin过的。
6 K9 i9 n. M3 ~" D/ vpin还有一个作用,pin add之后,这个节点就可以同add这个文件的节点一样,作为整个文件的服务节点。其他节点在get或pin add的时候理论上可以从这2个节点的任何一个节点拿去这个文件的块。当有很多个节点都pin add这个文件时,就会增加这个文件的获取速度,也降低了文件被删除的可能。
: R- i- k  D7 a> ipfs pin add
- D0 R+ N0 ?9 v3 j+ }0 A> ipfs pin ls //查看哪些文件在本地是持久化的。
: t8 E/ X  p2 D1 c: F  {) a) K/ h" r·& q. W5 F" J& q
分享文件
# n- A( P) @& q" b/ ?9 f: ?% z现实中,用户习惯获取内容的方式都通过http的方式,让用户去敲get命令去或取文件恐怕只有极客们会尝试吧。回想一下,云盘分享文件的做法,生成一个http url,把链接分享给需要的人。
$ I/ w3 ]  [+ m" Y7 G8 lIPFS demo也提供了一个http gateway,官方(公网)用的是 http://ipfs.io ,所以分享的链接可以是:
* U: B' A5 `0 V/ n# Z[url=]http://ipfs.io/ipfs/1 s8 L9 _/ f4 m  D/ h4 j8 Y
由于某些已知原因,ipfs.io这个网关在国内是没法正常使用的,因此有条件的可以在自己的服务器上部署一个IPFS gateway(Ipfs 私网),这样,分享的链接可以是: ?1 {: Q+ N; O) [/ o
http:///ipfs/3 v* z! v* V3 T2 ~7 P
·- j0 V5 `$ h" e) c) p
IPNS- K1 F' q% v  A4 G9 Q) {- T
到现在,我们分享文件还是不断地发送一个个hash组成的url,每分享一个文件就会重新生成一个url,那么可以有一固定的"网址”给我们来看你的分享呢?当然可以。这就需要借助IPNS。具体做法是/ C! J/ K: r1 Z- ~0 ]: V$ J$ R4 n
> ipfs name publish * f- W$ @! ]) h  @* u8 g
这条命令相当于把文件的hash和IPFS的节点绑定,这样就可以通过一个不变的地址来访问publish的文件
0 P- ?4 X2 B1 d9 l1 U8 bhttp:///ipns/
4 _+ U  k0 S: M+ `6 M9 ?peerid即之前介绍的本节点的唯一标识。/ N, [6 N/ o. M1 G9 o, B
这样做的有一个很大的缺陷,就是每次这个链接指向的都是最后一条publish的内容。但是有解决方法,大家可以查看我的博客的关于页,我的IPFS主页。实现方式其实很简单,就是将将分享文件url的列表publish到ipns上。后续可能会再写一篇博文介绍做法。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

繁星如尘 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2