Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

IPFS实践之初体验

繁星如尘
102 0 0
IPFS的全称是InterPlanetary File System(星际文件系统),从名称上看,这是一个很炫酷、很有野心的项目。简单地说它就是一个点对点的分布式文件系统。官网和github都可以找到所有的相关资料。建议从它的白皮书,和直译中文版本开始了解,后面我们会慢慢地认识它。白皮书上指出了多个应用场景:5 b# J; y, m% O! Q) x! V7 Q
As a mounted global filesystem, under /ipfs and /ipns.. R6 a  D0 T* V) R
As a mounted personal sync folder that automatically% v0 ^3 B5 I( J; s6 t1 ?
versions, publishes, and backs up any writes.& c9 j$ B0 i) }- I, x& k. ~9 @* q: Y+ _
As an encrypted file or data sharing system.
! x& v0 I6 s. \9 b3 P0 xAs a versioned package manager for all software.
; y9 l/ H/ y& E; @8 lAs the root filesystem of a Virtual Machine.
9 G8 v6 L( Q$ z* Y4 ]- oAs the boot filesystem of a VM (under a hypervisor).
  e7 @! D% S% j9 d; B$ eAs a database: applications can write directly to the
  X. m! @% i' e  MMerkle DAG data model and get all the versioning,0 [( b( k1 t2 h. d" ?
