NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

IPFS:替代 HTTP 的分布式网络协议

  • 2015-10-14
  • 本文字数:3255 字

    阅读完需:约 11 分钟

今年年初, Internet Archive 开始倡导分布式网络。现在关于它的声音已经变得越来越清晰而又响亮。而 IPFS 就是在这种环境下出现的一个典型的开源代表。IPFS 是点对点协议 InterPlanetary File System 的简称,它是一个面向全球的、点对点的分布式版本文件系统,试图将所有具有相同文件系统的计算设备连接在一起。

近日,IFPS宣布了一个未来web 发展计划,它用基于内容的地址替代基于域名的地址,也就是用户寻找的不是某个地址而是储存在某个地方的内容,不需要验证发送者的身份,而只需要验证内容的哈希,通过这样可以让网页的速度更快、更安全、更健壮、更持久。IPFS 表示,IPFS 未来将替代HTTP(以及其他的许多东西)。

一、HTTP 存在很多问题

HTTP 鼓励高度集中化

Web 的本意是去中心化,但它却变得越来越中心化,今天越来越多的人依靠的是少数网站的服务。HTTP 变成了一个脆弱的、高度集中的、无效的、过度依赖于骨干网的协议。像美国国家安全局这样的组织,现在只需要在几个点上拦截通信来进行监视。对政府来说,阻止网站访问这些高度集中化的资源变得容易。这也使通信容易遭受 DDoS 攻击而面临巨大的风险。

将 web 进行去中性化,可以降低极少数强大组织的延展性,并提高所有站点的自由度和独立性,同时也降低了由于服务器中断造成数据丢失的风险。

HTTP 是低效的

如果不是成规模的处理数据,将这些数据从中央数据中心分发仍然是非常昂贵的。IPFS 可代替总是从数据中心获取内容的 HTTP,如果将一个 ISP 网络上的每一台计算机变成流媒体 CDN,这时会怎么样?例如,获取江南 Style 视频,就可以完全在 ISP 网络上下载,而不需要在 Internet 骨干网上经过大量的传输,从而大大减少数据传输的费用。

HTTP 过度依赖于 Internet 主干网

当内容过度集中化之后,这让数据中心高度依赖于 Internet 骨干网。这样除了有利于政府对内容进行封锁和审查,事实上存在很多可靠性问题。即使允许冗余,主要的骨干有时还是会被损坏,或者出现路由表失控,其后果可能是非常严重。Internet 骨干网并不健全,其很容易被攻击,同时一些重要的光纤线路被切断时服务很容易遭受影响。

二、IPFS 如何解决了这些问题

IPFS 从根本上改变了用户搜索的方式。通过 IPFS,用户搜索的是内容。通过 HTTP 浏览器搜索文件的时候,首先找到服务器的位置(IP 地址),然后使用路径名称在服务器上查找文件。按照这个设计,只有文件所有者可以判断这是否是用户要找的文件。此时,必须保证托管者不会通过移除文件或者关闭服务器而对文件做任何更改。

当文件被添加到 IPFS 节点上,它得到一个新的名字。这个名字实际上是一个加密哈希,它是从文件内容中被计算出来。通过加密保证该哈希始终只表示该文件的内容。哪怕只在文件中修改一个比特的数据,哈希都会完全不同。

当下一步向IPFS 分布式网络询问哈希的时候,它通过使用一个分布式哈希表,可以快速(在一个拥有10,000,000 个节点的网络中只需要20 跳)地找到拥有数据的节点,从而检索该数据,并使用哈希验证这是否是正确的数据。

IPFS 是通用的,并且存储限制很少。它服务的文件可大可小,对于一些大的文件,它会自动将其切割为一些小块,使 IPFS 节点不仅仅可以像 HTTP 一样从一台服务器上下载文件,而且可以从数百台服务器上进行同步下载。IPFS 网络是一个细粒度的、不可靠的、分布式的、易联合的内容分发网络(Content Delivery Network , CDN)。对于所有数据类型都是很有用的,包括图像、视频流、分布式数据库、操作系统、blockchains 等,而对于 IPFS 来说,最重要的是静态 web 网站。

