飞利信大数据技术与区块链研究院 | 什么是IPFS

互联网改变了人类生活的方方面面,但互联网不是完美的,其缺陷在规模化过程中越来越明显。IPFS协议和区块链技术正被委以重任,试图以分布式的网络结构和全新的激励机制,来改变现有中心化、高成本、低效率、不够安全可靠的互联网。

1

传统互联网存在的弊端

我们的现有互联网(web)是一个高度中心化的网络。互联网是人类的伟大发明,也是科技创新的加速器。当前的互联网是建立在HTTP协议上的,HTTP协议是个伟大的发明,让我们的互联网得以快速发展。但是互联网发展到了今天,HTTP逐渐呈现出了不足。

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是互联网数据通信的基础,我们访问的任何网站通常都是通过HTTP。我们的计算机向托管网站的服务器发送请求,服务器发回响应,例如我们要在网上找一张猫的照片,而服务器上运行着一个文件http://website.com/cat.jpg,遵照HTTP协议,浏览器首先会查找服务器的位置(IP地址),随后向服务器索要文件的路径。

在这里我还是要推荐下我自己建的大数据学习交流裙:667367234, 裙 里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据开发相关的),包括我自己整理的一份2018最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴
 

这种体系下文件的位置取决于服务器管理者,这种协议因此具有超中心化特性,但中心化也限制了web的成长。

首先,互联网需要依赖服务器进行运转,网站、APP等互联网应用,皆存储在服务器之中,一旦服务器损坏、连接中断,或是存储在服务其中的应用和文件丢失、位置移动、损坏,用户便无法访问。

另外,使用HTTP协议每次需要从中心化的服务器下载完整的文件(网页、视频、图片等),一次仅能从一台服务器上下载一个文件,速度慢,效率低。

超中心化的web存在的第三个缺陷,是数据的冗余和无法永久储存。为了防止服务器被自然风险、黑客等外力破坏,互联网运营公司需要对数据进行多重备份,因此企业的运营成本无形中增高。此外数据也没办法被永久储存,数据会被定期清理,这造成了许多历史信息和数据资产的永久丢失。

为节省运营成本,如今小型互联网公司通常会租用大型互联网企业的服务器,这进一步推进互联网的中心化,这为我们的信息安全带来极大的风险。国外某些政府权力机构,通过对中心节点的控制,实现对整个互联网的封锁、管制、监控等等,对用户使用互联网的功能造成威胁。此外,黑客利用系统漏洞或人为因素,通过中心化的服务器对用户私人信息进行窥探、牟利等,此种情形也屡见不鲜。因此,将网络安全托付给大型互联网公司,互联网内容长久范围内的可靠性将面临极大考验。

图: 2017年土耳其政府以“threat to national security”为由屏蔽境内维基百科网站

2

IPFS的愿景

IPFS(interplanetary file system),中文名为星际文件系统,是一种内容可寻址、版本化、点对点超媒体的分布式存储、传输协议,目标是补充甚至取代过去20年里使用的超文本媒体传输协议(HTTP),希望构建更快、更安全、更自由的互联网时代。

IPFS将所有具有相同文件系统的计算设备连接在一起。其原理是用基于内容的地址替代基于域名的地址,也就是用户寻找的不是某个地址而是储存在某个地方的内容,不需要验证发送者的身份,而只需要验证内容的哈希值,通过这样可以让网页的速度更快、更安全、更健壮、更持久。有一种说法认为,如果IPFS完全取代HTTP,那么此后,人类历史将会被永久保存,且不会被篡改。

3

IPFS的不同之处

HTTP协议使用的域名寻址,最终映射到最底层,找到某个域名所对应的IP地址下的某个主机,以及某个文件目录的某个文件,它不关心是否存在相同的文件。

相较于HTTP协议,用户使用IPFS不用关心服务器的位置,不用考虑文件存储的名字和路径。使用IPFS我们查找的是内容,是基于文件内容进行寻址。IPFS从根本上改变了查找的方式,这是它最重要的特征。

