立即领取|华润集团、宁德核电、东风岚图等 20+ 标杆企业数字化人才培养实践案例 了解详情
写点什么

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:3428689
用户头像

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

关注

评论

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

为什么联盟链系统没有“激励”?

CECBC

区块链

即构发布 LCEP 低代码互动平台产品 RoomKit,实现互动房间0代码搭建

ZEGO即构

安卓开发在线!Android面试吃透这一篇就没有拿不到的offer!大厂内部资料

欢喜学安卓

android 程序员 面试 移动开发

重磅发布 | 2021年OpenAtom XuperChain开源技术路径

百度开发者中心

百度 #区块链#

Kafka生产者哪些重要的参数是我们需要注意的?

码农架构

Java kafka 程序员 架构 消息中间件

函数式编程Stream接口真的有那么好用吗?

码农架构

Java 程序员 架构

JDK1.8升级这么久!Stream流的规约操作有哪些?

码农架构

Java 架构 jdk 函数编程

2021版阿里Java亿级并发设计手册:基础+数据库+缓存+消息队列+分布式+维护+实战

Java架构追梦

Java 阿里巴巴 面试 系统架构 亿级并发

开发Kafka消费者客户端需要注意哪些事项?

码农架构

商务部CECBC专委会-商务联络部长王聚师:中医国际化的数字创新密码

CECBC

数字

并发队列:PriorityBlockingQueue和DelayQueue案例使用

叫练

并发编程 队列 优先级队列 条件队列 并发队列

架构师训练营大作业

Geek_f06ede

Kafka在哪些场景下会造成重复消费或消息丢失?

码农架构

Java kafka 程序员 架构 消息中间件

Clubhouse是个啥?一夜爆火一码难求

架构精进之路

七日更 2月春节不断更 clubhouse

图解分析:Kafka 生产者客户端工作原理

码农架构

Java 程序员 架构 kafak

5分钟让你理解K8S必备架构概念,以及网络模型(上)

大数据 架构

做了6年的Android,Jetpack-MVVM-高频提问和解答,看看这篇文章吧!

欢喜学安卓

android 程序员 面试 移动开发

Elasticsearch 搜索结果解析

escray

elastic 七日更 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

产品经理:一款用户全量会话轨迹管理产品是怎么炼成的?

博睿数据

架构师训练营大作业(二)

Geek_f06ede

“双循环”下的数字货币棋局

CECBC

数字货币

零基础实现Java直播(二):实现流程

ZEGO即构

怎么理解Kafka消费者与消费组之间的关系?

码农架构

Java 大数据 程序员 架构

重磅发布 | 3.4K Star可视化神器来啦

百度开发者中心

工具 可视化 #飞桨#

anyRTC新春大礼包

anyRTC开发者

音视频 WebRTC RTC

Kafka 发送消息过程中拦截器的用途?

码农架构

Java kafka 程序员 架构

【JS】事件委托

德育处主任

JavaScript 大前端 js 2月春节不断更

🎨 HTTP 协议的前世今生

飞天小牛肉

Java 程序员 面试 计算机网络 2月春节不断更

使用logstash作为docker日志驱动收集日志

远鹏

Docker Logstash 日志系统

电子书下载|2020 年云原生年货小红书来啦!

阿里巴巴云原生

容器 微服务 开发者 云原生 k8s

Kafka消费者提交消费位移时提交的是当前消费到的最新消息的 offset 还是 offset+1?

码农架构

Java kafka 程序员 架构 消息中间件

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