IPFS 文件也可以是特殊的 IPFS 目录对象,它允许用户使用人类可读的文件名,透明地链接到其他 IPFS 哈希。用户可以通过默认方式加载目录中的 index.html,这也是标准的 HTTP 服务器采用的方式。使用目录对象,IPFS 可允许用户采用完全相同的方式生成静态网站。将 web 网站添加到 IPFS 节点中只需要一个简单的命令:ipfs add -r yoursitedirectory。在此之后,用户可以从任何 IPFS 节点访问,而不需要链接到 HTML 上的任何哈希。

与 IPFS 建立联盟的数据

IPFS 不需要每个节点存储所有发布到 IPFS 上的内容。相反,每个节点只存储自己想要的数据。如果每个节点托管一点数据,所有数据通过累积就提供了比任何集中式 HTTP 更多的空间、带宽和可用性。分布式网络将很快成为世界上最快、最可用、以及最大的数据存储。没有人有能力关闭所有的节点,所以数据永远不会丢失。

从其他 IPFS 节点复制、存储 web 网站很容易。它只需要一条命令以及网站的哈希值:ipfs pin add -r QmcKi2ae3uGb1kBg1yBpsuwoVqfmcByNdMiZ2pukxyLWD8。IPFS 负责剩下的所有工作。

IPNS

IPFS 哈希代表不可变的数据,这意味着它们是不能被更改的,否则会导致哈希值的变更。这是一件好事,因为它鼓励数据的持久性,但我们仍然需要一种方法来找到最新的 IPFS 哈希以表示你的网站。IPFS 通过一种特殊的功能来实现,即 IPNS。

IPNS 允许用户使用一个私有密钥来对 IPFS 哈希附加一个引用,使用一个公共密钥哈希(简称 pubkeyhash)表示你的网站的最新版本。如果用户使用过比特币,可能会对此比较熟悉,一个比特币地址也是一个 pubkeyhash。

如果该链接不起作用,不用担心。能够通过更改 pubkeyhash 所指向的内容,而 pubkeyhash 却永远保持不变。这样,网站的更新问题就得到了解决。

接下来,只需要保证这些网站的位置是人类可读的,所有问题就解决了。

人类可读的可变地址

IPFS/ IPNS 哈希是一些很大的、难看的字符串,而且不容易记住。所以 IPFS 允许用户使用现有的域名系统(Domain Name System, DNS)来为 IPFS/IPNS 内容提供人类可读的链接。它允许用户通过在域名服务器上将哈希插入 TXT 记录来实现这一点(如果你方便使用一个命令行,运行如下命令:dig TXT ipfs.git.sexy)。具体可以参考这里

未来,IPFS 已计划支持 Namecoin ,它理论上可以用来创建一个完全去中心化的、分布式的 web,整个环境中不需要一个中心控制。没有 ICANN,没有中央服务器,没有“权威”证书,也没有瓶颈。这听起来很疯狂。可现实的确疯狂。因为使用今天的技术这是完全可以实现的!

IPFS HTTP 网关:新旧网络之间的桥梁

通过一个 HTTP 网关,IPFS 可以实现从 HTTP 到 IPFS 的过度,浏览器可以完全实现 IPFS 之前,现在已经允许当前的 web 浏览器访问 IPFS。用户很快就可以切换到 IPFS,完成 web 网站的存储、分发和服务。

到目前为止,IPFS 还处于实验阶段。当网站更新的时候,Neocities 将每天发布一个哈希 IPFS。这个哈希将指向该网站的最新版本,并通过 IPFS HTTP 网关可以访问。因为每次更新 IPFS 哈希都会变更,这也能够为所有网站提供一个存档历史记录。

从长期来看,如果一切顺利的话,Neocities 希望使用 IPFS 存储所有的网站,并为每个网站发布 IPNS 键。这将让用户可以不依赖于 Neocities 而进行内容发布。如果构建得当,即使 Neocities 不存在了,用户仍然可以更新自己的网站。通过有效地去除网站对 Neocities 中央服务器的依赖,这种集中控制环境将被永久性打破。

