赫赫有名的 IPFS,旨在创建持久且分布式存储和共享文件的网络传输协议。
IPFS 即 InterPlanetary File System,一个点对点的分布式文件系统,旨在创建持久且分布式存储和共享文件的网络传输协议。
当前,使用 HTTP 协议传递相对小的文件其实是非常廉价和方便的,但是随着计算资源和存储空间的指数增长,我们面临了需要随时获取大量数据的问题,而 IPFS 就是为了解决这一问题出现的。
作为一个分布式的文件系统,IPFS 提供了一个支持部署和写入的平台,同时能够支持大文件的分发和版本管理;为了达到上述的目的,IPFS 协议被分成七个子协议,分别负责 IPFS 中的不同功能。
身份系统的主要作用就是表示 IPFS 网络中的每一个节点,所有的节点都通过唯一的 NodeId 进行标识,代表每一个使用 IPFS 的用户。
作为一个分布式的存储系统,节点之间的通信和信息传递都需要通过网络进行,同时能够使用多种传输层协议并保证可靠性、连通性、信息的完整性以及真实性。IPFS 可以使用任意的网络进行通信,它并没有假设自己一定运行在 IP 协议上,而是通过 multiaddr 的格式来表示目标地址和使用的协议,以此来兼容和扩展未来可能出现的其他网络协议。
在一个分布式系统中,检索或者访问其他节点中存储的资源就需要通过一个路由系统,IPFS 使用了基于 S/Kademlia 和 Coral 中的 DSHT 实现了路由系统,我们能够在 libp2p/go-libp2p-routing/routing.go 中找到 IPFS 路由系统的接口,实现三种基本的功能,内容路由、节点路由以及数据存储。
在 IPFS 中,数据的分发和交换使用 BitSwap 协议,BitSwap 负责两件事情:向其他节点请求需要的 Block 以及为其他节点提供 Block。
同时,IPFS 使用 Ledger 创建了一个具有激励和惩罚的网络,保证了网络中的大部分节点能够交换数据并且正常运行。
IPFS 定义了一系列的对象构建了支持版本控制的文件系统,与 Git 的对象模型非常类似,并且所有文件对象其实都通过 Protobuf 进行了二进制编码。最顶层的 commit 就表示历史的某一次快照,对比两次 commit 以及子节点构成的树就能得到两次快照之间的差别,我们可以认为 Merkle DAG 和文件对象构成了整个 IPFS 中的文件系统。
到目前为止,IPFS 技术栈已经提供了一个点对点的数据交换系统,能够在节点之间发送 DAG 对象,并且可以推送和取回不可变的对象,但是可变的命名系统也是网络不可缺少的一部分,我们终究需要使用同一个地址获取不同的状态,因为不能因为网站的更新而改变域名,所以 IPFS 需要提供域名服务解决这一问题。
在 IPFS 中可以使用如下的可变命名空间来解决这些问题,用户可以发布一个对象,其他节点就可以通过 ipns 加上该用户的节点地址访问到这些发布到网络中的对象:
在 IPFS 不仅能够使用哈希访问可变对象,也能嵌入现有的 DNS 服务中很好的运行,解决了底层服务无缝切换的问题。
IPFS 是一个非常有意思的区块链底层技术,它在兼容现有互联网协议的基础上,实现了点对点的文件存储系统并且为大数据存储提出了方案,作者尝试了一下 IPFS 的官方客户端 go-ipfs 也确实比较好用,但是目前也是在项目的早期阶段,很多模块和功能还没有定型。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。