引子
在Filecoin(IPFS之上的激励层)的白皮书的开篇写道,互联网正处在一场革命中。这场革命体现在几个方面:
1. 中心化的专有服务正在被去中心化的开放服务所取代;
2. 基于实体保证的信任正被可验证的计算所取代;
3. 临时的基于位置的地址正被持久的基于内容的地址所取代;
4 低效率的寡头实体也正被基于点对点算法的分散市集所取代。
上面第1、2两点提到的就是区块链及其相关技术如何去中心化,去中介。第4点讲的是一直以来开源人士的愿景,在逐步的实现过程之中,而其中的第3点,内容的访问方式的变革,恰恰就是IPFS要实现的,是这一盘大棋中的重要一环。
在我的上一篇关于去中心化存储的文章中,我们讨论了去中心化存储是未来的一个趋势,而且也是区块链应用真正落地的重要条件。其中提到的一个关键技术就是IPFS(Interplanetary File System,星际文件系统),名字很大,野心也很大,是一个非常让人期待的项目。其实,它不仅仅是一个分布式存储系统,它真正的野心是要取代HTTP,实现一种去中心化的互联网方案。它通过点对点的分布式系统来实现高效的可为星际服务的共享平台。
IPFS的实现包含通信协议和分布式系统中的多项创新,这些创新组合在一起生成了一个文件系统。 因此,要理解IPFS试图实现的全面广度和深度,了解实现这一目标的突破性技术非常重要。
IPFS的宏伟目标
IPFS不只是一个文件系统,它的宏伟目标是取代现有的HTTP协议,构建新型的互联网。在讲具体的实现技术之前,有必要先简单介绍一下,IPFS通过什么方式去实现这么目标。最重要的,就是如何实现根据内容寻址,而不是根据地址来寻址。
IPFS通过散列函数为每个文件(数据对象)计算哈希值,文件相同,哈希值就相同,反之,文件内容不同,哈希值也不同。这个哈希值就是文件的标记,或者说是独一无二的指纹。当你访问文件时,不是使用文件的存储地址,而是直接使用这个哈希值
由于文件内容相同,哈希值相同,那么在整个网络中,十分容易定位两个文件是否一致,因此在网络存储时将被看成同样的文件。那么也就是说,没有必要另存一份。举个例子说,比如你很喜欢某一部苍老师的电影,你打算存一份在IPFS中,但其实这部电影已经有很多人存过了,那么存进去完全是重复的,IPFS就没有必要为你再存一份。只需直接告诉你存好了。
当你要取某个文件(如上面说到的电影),你直接使用文件的指纹(哈希值)进行访问,注意,这里没有任何地址,你也不需要知道服务器在哪里,谁为你服务,直接用哈希值就可以访问。这样一来,无论网络如何改变,文件被移到何处,你的寻址方式是不变的。这个绝对是革命性的。
当然哈希值的记忆不容易,本质上对你而言,他就是一长串无意义的字符,如何记忆呢?IPFS推出了文件域名服务,即IPNS,来把哈希值映射成相应的易记的名字
IPFS的另一个很重要的特性是版本管理,采用类似Git的技术,让你的文件版本可追溯,这样,你的源码,文件修改等完全可以放到IPFS中进行。
那么具体IPFS如何实现这一切呢?下面从通信协议和分布式系统谈起。
通信协议和分布式系统
如果两个人要交换信息,他们需要一套共同的规则来定义如何以及何时传递信息。这些规则就被称为通信协议,如果口语化一点,我们可以简单地称之为语言。当你和和你说不一样语言的人交流的时候,那么你可能会遇到失败(或缺乏)通信协议。计算机也是如此,当网络协议没有产生的时候,他们无法相互沟通,直到20世纪80年代早期,第一个计算通信协议发明后,计算机有了自己的通信方式。注意这里所说的与编程语言是两码事。
```编程语言是为了模式化的计算而传输协议为了更畅通的交流```
在计算机中,通信协议通常以协议套件的方式,包含不同的层次。例如,互联网协议套件由4层组成(按照ISO的定义,你也可以说是7层),每层都负责特定的功能。除了通信协议之外,计算机相互通信还需要实现这些通信的一些网络和系统组件,他们是网络互联的基本结构。这也被称为系统架构。与我们今天所讲的相关的一些概念包括:客户服务器模型,点到点网络等。
客户服务器(Client-Server)关系模型长期以来主导着互联网(Internet),这在互联网协议中也很明显地体现出来。比如说,超文本传输协议(HTTP),浏览器是客户端,你要访问的网路就是服务器端。而HTTP协议是互联网最基本的应用协议。
在这样的网络里,数据存储在服务商中心化的服务器中,并通过基于位置(路径)寻址的方式进行访问。在一个中心化的世界里,这样可以更轻松地分发,管理和保护数据,并易于扩展服务器和客户端的容量。然而,其在安全,隐私和效率领域存在许多弱点:服务提供商从对服务器的控制就是对数据的控制。这意味着1)您的数据可以通过任何一台有相应权限的服务器来访问,更改和删除;服务器被黑客攻击,掌控,也有可能被公司内部人员恶意操纵。在基于位置的寻址中,数据通过它所处的位置而不是其内容来标识。这种限制意味着即使有相同的数据在更近的服务器内,您也必须一直到指定的位置获取一段数据。也没有办法告诉您数据是否已经改变,因为您总是被告知到哪里去取数据,而不是说去什么样的数据。
有些奇怪,是吗?但是你已经习以为常了。计算机系统和网络系统一直都是这么做的,你要存取文件,你要给出地址,而不是直接给出内容即可,恰恰这就是IPFS最为创新之处。
客户端 - 服务器模型和HTTP在其大部分历史中都非常可靠地服务于互联网。这是因为HTTP网页对于移动文本和图像等小文件非常有效。在网络的头20年中,平均网页的大小仅从〜2千字节增加到〜2兆字节。
图片来源:http://www.websiteoptimization.com/
HTTP非常适合访问网站,加载网站数据,但它不适用于传输大量数据(如音频和视频文件)。 正是因为这些限制,Napster(音乐)和BitTorrent/迅雷(电影和几乎任何其他东西)等替代文件共享系统出现,并取得很大成功。
当我们快步迈进2018年,点播高清视频流和大数据变得无处不在; 我们正在继续产生和消费越来越多的数据,同时开发越来越强大的计算机来处理它们。 云计算的主要进步在助推这一转变,但分发所有这些数据的基础设施和技术却没有改变。
星际文件系统
通过采用已有的一些创新技术,IPFS致力于通过一个创造性的P2P文件共享系统解决客户端 - 服务器模型和HTTP网络的缺陷。 IPFS是Protocol Labs开发的一个开源项目,Protocol Labs其前身是Y Combinator初创公司的研发实验室。Protocol Labs还开发了IPLD和Filecoin 等协作系统,这将在下面进行进一步阐述。 世界各地的数百名开发人员为IPFS的发展作出了贡献,因此其协调工作一直是一项巨大的任务。 IPFS主要包含如下基本技术:
分布式哈希表
哈希表是一种将信息存储为键/值对的数据结构。 在分布式散列表(DHT, Distributed Hash table)中,数据分布在计算机网络中,并进行高效协调,以实现节点之间的高效访问和查找。
DHT的主要优势在于分散性(去中心化),容错性和可扩展性。 节点不需要中央节点协调,即使节点发生故障或离开网络,系统也能可靠运行,并且DHT可以扩展以容纳数百万个节点。 这些特性使得IPFS系统比客户机 - 服务器结构更具弹性。
块交换
Bittorrent是非常流行的文件共享系统(别告诉我说你不知道)。Bittorrent能够依靠创新的数据交换协议成功地协调数百万个节点之间的数据传输,但它仅限于文件的多点传输和共享。 IPFS实现了称为BitSwap协议的文件共享通用版本,该协议可用作任何类型数据共享的场合。 这在IPFS里被称为市集(Marketplace)。Filecoin是建立在IPFS上的点对点的存储市集,与IPFS一起构建整个生态系统
默克尔DAG
别搞混了默克尔树 (左)和 Merkle树(右)
这里讲的默克尔DAG实际上是Merkle树和有向无环图(Directed Acyclic Graph,DAG)的结合。 Merkle树确保在p2p网络上交换的数据块是正确的,未损坏的和未改变的。其实现通过使用加密散列函数和层次化地组织数据块来完成。通过逐层接受输入,计算哈希值,来产生唯一的字串。其叶节点是真正存储数据的节点,叶节点上数据的任何改变,都可以非常容易地通过Merkle树的各层散列值的变化轻易地找出来。当然,由于散列函数不可逆,不可能通过散列值去确定输入的具体内容。
DAG是一种模拟没有循环的信息的拓扑序列的方法。DAG的一个简单例子是家谱图。一个Merkle DAG基本上是这样的一个数据结构,和Merkle树一样,逐级求对数据和DAG中的对象一起求散列值。这种方式有以下几个特性:IPFS中的任何内容,都可以有唯一的散列值,这也就是数据唯一的标识。因为每个数据块都有一个唯一的标识(散列值),那么,数据是防篡改的,因为修改它会改变散列值,如下所示:
图片来源: ethereum.org
IPFS的中心原则就是对所有数据文件对应到一个统一的Merkle DAG上。这样的安全特性是无可比拟的。如果要与传统的客户服务器模型做对比的话,只要看看每年有多少网站被黑,比如一个例子,看看这个家伙如何在7分钟内入侵40个网站。
版本控制系统
Merkle DAG结构的另一个强大的特征是,你可以利用它建立一个分布式的版本控制系统(VCS)。最流行的例子就是GitHub,GitHub在版本控制方面已经占据主流,开发人员通过它能够轻松地进行项目合作。同时,文件在GitHub中存储和版本管理通过Merkle DAG进行。它允许用户独立复制和编辑一个文件的多个版本,存储这些版本,修改和在需要的时候和原始文件合并编辑。
IPFS对数据对象使用类似的模型:对应于原始数据对象的任何新版本都是可追溯的,可以检索整个文件历史记录。 鉴于数据块由本地存储至整个网络中,并且可以无限期地缓存,这意味着IPFS对象可以永久存储。
另外,IPFS不依赖于Internet上任何一种单独的协议。数据的分发可以通过嵌套网络协议进行,也就是说,可以利用现有网络,但也可以在此之上构建新的网络协议。这种网络协议的中立性质非常值得注意,因为有了这样的方案,你可以自己构建设置、选择和构建所要使用的网络协议,从而完全可以避开网络审查。 因此,IPFS可能成为促进言论自由以对抗全球互联网审查流行的有用工具,但同时,也可能存在被不良行为者滥用的可能性。
自认证的文件系统
这是本文中IPFS的最后一个重要组成部分:自认证文件系统(Self-certifying File System, SFS)。 它是一个分布式文件系统,不需要特殊的数据交换权限。 它是“自我认证”的,因为文件名就是文件内容的哈希值,内容被客户端加密。这样,你就可以像访问本地数据一样,安全地使用网络存储服务。
IPFS基于这个概念创建了InterPlanetary(星际)名称空间(IPNS)。 它是一个使用公钥密码体系来自我认证由网络用户发布的对象的SFS。 我们前面提到,IPFS上的所有对象都可以唯一标识,但这也可以扩展到节点。 网络上的每个节点都有一组公钥,私钥和节点ID,它们是公钥的散列。 因此,节点可以使用他们的私钥'签名'他们发布的任何数据对象,并且可以使用发件人的公钥来验证这些数据的真实性。
回顾和总结一下IPFS的主要组成部分
使用分布式散列表,节点可以在没有中心服务协调的情况下存储和共享数据
IPNS允许交换的数据被即时预先验证并使用公钥密码术进行验证
Merkle DAG支持唯一识别,防篡改和永久存储的数据
您可以通过版本控制系统访问以前版本的编辑数据
为何这一切如此重要
IPFS提供高吞吐量,低延迟,数据分布式存储。 它是去中心化,也十分安全。 这就打开了一扇门,使得很多有趣和令人兴奋的应用可以建立在其之上。 它可用于存储网站内容,全球化的数据共享和分布式存储,自动版本控制和文件备份管理,便于安全的文件共享和加密通信,等等。
下面是一些正在开发的,建立在IPFS上的一些项目:
Akasha, 下一代的社交网络
Balance3, 三方汇接的会计平台
BlockFreight, 开放的全球航运网络
Digix, 通证化的实物黄金交易平台
Infura, DApp基础设施平台
Livepeer, 去中心化的实时视频媒体平台
Origin, 共享经济的点对点市场
uPort, 一个自主主权的身份系统
这些应用的多样性证明了IPFS在多种不同应用场合中的普遍使用性。它也被用作公共区块链和其他P2P应用程序的补充文件系统。在我撰写这篇文章之时,在Ethereum智能合约中存储一千字节的数据需要花费几美元。 这成为目前正去中心化应用程序(DApps)大规模增长的主要障碍。 IPFS可与智能合约和区块链数据互操作,从而可以为以太坊生态系统增加可靠,低成本的存储容量。支持在IPFS上本地访问以太坊区块链数据的协议是IPLD(InterPlanetary Linked Data),它是一个独立协议,与IPFS一起为去中心化应用提供支撑。
挑战
尽管IPFS的愿景令人印象深刻,但目前仍有不少问题尚未完全解决。首先,IPNS上的内容寻址目前对用户而言不太方便。典型的IPNS链接如下所示:
ipfs.io/ipns/QmeQe5FTgMs8PNspzTQ3LRz1iMhdq9K34TQnsCP2jqt8wV/
可以使用域名系统(DNS)将这些链接缩短为更简单的名称,但这会引入内容分发的外部故障点。当然,内容仍然可以通过原始IPNS地址访问。一些用户还报告说,IPNS在解析域名方面速度可能会很慢,延迟时间可能高达几秒。目前尚不清楚这个问题的根源是什么。
在IPFS上,节点维护网络数据的长期备份的动力也不大。节点可以选择清除缓存的数据以节省空间,这意味着理论上,如果没有其他节点托管数据,文件可能随着时间的推移而“消失”。在目前的采用水平上,这不是一个重要问题,但从长远来看,备份大量数据需要有力的经济激励措施。
存储市场
提到IPFS的应用,Filecoin是必须提到的一个重要部分。Filecoin是一个单独的协议,旨在为IPFS上的文件存储增加经济激励,从而有能力培育与企业云存储(如Amazon S3,Google Drive等)相媲美的分布式存储市场。 IPFS + FileCoin不是采用固定定价的中心化的基础设施,而是在全球本地供应商或用户网络上提供存储,这些存储的提供者可以根据供需自由设定价格。 Filecoin使用Proof-of-Storage来确保安全性和可靠性,而不是像比特币这样的Proof-of-Work一致性算法。因此,任何人都可以加入网络,在其计算设备上提供未使用的硬盘空间,并获得用于数据存储和检索服务的Filecoin Token奖励。
目前,该网络正在Ethereum上开发,一旦可以付诸使用,与智能合约相结合,IPFS+Filecoin讲可以提供很多有意思的应用,比如:存储市场托管,保障等高级功能。从理论上讲,与大规模中心化的存储供应商相比,潜在成本更低、高度竞争的自由存储市场可以被开发出来。但是FileCoin目前还没有推出,所以拭目以待吧,观察这些概念在现实中的进一步发展和实现会很有趣。
开始入门之路
IPFS是一项雄心勃勃的计划,显然系统功能的精确机制比本文中描述的要复杂得多。 这里只是粗浅介绍,把那些复杂的知识和细节我们就留给密码学家和计算机大牛去细细品味,也许他们可以来点科普。 您不必成为使用IPFS的专家,管它内部如何,好用才是王道,因此,如果您感兴趣,请即可下载IPFS,从现在开始。 如果您拥有数个G或数个T的闲置存储空间,并且希望它们得到充分利用,那么您可以在网络启动时注册成为早期的Filecoin矿工。 如果您有兴趣成为早期存储用户,也可以注册。
IPFS已经可以试用,试试看,你会觉得它非常了不起,理解使其成为可能的技术更加令人兴奋。 如果成功,IPFS及其补充协议可为下一代网络提供更灵活的基础设施。我们的网络浏览将变得分布式,更安全,更灵活和自由。
主要参考资料
IPFS whitepaper (draft 3)
Filecoin whitepaper
A Beginner’s Guide to IPFS
关于去中心化存储的思考
区块链是关于信任的技术