IPFS 真正能够替代 HTTP 可能还需要一段时间,而且也有很多工作要做。

通过与协议实验室(Protocol Labs)合作, Neocities 已经成为产业界实施 IPFS 第一大网站。从 9 月 8 日开始,所有 Neocities 站点可以为世界上任何 IPFS 节点提供查看、存档和托管功能。当一个 IPFS 节点选择从 Neocities 上托管一个网站的时候,即使 Neocities 关闭了或停止对它托管,网站的原始版本仍继续可用。使用 Neocities 网站的 IPFS 节点越多,Neocities 网站越容易访问。

目前,IPFS 仍处于 alpha 开发阶段。它还没有取代现有的网站存储系统。如同任何复杂的新技术,它还存在很多需要的改进地方。但 IPFS 不是雾件,现在已经可以开始工作,感兴趣的用户可以下载软件安装到电脑上。


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-10-14 18:3428408
用户头像

发布了 268 篇内容, 共 118.2 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

深入理解 Go 语言的一等函数及其应用

宇宙之一粟

函数 Go 语言 10月月更 匿名函数

跟着卷卷龙一起学Camera--延迟02

卷卷龙

ISP camera 10月月更

分支规范和git提交规范

默默的成长

git 前端 10月月更

Web3.0杂谈-#006(53/100)

hackstoic

DAO Web3.0

架构实战训练营模块 2 作业

atcgnu

跟着卷卷龙一起学Camera--延迟01

卷卷龙

ISP camera 10月月更

低代码探索:freemarker的模板和表达式

程序员架构进阶

低代码平台 模板引擎 10月月更 freemarker

Java多线程 Future和FutureTask的区别

Yeats_Liao

后端 Java core 10月月更

跟着卷卷龙一起学Camera--延迟03

卷卷龙

ISP camera 10月月更

微信朋友圈的高性能复杂度分析

乖乖IvyShine

02微信高能性复杂度分析

神奇的叶叔叔

TCP 复位攻击原理和实战复现

急需上岸的小谢

10月月更

企业级大数据技术框架

穿过生命散发芬芳

大数据技术 10月月更

基于 HDP 构建企业数据平台

Bright

大数据 数据开发 数据平台

TLS加密远程连接Docker

程序员欣宸

Docker 容器安全 10月月更

kubernetes

急需上岸的小谢

10月月更

SpringBoot实体类常用注解(二)

Java学术趴

10月月更

MAC地址与IP地址

急需上岸的小谢

10月月更

Java多线程 线程池Executor框架

Yeats_Liao

后端 Java core 10月月更

前端JS规范

默默的成长

Vue 前端 10月月更

当前Serverless的六大局限性

阿泽🧸

Serverless 10月月更

微信朋友圈架构高性能复杂度分析

π

#架构实战营 架构实战训练营9期

渲染农场是什么_云渲染农场优缺点有哪些?

Renderbus瑞云渲染农场

云渲染 云渲染农场 渲染农场 Renderbus瑞云渲染

微信朋友圈的高性能复杂度分析

Louis

Java多线程 Callable和Future

Yeats_Liao

后端 Java core 10月月更

【ArchSummit】平安金融壹账通核心系统的微服务设计经验分享

小明Java问道之路

Java 架构 全球架构师峰会 ArchSummit 10月月更

2022-10-16:以下go语言代码输出什么?A:timed out;B:panic;C:没有任何输出。 package main import ( “context“ “fmt“

福大大架构师每日一题

golang 福大大 选择题

架构--作业2

李某人

架构实战营

挑战30天学完Python:Day5 数据类型 - 列表list

MegaQi

Python 挑战30天学完Python 10月月更

cstdio的源码学习分析10-格式化输入输出函数fprintf---宏定义/辅助函数分析04

桑榆

源码刨析 10月月更 C++

SpringBoot的实体类中常用的注解

Java学术趴

10月月更

IPFS:替代HTTP的分布式网络协议_语言 & 开发_张天雷_InfoQ精选文章