什么是 IPFS
IPFS(InterPlanetary File System)是一个分布式系统,用于点对点的内容存储和传输。与传统的互联网服务商不同,该系统是去中心化的,不受任何中心化机构控制。任何人都可以参与到该系统中,成为节点,并贡献自己计算设备中的闲置内存,用于储存和分享内容(文件)。
例如,当你在维基百科上搜索某个术语时,你的电脑会要求维基百科的中心化服务器把相关内容分享给你。而在 IPFS,你的电脑会问其他的计算机设备,要求他们把内容分享给你。
IPFS 由 Protocol Labs 在 2015 年创立。其致力于构建一个系统,连接各个地方甚至是星际宇宙。这也是 IPFS 名字的由来。
IPFS 的检索机制:内容检索
内容检索(Content Addressing)是一种通过内容本身而不是位置来进行检索的检索方式。延续前文的例子,当你在 TokenInsight 中搜索“比特币”时,浏览器会跳转到一个特定的 URL:https://tokeninsight.com/en/cryptocurrencies,也就是 TokenInsight 上比特币的币种详情页面。而通过 IPFS,你的计算机会询问其他计算设备谁拥有这个页面,并请求其他计算机将该页面分享给你。这里的内容可以是文件、网页、应用或是 Metadata。
引用一个 IPFS 官方的例子:当你想要在图书馆找一本书,你通常会通过这本书的书名来寻找它,而不是通过摆放的位置。很少有人会说:我想要那本放在二层一号书架第三排左边的第四本书。这样如果这本书被挪动过,你就很难找到它了。
IPFS 的运作机制
当用户在 IPFS 上上传内容时,该内容将会被标记上一个唯一标识(CID)并被存储在节点上,然后系统会将内容传播到整个网络(即储存在多个网络节点中)。为了保证网络的速度,IPFS 可能会将上传的内容分成几块,并且每一个都标记上 CID,单独保存。然后系统会使用一种叫 Merkle DAG 的数据结构,将这些数据进行关联、整理。
如果用户想要查找特定内容,可以搜索对应的 CID,然后系统将找到哪个参与者拥有该内容,并要求其将内容交付给请求方。
IPFS 的存储方式
Content Identifier
IPFS 的内容检索是通过 Content Identifier(CID)来实现的。IPFS 网络中每一个文件/子文件都会有一个专属的 ID,即 CID。 CID 是每个文件信息的哈希,来源于内容本身。因此,相同的内容会产生相同的 CID,而内容的任何变动都会直接反映到 CID 上。
IPFS 默认使用 sha-256 哈希算法,但也支持很多其他的算法。
Merkle Directed Acyclic Graph
为将网络中的 CID 进行结构化整理/处理,IPFS 使用了 Merkle DAG 数据结构。Merkle DAG 全称为 Merkle Directed Acyclic Graph,来源于 DAG。
什么是 Merkle DAG?
我们可以将 Merkle DAG 拆分为四个词。首先 Graph 是指用于表示不同对象之间关系的图表,包含对象(也叫作节点)和边。而 Directed 是指方向,每一条边都有一个方向,指向下一个对象。Acyclic 表示图表中没有循环,每一个对象都不会指向之前的对象。DAG 的中文为有向无环图。Merkle DAG 是 DAG 中的一种。在 Merkle DAG 中每一个对象都有一个专属的 ID,也就是内容的哈希。
为确保网络的运行速度,IPFS 会将用户上传的内容(文件)分割成小块/子文件(例如:256KB 每块),每一个小块存放在一个区块中,然后用 Merkle DAG 来连接各个区块。Merkle DAG 可用来展现各内容与其子文件的关系,甚至用来给文件进行分类(类似于文件夹和文件)。
Merkle DAG 的特点:
- Merkle DAG 只能从下到上(从子节点到父节点)构建。
- 节点的任何变化都会改变其 CID 并进一步影响其在 DAG 中的所有父节点。
- 一个子节点可能有多个父节点。
IPFS 如何检索和分享内容
Distributed Hash Table
在 IPFS 上,用户可以通过 Distributed Hash Table(分布式散列表)来寻找标的内容,即谁拥有你想要的内容,他的位置在哪。
Hash Table 是指一个由 key 和 value 组成的数据库,每一个 value 都有一个唯一对应的 key,因此用户可以通过 key 来寻找 value。这里的 key 可以理解为 CID,value 可以理解为内容。Distributed Hash Table 是指系统中有多个参与者,每个参与者都有一个 Hash Table,用户可以查看参与者们的 Hash Table 来寻找想要的内容。
Distributed Hash Table 适用于在大量数据中寻找信息,因为每个 key 格式一致,并且每个参与者都会将数据进行分类以提高数据检索的效率。
当用户定位了他们想要的目标内容后,他们会与该参与者的计算设备建立联系,并获得目标内容(该过程将通过 IPFS 上的 Bitswap 模块完成)。收到目标文件后,用户可通过比对收到内容和目标内容的 CID 来确认是否一致。
IPFS 的应用
目前,已经有部分 web3 项目使用 IPFS 作为其存储基础设施,横跨各个领域,例如 Filecoin(存储服务商)、Audius(去中心化音乐服务商)、Pinata(NFT 托管服务商)、OpenBazaar(点对点电子商务平台)、Morpheus.Network (供应链网络服务商)等。
你可能还对以下内容感兴趣:
Web3
存储
What else do you want to learn?