当前位置:首页> 原创动态 >IPFS—点对点的分布式文件系统(一)

IPFS—点对点的分布式文件系统(一)

2023-05-10 14:56:27

摘要:本文主要是介绍了IPFS,一种新颖的对等版本控制的文件系统,综合了许多以前成功的系统的优点,产生了突出的效果,甚至比参考的这些系统的总和还要好。IPFS的核心原则是将所有数据建模为同一Merkle DAG的一部分,被评为2018年最值得期待的项目。

一、介绍

在全球分布式文件系统这领域,已经有许多人的尝试。一些系统已经取得了重大的成功,而很多却完全失败了。在学术界之外,应用最广泛的是面向音视频媒体的点对点文件共享系统。最值得注意的是, Napster, KaZaA 和BitTorrent[2]部署的文件分发系统支持1亿用户的同时在线。即使在今天, BitTorrent (是一种内容分发协议)也维持着每天千万节点的活跃数,基于这些学术文件系统理论而实现的应用程序有很多的用户量,然而,这些系统理论是在应用层,而没有放在基础层。以致没有出现通用的文件系统基础框架,给全球提供低延迟的分发。

也许是因为HTTP这样“足够好“的系统已经存在。到目前为止,HTTP已经作为“分布式文件系统“的协议,并且已经大量部署,再与浏览器相结合,具有巨大的技术和社会影响力。在现在, 它已经成为互联网传输文件的事实标准。然而,它没有采用最近15年发明的数十种先进的文件分发技术。 从一方面讲, 由于向后兼容的限制 和 当前新模式的投入, 不断发展http web 的基础设施几乎是不可能的。但从一个角度看, 从http 出现以来, 已经有许多新协议出现并被广泛使用。升级http协议虽然能引入新功能和加强当前http协议,但会降低用户的体验。

有些行业已经摆脱使用HTTP 这么久, 因为移动小文件相对便宜,即使对拥有大流量的小组织也是如此。但是,随着新的挑战,我们正在进入数据分发的新纪元:

(a)托管和分发PB级数据集,

(b)跨组织的大数据计算,

(c)大批量的高清晰度按需或实时媒体流,

(d)大规模数据集的版本化和链接,

(e)防止意外丢失重要文件等。其中许多可以归结为“大量数据,无处不在”。

由于关键功能和带宽问题,我们已经为不同的数据放弃了HTTP 分销协议。下一步是使它们成为web自己的一部分。


正交于有效的数据分发,版本控制系统,已经设法开发重要的数据协作工作流程。Git是分布式源代码版本控制系统,开发了许多有用的方法来建模和实现分布式数据操作。Git工具链提供了灵活的版本控制功能,这正是大量的文件分发系统所严重缺乏的。由Git启发的新解决方案正在出现,如Camlistore ,个人文件存储系统,Dat 数据协作工具链和数据集包管理器。Git已经影响了分布式文件系统设计[9],因为其内容涉及到Merkle DAG数据模型,能够实现强大的文件分发策略。还有待探讨的是,这种数据结构如何影响面向高吞吐量的文件系统的设计,以及如何升级Web本身。


本文介绍了IPFS,一种新颖的对等版本控制的文件系统,旨在调和这些问题。 IPFS综合了许多以前成功的系统的优点,产生了突出的效果,甚至比参考的这些系统的总和还要好。IPFS的核心原则是将所有数据建模为同一Merkle DAG的一部分。

2. 背景

本节回顾IPFS所采用成功的点对点系统技术的重要属性。

2.1 分布式哈希表(DHT)

分布式散列表(DHT)被广泛用于协调和维护关于对等系统的元数据。比如,MainlineDHT 是一个去中心化哈希表,他可追踪查找所有的对等节点。

2.1.1 KADEMLIA DHT

Kademli是受欢迎的DHT, 它提供:

1、通过大量网络进行高效查询:查询平均联系人O(log2N)节点。 (例如,20跳10万个节点的网络)

2、低协调开销:优化数量的控制消息发送到其他节点。

3、抵抗各种攻击,喜欢长寿节点。

