原文链接:HTTP is obsolete. It’s time for the distributed, permanent Web
作者:kyledrake
译者:赵可昭
今年年初Internet Archive发布了对分布式Web方案的征集,新的Web将会变得速度更快,安全性更高,更可靠,并且更加持久。对此我们感到兴奋不已,同时也将立刻踏上探索Web未来的旅途。
通过和Protocol Labs合作,Neocities成为了在生产中使用IPFS的最主要力量。目前Neocities的所有网站都可以通过世界上任意一个IPFS结点浏览和归档,即使Neocities关闭或撤下了某个站点,该站点也仍然可以被有效访问。支撑Neocities网站的IPFS结点越多,这些网站的可靠性越强(冗余度越高),对我们的集中依赖也就越少。
那么什么是IPFS呢?让我们来看一下它的README的内容:
IPFS(The InterPlanetary File System)是一种点到点的分布式文件系统,它连接的计算设备都拥有相同的文件管理模式。从某种意义上来说这个概念跟Web的最初理念很类似,但是实际上IPFS更像是互相转发Git目标的单个Bittorrent用户群。IPFS具备成为internet子系统的素质,通过合理配置可以完备甚至替代HTTP。这听起来已经有些不可思议,但其实它可以做到更多。
IPFS的开发目前处于alpha试验阶段,还没能替代现存的网站存储系统。就像其它复杂的新技术一样,我们有很多改进要做。但IPFS不是空想,它一直在实际运行着,你可以试着在自己的电脑上配置IPFS,为Neocities网站的访问用户提供服务,你的加入或许会延续某个网站的寿命。
尽管IPFS的开发还不十分成熟,但我仍然要表达一个大胆的观点:IPFS会取代HTTP(和其他一些组件一起)。虽然取代HTTP听起来很荒谬,但是我们应当看到HTTP已经很破旧了,继续长期甚至永远地使用HTTP才是更荒谬的事。所以我们应当应用当今计算机技术,着力解决分布式带来的诸多问题,为Web服务设计更好的协议。
1、HTTP的缺陷
HTTP(超文本传输协议)是全世界统一的全局信息格式协议,它的制定为分发和显示信息提供了规范。HTTP将发布信息的成本降到了最低,扰乱了经济、政治、文化管理机构对信息(音乐、思想、视频、新闻、游戏等等)传播的控制。然而通过使获取信息的渠道更加平等、过程更为容易,HTTP实际上使我们的文化产业更加蓬勃有生机,很难想象没有了它生活将会变得怎样。
HTTP堪称史上最伟大的发明之一,我永远爱它。但是由于在可分布性和可持久性方面的缺失,它多次在我们面前崩溃,因此难以成为人类知识总和的永久载体。HTTP分发内容的方式在根本上是有缺陷的,尽管经历了性能调优、CA证书SSL以及其它一些手段,也都没能改善。HTTP/2的改进在一定程度上缓解了缺陷,但是保守的升级并不能根本地解决问题,反而突显了HTTP的老旧。因此我们要采用一种新的基础协议代替HTTP来治理网络环境,提供更好的Web服务。我非常希望IPFS能成为那个替代者。
HTTP是脆弱的
上图是Tim Berners-Lee在CERN的NeXT电脑,是世界上第一台HTTP协议的Web服务器。主机箱上贴着一张醒目的纸条,上面写着“这是一台服务器,不要关机!”不能关机是因为其他几台Web服务器正和它保持着连接,依赖于它运转。一旦这台电脑关机或无响应,连接就会中断,站点间的联系会被打破,访问的内容也随之消失不见。这就是HTTP最大的问题所在,它的腐蚀性。Tim的NeXT电脑现存于一家博物馆,是最早被淘汰的Web服务器之一。
下图是使用Web时常见的场景:
即使没有读过HTTP协议的具体内容,大多数人也都了解404错误意味着什么。它是HTTP协议的错误码,表明网页不在服务器的指定位置。能够见到404错误说明你还有一定的运气,因为有些时候服务器连这样的信息也不会显示。更可怕的是除非Internet Archive做了备份,否则要访问的网页可能永远也找不到,就这样丢失了。通常一个网页诞生的时间越早,回应404错误的可能就越大。就像一个冷血的数字墓碑,埋葬了当时的认知、美感或者愚昧。
90年代以后建立的网站中,我最喜欢的是Mosh to Yanni,不过今天的它只能作为一个反面的例子出现,告诉我们HTTP在维持网站间的连接方面是有多么的不足。Mosh to Yanni主页的静态内容仍然可以加载,浏览器的渲染也运行得很正常,但是站外的和动态服务的内容已经全都不可访问。
出现这种状况的原因其实非常简单,就是集中管理的Web服务器不可避免的会关机。而关机的原因则有很多,或是域名的所有者变更,或是计算机崩溃却没有备份。若是取消集中管理,让网站的拥有者自己搭建HTTP服务器,情况也不会好转,甚至可能更糟。
与Mosh to Yanni相似的例子多得数不清,许多有用的信息就这样从人间蒸发。即使丢失的内容是荒谬的废话或是过时的言论,那也是我们人类经历过的历史,不该这么轻易的丢掉。
HTTP趋于超中心化
为了避免数据被不断侵蚀的状况,人们开始依赖于使用管理更完善的大型中心服务器,通过制作大量冗余备份来获得可靠性。这一方案在短期内是十分有效的,然而却在长期运转中滋生了新的一系列问题。
90年代易拉爱,在John Perry Barlow的网络空间独立宣言倡导下,线上国度不断繁荣,用信息的手段影响并推动世界。然而与此同时,政府和公司等组织也开始通过HTTP的漏洞进行渗透,窥探和监控网民的生活,阻碍他们获取对自身不利的信息。
当初人们想要建立的是非中心化的Web,可是如今使用的Web却越来越集中于少数一些服务器中心。造成的后果是,类似美国国家安全局这样的机构只要截取这些服务器中心的通信信息,就可以得到大部分用户的数据。对于政府来说,只要在边境路由上设置内容审查,就可以阻断访问中心服务器的连接。同时网络通信遭遇DDoS攻击的风险也大大增加。
相反分布式的Web可以减少管理部门的干涉,恢复人们的网络自由,同时也会减少单点故障带来的风险。
HTTP的效率不高
截止到我写这句话的是时间为止,江南style的视频已经有超过2,344,327,696次观看,姑且认为视频的大小都是117MB,那么仅视频文件就产生了274.3PB的网络流量。假设每1GB的成本(包括网络带宽和服务器存储)是1美分,则总共的花费将是2,742,860美元。
实际情况下花费可能还要高,因为网络带宽的价格是0.12美元起,亚洲用户则是0.2美元左右。对于谷歌这样的大公司来说钱可能不是太大的问题,不过对于一些中小小公司这就是个天文数字。我在Neocities做的工作有相当一部分是针对昂贵的带宽,通过一些技术手段减少基础设施运作的成本。
虽然HTTP降低了发布信息的成本,但它仍然需要大量金钱来运转,而且花费越来越多。在没有达到一定规模的情况下,集中由数据中心向外传播信息是非常昂贵的。若是我们能把同一ISP网络下的个人电脑都变成CDN内容提供者,从而取代数据中心,像江南style这样很火的视频就可以在ISP网络内部传播,就不需要接入到internet主干网,从而可以降低大量成本。IPFS就具备这样的功能,后面还会说到。
HTTP造成了Internet主干网被过度依赖
由于Web内容是超中心化的,数据中心的运作十分依赖Internet主干网络。除了会受到政府的审查和屏蔽之外,可靠性问题也大量存在。尽管已经采用了冗余备份的手段,可是一旦主干网崩溃,或是路由表错乱,依然会造成严重的后果。
几个月我就有过一次亲身体验,一辆小汽车撞坏了我们使用的上行光纤,整个Neocities的网络都瞬间变慢了。此外我还听说过一些类似的事情,比如有猎人射穿了东俄勒冈数据中心的光纤,抢修的工程师不得不坐着履带雪地车踩着滑雪板前去维修。就在我写这篇文章的时候,旧金山湾刚刚发生了一起复杂的网络攻击。
我想说的是Internet主干网是不完全可靠的,一方面它很容易遭受攻击,另一方面一旦重要的线路瘫痪,大量的网络服务都会受到影响。
2、IPFS的解决方案
上面我们主要讨论了HTTP存在的问题(超中心化),下面我们说说IPFS如何解决这些问题。IPFS从根本上改变了查找的方式,这是它最重要的特征。使用HTTP我们查找的是位置,而使用IPFS我们查找的是内容。
举个例子:服务器上运行着一个文件https://neocities.org/img/neocitieslogo.svg,遵照HTTP协议浏览器首先会查找服务器的位置(IP地址),随后向服务器索要文件的路径。这种体系下文件的位置取决于服务器管理者,而用户只能寄希望于文件没有被移动,并且服务器没有关闭。
IPFS的做法则是不再关心中心服务器的位置,也不考虑文件的名字和路径,只关注文件中可能出现的内容。我把刚才的文件neocitieslogo.svg放到IPFS节点,它会得到一个新名字QmXGTaGWTT1uUtfSb2sBAvArMEVLK4rQEcQg5bv7wwdzwU,是一个由文件内容计算出的加密哈希值。哈希值直接反映文件的内容,哪怕只修改1比特,哈希值也会完全不同。
当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。虽然早期的分布式哈希表曾遭受过女巫攻击,但是已经有一些新的方案来实现,我相信这个问题可以解决。
IPFS是通用目的的基础架构,基本没有存储上的限制。大文件会被切分成小的分块,下载的时候可以从多个服务器同时获取。IPFS的网络是不固定的、细粒度的、分布式的网络,可以很好的适应内容分发网络(CDM)的要求。这样的设计可以很好的共享各类数据,包括图像、视频流、分布式数据库、整个操作系统、模块链、8英寸软盘的备份,还有最重要的——静态网站。
IPFS文件还可以抽象成特殊的IPFS目录,从而标注一个可读的文件名(透明的映射到IPFS哈希),在访问的时候会像HTTP一样获取一个目录索引。在IPFS上建立网站的流程和过去一样,而且把网站加入到IPFS节点的指令只需要一条指令:ipfs add -r yoursitedirectory
。网页间的连接不再需要人去维护,IPFS自带的查找可以解决。
关联数据到IPFS
IPFS不会要求每一个节点都存储所有的内容,节点的所有者可以自由选择想要维持的数据。这就像是书签一样,在备份了自己的网站之外,自愿的为其他的关注的内容提供服务,不同的是这个书签不会像以前一样最终变得失效。
IPFS节点间的拷贝、存储和网站支援都很容易,只需要使用一条指令以及网站的哈希,例如:ipfs pin add -r QmcKi2ae3uGb1kBg1yBpsuwoVqfmcByNdMiZ2pukxyLWD8
,剩下的IPFS会搞定。
如果IPFS得以普及,节点数达到一定规模,即使每个节点只存放一点点内容,所累计的空间、带宽和可靠性也远超HTTP能提供的。随之而来,分布式Web会变成地球上最快、最可靠、最大的数据仓库,人类知识也就再也不会湮灭,亚历山大图书馆永远不会倒塌。
IPNS
IPFS哈希只能用来表示不可变数据,因为一旦数据改变,哈希值也会改变。从某种意义上来说,这是保持数据持续性的好的设计。但是我们也需要一种方法来标记最新更新网站的哈希,这个方法我们称作IPNS。
IPFS哈希是网站通过哈希公钥生成的,相对的IPNS使用私钥来标记IPFS哈希的引用。如果以前用过比特币你应该很熟悉这种模式,比特币地址就是一种公钥哈希。在Neocities的IPFS节点上,我标记了Penelope(我们网站的吉祥物)的镜像,可以使用IPNS公钥来加载:QmTodvhq9CUS9hH8rirt4YmihxJKZ5tYez8PtDmpWrVMKP。
由于IPNS功能还没有完成,如果上面的链接不能工作也请不要灰心。IPNS公钥指向的位置是可变的,公钥的值则是保持不变的。随着IPNS的引入,网站升级的问题可以顺利解决。
可读可变寻址
由于IPFS/IPNS的哈希值都是很长和难记的字符串,所以IPFS兼容了现存的域名系统(DNS),可以通过可读的链接访问IPFS/IPNS内容。使用方法是在nameserver上创建一个文本记录,插入网站的哈希值(如果手上有一个命令行终端,试一下这个:dig TXT ipfs.git.sexy)。访问http://ipfs.io/ipns/ipfs.git.sexy/可以观察到效果。
接下来IPFS还打算支持Namecoin。Namecoin从理论上完全实现了分布式Web的去中心化,整体的运行中不再需要中心化的授权。支持了Namecoin的IPFS不再需要ICANN、中心服务器,不受政治干涉,也无需授权证书。这听起来难以置信,但却是今天可以实现的技术。
IPFS-HTTP网关:新旧Web之间的桥梁
IPFS在实现上加装了HTTP网关,使得现有的浏览器也可以访问IPFS,我在上文中举过例子。所以无需等待,现在就可以开始使用IPFS作为存储、分布和搭建网站的设施。
如何使用IPFS
现有的IPFS实现是实验性的,Neocities会在网站更新的时候发布新的IPFS哈希,新的哈希会指向最新版本的网站,通过IPFS-HTTP网关可以直接访问。由于IPFS哈希是随着更新改变的,我们可以自动的获得旧版本网站的历史档案,这些内容也会被提供出来。
IPNS加入后如何使用
如果项目长期地进展顺利,我们会用IPFS支撑所有的网站,并且为每个站点制作IPNS哈希,用户可以独立的发布内容,不再需要联系我们。假如我们做到了设想的情景,即使Neocities不存在了,用户还是可以正常更新他们的网站,意味着用户对中心服务器的依赖永远解除,把世界上网站都笼络到旗下的计划完全打破。这听起来太棒了!真是太棒了!
不过现在说这些有点为时过早也毫无意义,在IPFS能取代HTTP之前还有很多的实际工作要做。目前最紧迫的任务不是畅想未来,而是要脚踏实地接受Internet Archive的挑战——实现分布式Web。