caching, and distribution IPFS provides.6 F) X2 C/ `7 f  q( \. L4 R6 n
As a linked (and encrypted) communications platform.) M' ?. y" g8 y' \8 J
As an integrity checked CDN for large files (without" K# ]* d) _2 B" l0 B
SSL).
* `7 P1 R- P, U- hAs an encrypted CDN.  u; {/ j* @5 r9 X4 G0 O. i) S
On webpages, as a web CDN.
) H( f$ G2 Q" Y5 H& ]As a new Permanent Web where links do not die.
* H  w- Z9 O& g# w/ ]7 b·( ?& }( m* q& b" o5 ~& |. }. ~8 d" F
体验
7 Q8 a% s& o( I% d2 @1 [我想从第一个应用场景开始,开启我们的应用旅程。
+ f4 y) z( G" z" ]3 n- @这个场景可以把它想象成一个特别的"云盘",这个"云盘"不依赖任何云存储商,不依赖任何平台账号,不用担心云盘提供商的内容审核,不用担心个人隐私的泄密,不用担心内容丢失或被篡改。这些特性希望通过后面的介绍,大家能够自己体会到。可以先试想下,平常我们使用云盘的几个基本需求:* M# }' j! q( B6 t, ?- p
上传文件下载文件分享文件( _% \! m  K) U8 I# J4 L
下面我们看IPFS如何作为一个“云盘”,来满足这些基本需求的。参考官方的get-start.* ^0 s. t% W* Y$ x2 f$ q. ?
, {+ F( I# g) t9 [- Q! B! R2 k
·" V3 A" H6 y5 h+ ~+ i
下载Daemon% R: _) O  u  y* Y' b7 v. }& b! j
首先下载官方提供了IPFS的Demo,比较完整的版本是Go实现的,目前最新版本是0.4.15,包含多个平台的版本,以windows 64bit系统为例,下载go-ipfs_v0.4.15_windows-amd64\go-ipfs,由于网络限制,可能有些同学无法下载,我这边上传了一个到IPFS网络上,有需要的同学可以直接下载。- [3 R1 {- y  y# ^1 g. I7 h
这个demo中提供了Node/Cli/Http api/Http Gateway/Library/webUi功能,本文中暂使用CLI的来体验IPFS的基本功能,为了方便在cmd直接执行IPFS命令,可以将Go-ipfs加入环境变量path中。1 @) v& u% K) }
初始化4 a. B9 P' \) L) Y* ?9 I; z
> ipfs init
- ?8 ~( j9 I) h0 L- z执行初始化之后,user路径下会多了一个.ipfs的文件夹,其中有一个config文件,记录的是IPFS的配置,配置内容后续的讲述中会慢慢涉及,此刻我们先了解的是IPFS节点的身份标识Identity,其中peerid,是本机IPFS的地址,下文中IPNS的使用中会涉及到peerid。当然,peerid可以通过命令行直接查看:! ?& n6 T: _. n% |+ P1 E
> ipfs id
& B: a* E! O$ V+ Z·' n' o, M4 t2 q' c4 x
启动Deamon
5 f' m( R5 W# H7 m  ^4 C9 y执行
" _  n& n" u7 H) ^: |; @> ipfs daemon% A" ~- z  f7 L' ^7 k
开启deamon之后,会启动demo中包含的IPFS服务,至此,本机就可以作为一个"个人云盘"来使用了。
: ^- O# c& ?% l  {) J7 M, B1 ~# n·- d: d( R9 Y2 I' D) F' c
上传文件
5 h* E! O5 t% A% |5 J! A; _% D> ipfs add  //添加文件
3 b, J# V* R8 m; W; P, x, c> ipfs add -r  //添加文件! y) Q: @1 t' y- \
文件添加时,大文件会按照256KB的大小去分块,分块内容存储在.ipfs repo下的blocks文件夹下,每一个块都对应一个hash。文件添加完成之后,会返回一个文件hash,文件夹是递归添加的,会将每一个文件的hash返回,最后一个返回文件夹hash。由于IPFS中,文件都是基于内容寻址的,用户不需要关心这些文件放在哪,这些hash就是用来查找和得到文件的索引。# S) b$ ~" l: ~- c# F/ r, _+ k
·
6 H2 b) R' K& T: x- V下载文件
2 _% W6 ~* p& @+ |2 a( ~. @想要拿到一个IPFS上的文件,只需要知道文件的hash即可。
7 l3 B  O/ \" Z, Z8 b1 Y下载命令:
0 X: W. T9 F% Z; @> ipfs get  -o
- r9 v1 x/ G8 R0 H9 r或者查看命令:
. k8 A  l  Q6 i> ipfs cat & o% o& Y" B3 q8 w, Q% H* U- q. c+ W
IPFS 的所有文件都是在本地的,Pin add可以将远端节点的文件长期保留在本地,不被垃圾回收。通过 add 添加的文件默认就是pin过的。  U  w# J* a9 ?1 D  E
pin还有一个作用,pin add之后,这个节点就可以同add这个文件的节点一样,作为整个文件的服务节点。其他节点在get或pin add的时候理论上可以从这2个节点的任何一个节点拿去这个文件的块。当有很多个节点都pin add这个文件时,就会增加这个文件的获取速度,也降低了文件被删除的可能。6 G: Z% k5 P. `' s
> ipfs pin add
" T% t) u5 `# a" e4 i9 I7 F> ipfs pin ls //查看哪些文件在本地是持久化的。8 }) ^/ Z* y4 m; f* v
·0 T8 |9 d  D' _/ Q6 ~4 v
分享文件. q! [, J/ B2 F* ?, @
现实中,用户习惯获取内容的方式都通过http的方式,让用户去敲get命令去或取文件恐怕只有极客们会尝试吧。回想一下,云盘分享文件的做法,生成一个http url,把链接分享给需要的人。
+ M" ]  L. F7 }# MIPFS demo也提供了一个http gateway,官方(公网)用的是 http://ipfs.io ,所以分享的链接可以是:
3 @; z! S$ K; T# y[url=]http://ipfs.io/ipfs/
& z: i+ K6 i$ D' d, g' W# G+ I由于某些已知原因,ipfs.io这个网关在国内是没法正常使用的,因此有条件的可以在自己的服务器上部署一个IPFS gateway(Ipfs 私网),这样,分享的链接可以是
( O3 F( k- @6 b/ @: t, j, s$ [http:///ipfs/
, c  z! O* k" Q8 w( j. m% G·, I1 W6 j2 ~/ p: _+ A
IPNS$ d9 ?& ]# ~" Z1 ]9 o
到现在,我们分享文件还是不断地发送一个个hash组成的url,每分享一个文件就会重新生成一个url,那么可以有一固定的"网址”给我们来看你的分享呢?当然可以。这就需要借助IPNS。具体做法是6 e0 ]9 M5 E. E2 R
> ipfs name publish & K8 H/ @( V1 g5 C0 {
这条命令相当于把文件的hash和IPFS的节点绑定,这样就可以通过一个不变的地址来访问publish的文件" e2 S$ C5 C8 G# f
http:///ipns/
) a- k9 x* D. r- J5 [' X( u) g3 npeerid即之前介绍的本节点的唯一标识。7 l( D4 ^4 t1 l4 v
这样做的有一个很大的缺陷,就是每次这个链接指向的都是最后一条publish的内容。但是有解决方法,大家可以查看我的博客的关于页,我的IPFS主页。实现方式其实很简单,就是将将分享文件url的列表publish到ipns上。后续可能会再写一篇博文介绍做法。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

繁星如尘 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2