我们将一个文件放到IPFS系统中,会得到根据内容计算出的加密哈希值。哈希值直接反映文件的内容,哪怕只修改1字节,哈希值也会完全不同。当使用IPFS访问一个文件的哈希值时,它会使用一个分布式哈希表找到文件实际存储节点,下载文件并校对文件Hash。由于每个文件的哈希值全网唯一,查询(访问)将很容易进行。如果被存储过,直接从其它节点读取它,不需要重复存储,一定意义上节约了空间。

4

如何访问IPFS

如上所述,IPFS会把存储文件,做一次哈希计算,只字不差的两个文件其哈希值必然相同。所以,用户只需要使用相同的哈希值,就可以访问那个文件,这个哈希值就是文件的地址。只要获取这个地址,就可以共享资源了。

因此,IPFS的做法只关注文件中可能出现的内容。比如,我们把照片文件cat.jpg放到IPFS节点,它会得到一个新名字Qjhash23jhJhjhf56j65h,这是一个由文件内容计算出的加密哈希值。当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。

如果仅仅使用哈希值来区分文件的话,会给传播造成困难,因为哈希值不容易记忆,就像ip地址一样不容易记忆,于是人类便发明了域名。与之类似,IPFS使用一个叫IPNS的分布式命名系统,将难于记忆的数据哈希值映射为易于记忆的字符串。这可以类比于域名与IP地址的映射关系。

举个具体场景的例子,假设我想要看《碟中谍6》这部电影,A同学之前下载过这部电影,他启动了IPFS节点,将这个视频文件加入了IPFS网络。他会得到一个哈希指纹b,同时发布到公共网关,通过IPNS映射得到了一个/IPFS/b的路径名。

他把哈希指纹和路径名都告诉我,我要做的事情是启动一个本地节点,对该网关发一个寻址PIN的请求,IPFS自动索引分布式哈希表的哈希值,找到指纹b所对应的节点列表。

大的视频通常不会都存在一个节点,可能分片存在其它一些子节点上,IPFS把这些节点列表全部并行抓取,最后由本地的manager拼成完整的文件。

因为并行的速度远远大于直接下载完整文件的速度,下载速度将不再受制于服务器的带宽,而主要取决用户的下载带宽,访问速度自然比中心化的HTTP模式下更快。

我很快就能在本地支持IPFS的浏览器上看到电影,还可以继续分享给其他人。也就是通过这样的方式,实现了整个网络的文件利用达到最优效率。

5

IPFS如何储存和分享文件

在IPFS中,信息可以存储进IPFS系统中的对象(块)里,这些块可以存储至多256kb的数据,它们还可以链接其他IPFS对象。

也就是说,存储小于256kb的文件时,只需将这个文件放进一个对象内就可以了。而大于256kb的文件会被分成多个256kb然后放进对象中,之后IPFS将创建一个空对象,该对象将链接到文件的所有其他部分。这个空块就类似于一个大信封,里面会涵盖整个文件的所有部分。

系统会给同一个文件的每一个块计算一次哈希值a,所有对象的哈希值a计算完毕之后,会将所有的哈希值a拼凑成一个数组b,再计算一次哈希值,从而得到最终的哈希值c。最后把最终的哈希值c和原文件捆绑起来,组成一个对象,从而形成一个索引结构d。把块和最终的索引结构d上传至IPFS节点,文件便同步到网络了。

关于文件的更新。IPFS在整个网络范围内去掉重复的文件,并且为文件建立版本管理,也就是说每一个文件的变更历史都将被记录。相同数据内容被赋予唯一的哈希指纹,通过哈希指纹的对比即可判断数据块是否一致。节点本身使用类似git的版本控制系统,来管理本地文件与数据块。这既保证了数据块的去冗余,又提供了可追溯的历史版本。

早期的分布式哈希表曾遭受过女巫攻击,但是已经有一些新的方案来实现,这就是基于区块链的改进技术。IPFS的网络上运行着一条区块链,即用来存储互联网文件的哈希值表,每次有网络访问,即要在链上查询该内容(文件)的地址。

在这里我还是要推荐下我自己建的大数据学习交流裙:667367234, 裙 里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据开发相关的),包括我自己整理的一份2018最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴
 

