如果说公链是"高速公路",那么IPFS就是高速公路路面之下的重要一层。它为不同的公链和应用提供数据的分布式存储支持。
IPFS并不是全新的发明,它是几十年来分布式系统探索的结果。IPFS综合了DHT(分布式哈希表)、BitTorrent、Git和SFS(自主认证文件系统)等优秀思想。通过改进和分层设计,将这些思想组合成了一个新的系统。
本文将简化IPFS的内容,以数据的存取过程为线索,通过对IPFS最关键的三个系统技术的分析,看它是如何满足区块链数据的分布式存储需求的。
01MerkleDAG
当文件存储到IPFS系统中时,并不是以一个完整的个体被存储。文件数据会被平均分割成多个256KB大小的块,并且这些块不会存储在单个中央服务器上,而是分开存储在网络中的分布式节点中。这些节点没有特权。
实现分布式存储的难点不在于文件的切割或加密,而在于如何将这些被分割和分开存储的数据重新组合成一个文件。这正是IPFS协议的第一个关键技术——MerkleDAG。
MerkleDAG是在Git系统的基础上构建的。它是基于MerkleTree的,储存的是哈希值。IPFS上的大部分数据对象都是以MerkleDAG的结构存在。
当从网络中获取文件时,首先从可信的节点获得文件的MerkleTree树根哈希值。然后,通过从其他节点获取MerkleTree的各个节点的哈希值,通过可信的树根来检查接收到的MerkleTree节点。如果遇到损坏或虚假的节点,就从其他存储节点获取另一个MerkleTree节点,直到获得一个与可信树根匹配的MerkleTree。这样就可以从上至下获取最底层的被切割的数据哈希,最终形成一个完整正确的文件。
由于MerkleDAG是基于哈希值的,而哈希值取决于数据块的内容,因此IPFS具备内容寻址(HTTP是基于域名寻址)、防篡改和去重复的功能。
02DHT
依靠MerkleDAG,可以构建一个用于实现分布式数据存储的数据结构。但是,还需要解决MerkleDAG存储的哈希值如何定位到具体存储数据的节点的问题。也就是把数据分配给哪个网络节点来存储,以及从哪个网络节点获取存储的数据。DHT(分布式哈希表)就是用来解决这个问题的方法。
DHT是一种存储"键值对"的容器,它通过key值快速获取value值。在DHT中,key是存储数据的哈希值,通过键值对可以实现数据块与目标节点的映射关系。
哈希表被分割成不连续的块,每个节点被分配一个属于自己的哈希块,也称为区间表,并成为该哈希块的管理者。当用户存储数据时,系统对数据进行哈希运算,根据运算结果决定由哪个节点负责储存,并生成哈希表。
当用户提取数据时,使用同样的算法计算数据的哈希,然后从哈希表获取对应的数据存储位置。
03BitSwap
仅实现数据的分布式存储还不够,数据还需要在节点之间有效交换,使整个系统能高效运作。IPFS协议受到BitTorrent的启发,通过对等节点间交换数据块来分发数据。
BitTorrent是一种点对点传输的网络协议,它在存有不信任对等节点的网络中分发数据。对于一个文件,下载的用户越多,下载速度越快。即使部分网络拥堵或服务器宕机,也不会对整个系统造成太大影响。然而,BitTorrent的一个致命缺点是,节点更多地索取而不是贡献。
为了激励节点分享数据,IPFS在BitTorrent的基础上进行了创新,并引入了包括信用、策略、帐单等在内的体系。基于这一体系的新数据交换协议被称为BitSwap。
在BitSwap协议下,向其他节点发送数据可以增加节点的信用值,而从其他节点接收数据会降低节点的信用值。
此外,BitSwap获取数据块不仅限于从同一组对等节点中获取,该协议存在一个由对等节点形成的大集群,其中包括所有数据块,这使得BitSwap比BitTorrent更高效。
结语
2014年5月,JuanBenet成立了ProtocolLabs协议实验室,并于2015年1月发布了IPFS。IPFS本质上是一个内容寻址的分布式存储和传输协议。
IPFS被寄予厚望,被
本站所有软件信息均由用户上传发布,版权归原著所有。如有侵权/违规内容,敬请来信告知邮箱:764327034@qq.com,我们将及时撤销! 转载请注明出处:https://czxurui.com/zx/25092.html
发表回复
评论列表(0条)