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

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

本文翻译自 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 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 229 关注
  • 去中心化
    15 引用 • 100 回帖 • 5 关注
  • 数据结构
    87 引用 • 115 回帖 • 4 关注
1 操作
88250 在 2019-04-28 10:40:37 置顶了该帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • Vanessa 1 评论

    42000 是一个什么梗么?

    估计是原作者随手写的。
    88250
  • syavingcs 2 评论

    trollface 这是打算开始搞了吗

    还没确定到底要不要开搞。
    88250
    @88250 这个应该用回复而不是评论吧?
    Vanessa 1 赞同
  • qiankunpingtai

    写的很不错,看了一遍,大概了解了中心化的弊端,要拿这个去中心化的机制做什么呢?

    1 回复
  • 88250

    准备撸个社区 😁

    1 回复
  • qiankunpingtai

    造个 B 站那样级别的社区吗?

    1 回复
  • 88250

    那不现实嘛,还是做个小众社区 😂

    1 回复
  • qiankunpingtai

    不是已经有一个小众社区了吗?为什么还要再做一个呢?这样真的好吗?
    我觉得我们可以向更大的方向努力一下!

    1 回复
  • 88250

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

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

    这个方向够大么 doge

    1 回复
  • qiankunpingtai

    匿名风险很大,又没有收益,在中国现在大部分软件在向实名制发展!纯粹的匿名无收益模式很难持续下去。
    https://qiankunpingtai.cn/article/1554004288639
    可以看看我之前做的这个模型能不能搞一下

    1 回复
    1 操作
    qiankunpingtai 在 2019-07-19 14:14:41 更新了该回帖
  • 88250

    我不为收益,只为实现自己心中的一些想法。

    1 回复
  • qiankunpingtai

    现在的大部分网站发个帖子都要审核,越大型的审核越严格!我觉得以我们国家目前的形式是不允许完全匿名的软件存在的!因为这个东西无法管理!

    2 回复
  • 88250

    去中心化以后就不存在网站这个概念了。大家只关注自己关心的内容,程序本身也会通过某种公开机制来实现反垃圾内容。

    1 回复
  • qiankunpingtai

    我的理解是文件还是要在多个地方存储,只是每个地方相同的文件只存一份,然后根据内容生成的 hash 值去获取
    我可以给你搭一个 FastDFS 结合 FastDHT 实现文件去重存储的系统,这就能实现这个想法,这个系统在多个地方存在,不管去谁那里只要拿 hash 去获取就能拿到对应的文件。

    1 回复
  • wizardforcel

    以现有的技术来看,那不叫审核,只能叫过滤。用各种分隔符就能很容易绕过。

  • 88250

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

    1 回复
  • qiankunpingtai 1 赞同

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

    1 回复
  • xflash

    你说的是内部网络的分布式对象存储服务,D 大说的是公网环境下的 P2P 去中心化存储服务,不是一码事。比如在公网环境下,FastDFS 结合 FastDHT 要如何实现网络穿透,让不同 NAT 网络中的节点能够互通?还有节点之间通讯时数据要如何做加密和签名使得节点是互信的?

  • jiyiren 2 1 赞同

    去中心不应该是基于资源指纹(md5)来获取资源的形式,这种方式在目前的架构上是完全已经可以实现的,不需要所谓的去中心。

    去中心本质应该是像 比特币那样,数据不是存在某个个人、商业公司的服务器上,而是存在大千世界所有用户的机器上。但这是由代价的,代价就是每个用户都要存全量的数据,一个交易记录要超过 50% 的用户同意才能记录,这会导致上记录非常慢,这是完全去中心的特性。

    博客中的去中心应该不是这样,可能所想的是建资源池,通过 hash 访问资源或者进行去重,但这仍然是中心化的。

    目前的分布式已经是很好的解决方案了,资源不可能完全集中在某些机器上的,因为需要有 CDN,就近用户下发,用户访问的速度和文件存储地方需要平衡的。存储文件为了避免数据丢失需要三副本或者基于编码的 1.5 副本,这也需要在成本和技术上平衡。这些控制基本都是中心系统协调控制才行。

    目前互联网确实逐步在去中心化,但本身仍然是中心的,因为只有中心化才能有商业价值,反过来商业是驱动技术发展的核心。传统的 CDN 是内容的分布式,现在比较火的边缘计算实际上是计算的分布式,我们无法做到真正的无中心,一种平衡方式就是分布式服务。

    (看了博主创业真的很钦佩和羡慕,我也希望自己能为自己做事)

    1 回复
  • wizardforcel

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

请输入回帖内容 ...