因此,IPFS和区块链能够完美结合,用户可以使用IPFS来处理大量数据,然后把对应的加密哈希存储到区块链中并打上时间戳。这样就无需将数据本身放在链上,不但可以节省区块链的网络带宽,还可以对其进行有效保护。

关于个人文件加密。如果上传的照片如果没有加密,那么默认所有人都可以查看,前提是对方需要拥有文件的哈希值,这跟你使用百度网盘共享后发过去是一样的。如果文件需要保密,在存入IPFS之前对文件进行加密即可,这样即便是别人拥有了文件哈希,还需要私钥来查查看数据。

6

IPFS可能存在的问题

通过上述介绍可以看到,和HTTP世界里文件通常储存在单一服务器不同的是,IPFS对文件的存储是去中心化的,同一份文件会存储在多个节点中。对于大一点的文件,IPFS会自动讲将文件拆成小块,分别存储,用户在获取这份文件时,就能同时访问多个节点来提高访问速度,扮演了分布式CDN(Content Delivery Network,即内容分发网络)的角色。

听起来很完美,但IPFS系统不是没有局限和缺点的,其面临的最大的问题就是如何保证文件永久在线可用。网络上的节点都会保存他们下载过和提供出来分享给别人的文件缓存。但并不是每个人都保存全部的文件。假设当特定的文件是有n个节点托管的,那么一旦这些节点全部离线,文件也就变的不可用,因为没有额外的副本能提供出来,就像是BitTorrent群没有了种子。这种困境该如何解决?

7

针对问题的解决方案:Filecoin

分布式存储就意味着需要在全球都有足够多的节点,上面提出的问题,实际就是如何才能让这些节点愿意贡献自己的硬盘和带宽。这当然少不了一套合理的奖励机制,此时就需要Filecoin出场了。

Filecoin是由Protocol Labs(协议实验室)开发的IPFS区块链项目衍生的虚拟币。Filecoin和IPFS协议都是由该实验室开发和维护。通过使用代币(FileCoin)的激励作用,让各节点有动力去存储数据。按照各节点的贡献大小,它们会获得相应数量的Filecoin作为奖励,即矿工(存储资源贡献者)通过为网络提供开放的硬盘空间获得Filecoin,其他用户想在IPFS里存储文件时,也需要支付Filecoin作为成本。

Filecoin的矿工分为两种:存储矿工和检索矿工。检索矿工对于带宽和性能要求较高,而存储矿工则是大家都可以参与的,所以我们平时所说的挖矿通常指的是Filecoin的存储矿工。

存储矿工的挖矿行为可以理解为是共享出自己的硬盘资源并获得酬劳。当有用户提出存储需求时,用户需要支付代币作为存储的酬劳。然后,系统会把一个订单拆分成很多的小订单,矿工们自动进行抢单,谁的存储空间符合,且距离更近,传输速度更快,谁就更有可能抢到一部分存储订单。抢到后,矿工需要用代币进行抵押,以确保自己能够完成存储任务,如果最终顺利完成,抵押的代币将会退回,同时获得这个订单的相应酬劳。如果执行过程中出现错误,系统将扣除矿工的抵押代币作为处罚。

通过Filecoin的奖励机制,IPFS激励公众参与进来贡献出自己的存储资源。这就在全球范围内极大的增加了网络的节点数量,让整个分布式存储网络变成了一个巨大的存储空间。在整套机制的配合下,IPFS在跟HTTP的竞争中拥有了更强的发展优势。

8

IPFS的应用

IPFS的创始人Juan Benet在IPFS技术白皮书中假设了一些IPFS的使用场景:

◆  在 /ipfs 和 /ipns 下挂载全球文件系统

◆  挂载的个人同步文件夹,拥有版本功能

◆  文件加密,数据共享系统

◆  可用于所有软件的带版本的包管理器

◆  可以作为虚拟机的根文件系统

◆  作为VM的启动文件系统 (在管理程序下)

◆  可以作为数据库:应用可以直接操作 Merkle DAG,拥有 IPFS 提供的版本化、缓存以及分布式特性

