D 的个人博客

开源程序员,自由职业者

小而美的 Java 博客系统 Solo
Golang 在线 IDE Wide
黑客与画家的社区 Sym
  menu
402 文章
1,949 评论
3426945 浏览
10 当前访客
ღゝ◡╹)ノ❤️

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

本文翻译自 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 去中心化数据结构(二)

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

    Reply
  • test

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

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

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

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

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

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

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

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

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

    这个方向够大么 doge

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

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

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

    Reply
  • 准备撸个社区 😁

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

    Reply
  • trollface 这是打算开始搞了吗

    Reply
  • 42000 是一个什么梗么?

    Reply