4、在对等应用中广泛使用,包括Gnutella和BitTorrent,形成了超过2000万个节点的网络[16]

2.1.2 CORAL DSHT

虽然一些对等文件系统直接在DHT中存储数据块,这种“数据存储在不需要的节点会乱费存储和带宽”[5]。Coral DSHT扩展了Kademlia三个特别重要的方式:

1、Kademlia在ids为“最近”(使用XOR-distance)的关键节点中存储值。这不考 虑应用程序数据的局部性,忽略“远”可能已经拥有数据的节点,并强制“最近”节点存储它,无论它们是否需要。这浪费了大量的存储和带宽。相反,Coral 存储了地址, 该地址的对等节点可以提供相应的数据块。

2、Coral将DHT API从get_value(key)换成了get_any_values(key)(DSHT中的“sloppy”)中。这仍然是因为Coral用户只需要一个(工作)的对等体,而不是完整的列表。作为回报,Coral可以仅将子集分配到“最近”的节点,避免热点(当密钥变得流行时,重载所有最近的节点)。

3、Coral根据区域和大小组织了一个称为群集的独立DSHT层次结构。这使得节点首先查询其区域中的对等体,“查找附近的数据而不查询远程节点”并大大减少查找的延迟。

2.1.3 S/KADEMLIA DHT

S/Kademlia[1] 扩展了Kademlia, 用于防止恶意的攻击。有如下两方面的方法:

1、S/Kad 提供了方案来保证NodeId的生成已经防止Sybill攻击。它需要节点产生PKI公私钥对。从中导出他们的身份,并彼此间签名。一个方案使用POW工作量证明,使得生成Sybills成本高昂。

2、S/Kad 节点在不相交的路径上查找直, 即使网络中存在大量的不诚实节点,也能确保诚实节点可以互相链接。即使网络中存在一半的不诚实节点,S/Kad 也能达到85%的成功率。

2.2 块交换 - BitTorrent

BitTorrent[3] 是一个广泛成功应用的点对点共享文件系统,它可以在存在不信任的对等节点(群集)的协作网络中分发各自的文件数据片。从BitTorrent和它的生态系统的关键特征, IPFS得到启示如下:

1、BitTorrent的数据交换协议使用了一种bit-for-tat的激励策略, 可以奖励对其他方面做贡献的节点,惩罚只榨取对方资源的节点。

2、BitTorrent对等体跟踪文件的可用性,优先发送稀有片段。这减轻了seeds节点的负担, 让non-seeds节点有能力互相交易。

3、对于一些剥削带宽共享策略, BitTorrent的标准tit-for-tat策略是非常脆弱的。 然而,PropShare[8]是一种不同的对等带宽分配策略, 可以更好的抵制剥削战略, 提高群集的表现。

2.3. 版本控制系统- Git

版本控制系统提供了对随时间变化的文件进行建模的设施,并有效地分发不同的版本。流行版本控制系统Git提供了强大的Merkle DAG对象模型,以分布式友好的方式捕获对文件系统树的更改。

1、不可更改的对象表示文件(blob),目录(树)和更改(提交)。

2、通过加密hash对象的内容,让对象可寻址

3、链接到其他对象是嵌入的,形成一个Merkle DAG。这提供了很多有用的完整和work-flow属性。

4、很多版本元数据(分支,标示等等)都只是指针引用,因此创建和更新的代价都小。

5、版本改变只是更新引用或者添加对象。

6、分布式版本改变对其他用户而言只是转移对象和更新远程引用。

2.4 自我认证认文件系统-SFS

SFS 提出了两个引人注目的实现分布式信任链和平等共享的全局命名空间。SFS引入了一种自我建构技术—注册文件:寻址远程文件系统使用以下格式:

因此SFS文件系统的名字认证了它的服务,用户可以通过服务提供的公钥来验证,协商一个共享的私钥,保证所有的通信。所有的SFS实例都共享了一个全局的命名空间,这个命名空间的名称分配是加密的,不被任何中心化的body控制。

 未完待续……

更多详情请扫描下方扫描下方二维码进群交流,进入官方群交流)




友情链接