IPFS

IPFS

1 介绍

​ 在互联网的发展过程中,人们一直试图构建一个全球的分布式文件系统。有成功的,也有失败的。在这几十年的尝试过程中,也就AFS取得了成功,并且今天仍然被使用。在学院派之外,取得巨大成功的是共享大文件的系统,比如,Napster、KaZaA以及BitTorrent。然而,这些系统都不能作为基础设施,在其上构建应用。

​ 到目前为止,HTTP可能是最成功的“分布式的文件系统”。HTTP配合浏览器已经成为当前最主流的架构。但是,我们正在进入一个新的数据的时代,将面临如下问题:

  1. 数据将进入PB时代,
  2. 在超大数据集上进行跨组织的计算
  3. 高容量实时或者按需的媒体数据流
  4. 大量数据集的版本化
  5. 保证重要数据安全、不丢失

总结成一句话就是“海量数据,时时可达”。考虑到这些苛刻的条件以及带宽的因素,我们已经放弃使用HTTP。

​ Git作为分布式的源码版本控制系统,发明了很多有用的数据建模和操作的方式。Git工具链提供了很多大型分布式文件系统都缺少的版本化的功能。Camlistore、Dat都是受到Git的启发开发出来的分布式文件系统。Git的设计思想已经深深影响了分布式文件系统的设计。Merkle DAG数据模型具有很强的内容变大能力。

​ 在接下来的部分,将介绍一种神奇的P2P版本控制的文件系统IPFS,IPFS汲取过去成功的系统设计思想,试图解决上面提到的问题。IPFS的核心思想是将所有的数据按照Merkle DAG进行建模。

2 背景知识

2.1 DHTs

​ DHTs被用来维护P2P系统中的元数据信息。例如,BitTorrent MainlineDHT记录了P2P网络中的节点信息。

2.1.1 Kademlia DHT

Kademlia是一种广泛使用的DHT,它有如下特性:

  1. log(n)的查找时间复杂度
  2. 节点之间协调成本很低
  3. 优先选择长时间在线的节点,能有效的抵御攻击
  4. 经历过大量的系统实践

2.1.2 Coral DSHT

有很多的P2P系统将数据块直接存储在DHT上,浪费大量的存储空间和带宽。Coral DSHT在如下三个方面扩展了Kademlia:

  1. Kademlia在value节点中存储最近的N个结点信息。这种方式没有考虑数据的局部性原理,不管远端结点是否已经存储了相关数据,都强制最近的结点存储一些对本结点无用的数据,会浪费存储空间和带宽。与之相对的,Coral存储能提供相关数据的结点信息。
  2. Coral可以只将部分的数据放到附近的结点中,避免热点。
  3. Coral将DHT表按照区域、大小分层管理。这样可以优先查询同一个区域内的结点。

2.2 BitTorrent

BitTorrent是目前被广泛使用的P2P文件共享系统,它成功的协调成千上万的互相不信任的分布式结点共享文件的片段。IPFS借鉴了BitTorrent如下几个方面:

  1. BitTorrent的数据交换协议使用tit-for-tat的策略,即对共享数据资源的结点进行奖赏,对只获取资源不共享资源的结点进行惩罚。
  2. BitTorrent结点记录着可供使用的文件片段信息,优先发送稀有的文件片段。
Comentarios