◆  可以做(加密)通讯平台

◆  各种类型的 CDN(包括完整性检查、加密及web CDN等)

◆  永久的 Web,不存在不能访问的链接

国外已经有较为成熟的应用案例,如基于IPFS的视频网站DTube。

先介绍下DTube的诞生背景。在某种程度上,超大型媒体社交网站,如YouTube 、 Facebook等正失去民心,这些网站在广告客户的压力之下而不得不对较为敏感的视频进行审查、监管,用户数据的泄露和非法利用也充分暴露了中心化网站所无法回避的风险问题。

有人认为,隐私问题、审查制度等,将把大量用户推向其它“非主流”平台的怀抱。以视频网站而论,越来越多的内容创造者在被YouTube监管审查的同时,转向 DTube 等网站以避免受到限制,已经成为一种新的潮流。

DTube是一个完全用JavaScript编写的应用程序,它在浏览器中运行,允许用户在IPFS网络上上传和观看视频。在DTube平台上视频文件经过IPFS协议进行存储。

打开 https://d.tube 网站后,可以看到首页已经有很多的视频分享,有热门短片,潮流短片等等。视频下面有个美元 $ 的符号,跟 Steemit(一家基于区块链技术搭建的社交网络)一样是分享内容获得点赞的收益(平台自身发布的代币)

实际上,到目前为止,已经有非常多的项目采用了IPFS来进行开发。比如

◆  ipfs.pics ,免费的永久图床,上传和分享你的图片。

◆  Orbit Chat ,基于IPFS的去中心化聊天室,用户可以自由创建和加入channel并参与讨论。

◆  Neocities ,免费帮助人们创作和发布网页的组织,将用户上传的网页永久存储在IPFS网络中,即使Neocities关闭了,人们仍然可以在IPFS网络中浏览到这些创作。

◆  AKASHA,基于IPFS和以太坊的下一代社交博客平台。

◆  git-ipfs-rehost ,将你的git仓库托管在IPFS网络上。

◆  Global Upload ,文件传输服务 IPFS SEARCH - 搜索IPFS网络中的内容。

9

结语

IPFS(Filecoin)在2017年8月份创纪录地募集到了2.5亿美金。其创始人Juan Benet毕业于斯坦福,在2015年参与了大名鼎鼎的YCombinator计划,并成功地创立了Protocol Labs实验室。到目前为止,Protocol Labs实验室已经拥有上百位代码贡献者和14位核心开发人员。IPFS的开发进度非常好,到目前为止已经发布了近30个版本的迭代。

区块链技术的出现让分布式网络的设计成为了可能。区块链并不是万能的,反而区块链是一种低效且昂贵的存储数据的方式。IPFS的精妙之处是它把分布式账本可以被放置于IPFS之上,这个分布式账本只是记录了网络里各个文件的哈希值。

引用Benet的原话:如果你把它(分布式账本)加到IPFS里,然后通过哈希算法把它录入区块里,那么你就可以通过IPFS直接在网上浏览交易以及文件。IPFS协议与区块链技术结合是个“完美的婚姻”。”

IPFS提供了去中心化的存储,而且从2015年上线以来,没有出过什么大问题,这是非常有价值的。IPFS同样改变了区块链挖矿的方式。今天很多人想挖矿,都是买矿机,消耗算力去挖矿。这种挖矿其实唯一带来的就是大量的浪费。去年光是挖矿消耗的电力就超过了世界上一百多个国家的整个国家消耗电力。而IPFS+Filecoin更像是一个激励大家贡献存储能力的挖矿模式,用贡献资源的方式来挖矿,更像是共享经济的概念。因此也有人将IPFS称之为“滴滴硬盘”。

需要提醒的是,Filecoin主网至今还没上线。Filecoin主网的上线,主要意义在于助推IPFS技术的普及。根据Filecoin团队今年8月发布的报告,今年四季度或2019年一季度将上线测试网络,2019年二、三季度将根据测试网络运行情况上线主网。

关注微信公众号:程序员交流互动平台!获取资料学习!

猜你喜欢

转载自blog.csdn.net/cryacq2798/article/details/84672491