IPFS 去中心化数据结构(一)

本贴最后更新于 2035 天前,其中的信息可能已经时异事殊

本文翻译自 IPFS 社区教程 ProtoSchool。ProtoSchool 是一个可以交互式学习 IPFS 编程的网站,涉及代码的部分大家可到该网站上直接运行测试!

去中心化的(Decentralized) Web 依赖于其独特的数据结构以及链接策略。让我们来一起学习一下哈希(hashing)、内容寻址(content addressing)、有向无环图(DAG) 以及默克尔树(Merkle Trees)!

LESSION 1 - 数据结构

在进入具体代码之前,让我们先花点时间看看去中心化 Web 的概念。课程 1 暂时不会涉及代码,让你可以可以更快熟悉一些关键术语和概念。

让我们开始吧!

数据结构

无论你是否是程序员,你每天都被数据结构所包围。列表、词典和目录都有助于我们组织信息并考虑各种数据之间的关系。

数据结构 - 维基

在计算机科学中,数据结构是一种数据组织,管理和存储格式,可以实现高效的访问和修改。 更确切地说,数据结构是数据值的集合,描述它们之间的关系,以及可以应用于数据的功能或操作。

在编程中,数据结构无处不在。将数据组织成变量以便在程序中使用它们的方式涉及数十到数百万个数据结构。如果你是开发人员,你可能熟悉常见的数据结构,如数组、对象,图等。

去中心化的数据结构

在去中心化的的 Web 上,我们是从对等节点(Peers)而不是某个中央节点访问数据,所以我们需要专门的一些数据结构,来让我们验证和链接各种各样的数据。

去中心化系统中的数据结构必须是可验证的。在单一系统上,你会比较信任你机器内存或磁盘上使用的数据结构。但在去中心化的系统中,对等节点的信任度较低,甚至可能为零。

此外,大型数据结构需要能够在对等节点之间传播并链接在一起以便实现去中心化。与任何网页可以链接到不同位置的另一个网页的形式类似,去中心化的数据结构实现了可互连的数据网络。

LESSION 2 - 寻址和中心化的 Web

在我们深入研究去中心化 Web 的共享工作方式之前,让我们先花点时间来研究一下传统方式是如何访问数据的。

通过 URL 寻址

URLs (统一资源定位符,Uniform Resource Locators) 是我们在中心化 Web 上分享数据的主要方式(这种方式我们都习惯)。URL 使我们能够在网络上创建链接和连接数据,因此它们有助于实现有价值的目的。(没有链接的话网络会非常糟糕!)但是,URL 基于存储数据的位置 ,而不是基于存储在那里的资源内容。我们称这种方式为位置寻址(location addressing),它会带来一些问题。

大多数人都有使用 URL 的体验,我们根据经验对它做了一些假设。例如当我们看到 https://www.puppies.com/beagle.jpg 时,我们可能会从文件名和扩展名猜测存储在该位置的数据是小猎犬的照片(JPEG 格式), 但是我们无法仅通过 URL 验证这一点。很可能有一张藏在 beagle.jpg 的吉娃娃的照片,甚至更糟糕的是它居然是一只可爱的小猫!

通过域名、URL 描述了表示我们所请求数据的中央机构。即使网络是去中心化的,任何人都可以连接到其他任何人,但基于位置的引用要求了数据本身必须是中心化的,以便我们可以从中央机构获取到。除了上面提到的文件名假设,我们也会对这些权威或域名做出假设。例如我们假设在 puppies.com 上托管的文件比在 evilhacker.com 上托管的文件更安全,但我们无法确定是否真的如此。

所有这些不确定性也反之亦然。如果我们看到一张可爱的小狗的照片并被告知它被存储在网络上,但我们是无法猜出该图片 URL 的。我们不能确定域名,不能确定由谁伺服,不能确定文件名。

中心化 Web 上的信任和效率

正如你所看到的,由于我们无法验证 URL 上的特定内容 并且依赖于中心化机构(和人们的善良)来标记事物的真实情况,因此我们很容易被欺骗。

42000 人很可能存储完全相同的可爱小猎犬的照片,它们使用了不同的域名和不同的文件名。让我们面对现实吧,即使在我们自己的笔记本电脑上,大多数人都保存了与 download.pdf 相同的文档 download(01).pdf,或者使用 v12018-12-18 来命名相同的文档。Web 非常令人困惑,不同的 URL 上多次保存了非常混乱的数据,而且没有简单的方法来判断哪些数据项彼此相同。

肯定有更好的办法!


下一节:IPFS 去中心化数据结构(二)

  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    21 引用 • 245 回帖 • 241 关注
  • 去中心化
    16 引用 • 106 回帖 • 5 关注
  • 数据结构
    88 引用 • 115 回帖 • 4 关注
1 操作
88250 在 2019-04-28 10:40:37 置顶了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • wizardforcel

    不用 md5 你怎么表达地址这个概念?单机上的 va 到多机上就不可用了。

  • 其他回帖
  • 88250

    FastDFS + FastDHT 的集群规模伸缩性不知道性能如何,比如在 1K 节点的规模下这个系统是否还能工作,部分节点掉了之后整个网络在查询、缓存上的处理是否还有效。另外,只是实现分布式文件系统还不够,还要有 pubsub 模式实现才行,不然实现不了推送,系统的可交互性会很差。现有的一些分布式文件系统的适用场景主要还是服务端集群,离去中心化这个需求还是差那么一点。我觉得 IPFS 在这方面做得比较好,节点配置也很简单,基本是开箱即用。

    1 回复
  • 88250

    黑客派严格来说不算一个理想的社区,无奈现在“船大难调头”了。

    我理想中的社区应该是完全透明(源码和数据都完全公开)、有非常好的可扩展性(基于数据和一些简单的机制来开发一下就能达到自己想要的效果)。管理方面也是全透明的,任何管理操作都通过编程方式公开实现,“Code is law”。另外,最重要的一点是所有用户都是匿名参与交互的,可以放心说出自己想说的话,享受匿名社交的快乐。

    这个方向够大么 doge

    1 回复
  • qiankunpingtai 1 赞同

    fastdfs 支撑上千节点完全没有问题,我感觉用什么还是要看业务,先把业务理清楚,再去考虑选择什么技术,这样才靠谱点

    1 回复
  • 查看全部回帖