IPFS,是时候该了解下了

什么是IPFS

  IPFS是一种内容可寻址、版本化、点对点超媒体的分布式存储、传输协议,目标是补充甚至取代过去半个多世纪里使用的超文本媒体传输协议(HTTP),但愿构建更快、更安全、更自由的互联网时代。node

IPFS能解决什么问题

  回顾下HTTP时代的网络请求,输入域名,请求DNS服务器,找到对应的IP,根据IP + uri找到目标服务器,目标服务器收到请求后处理,而后按照原路径返回,那么这个过程可能会遇到哪些问题了:git

  • 效率低,成本高。使用HTTP协议每次须要从中心化的服务器下载完整的文件(网页, 视频, 图片等), 速度慢, 效率低. 若是改用P2P的方式下载, 能够节省近60%的带宽. P2P将文件分割为小的块, 从多个服务器同时下载, 速度很是快.
  • Web文件被删除、服务器关闭。回想一下是否是常常你收藏的某个页面, 在使用的时候浏览器返回404(没法找到页面), http的页面平均生存周期大约只有100天. Web文件常常被删除(因为存储成本过高), 没法永久保存. IPFS提供了文件的历史版本回溯功能(就像git版本控制工具同样), 能够很容易的查看文件的历史版本, 数据能够获得永久保存
  • 中心化限制。咱们的现有互联网是一个高度中心化的网络. 互联网是人类的伟大发明, 也是科技创新的加速器. 各类管制将对这互联网的功能形成威胁, 例如: 互联网封锁, 管制, 监控等等. 这些都源于互联网的中心化.而分布式的IPFS能够克服这些web的缺点.
  • 高度依赖主干网。主干网受制于诸多因素的影响, 战争, 天然灾害, 互联网管制, 中心化服务器宕机等等, 均可能是咱们的互联网应用中断服务. IPFS能够是互联网应用极大的下降互联网应用对主干网的依赖.

这些问题正是当前HTTP没法根治的,而IPFS却能很好的解决。web

IPFS的优点

  IPFS不只仅是为了加速web,而是为了最终取代HTTP协议,针对上述HTTP面临的问题,IPFS提出了各类解决方案算法

  • IPFS是一个文件系统,定义了基于内容的寻址文件系统
  • IPFS天生就是一个CDN,文件添加到IPFS网络,使用分布式哈希、p2p传输、版本管理系统,将会在全世界进行CDN加速
  • IPFS是一个web协议,能够像http那样查看互联网页面,将来浏览器能够直接支持 ipfs:/ 或者 fs:/ 协议
  • IPFS是模块化的协议,链接层:经过其余任何网络协议链接;路由层:寻找定位文件所在位置;数据块交换:采用BitTorrent技术
  • IPFS是一个p2p系统,分布式网络结构,没有单点失效问题
  • IPFS拥有命名服务IPNS:基于SFS(自认证系统)命名体系,能够和现有域名系统绑定

IPFS架构设计

IPFS至少有八层子协议栈,从上至下为身份、网络、路由、交换、对象、文件、命名、应用,每一个协议栈各司其职,又互相搭配。编程

  身份层和路由层能够一块儿解释。对等节点身份信息的生成以及路由规则是经过Kademlia协议生成制定,KAD协议实质是构建了一个分布式松散Hash表,简称DHT,每一个加入这个DHT网络的人都要生成本身的身份信息,而后才能经过这个身份信息去负责存储这个网络里的资源信息和其余成员的联系信息。如同微信名片分享,在没法经过直接搜索微信号的状况下,若是你要找一我的,能够经过有这我的联系方式的朋友分享名片来创建联系。segmentfault

 网络层比较核心,使用的LibP2P能够支持任意传输层协议。NAT技术能让内网中的设备共用同一个外网IP,咱们都体验过的家庭路由器就是这个原理。浏览器

  交换层,是相似迅雷这样的BT工具。迅雷实际上是模拟了P2P网络,并建立中心服务器,当服务器登记用户请求资源时,让请求一样资源的用户造成一个小集群swarm,在这里分享数据。这种方式有弊端,一位服务器是由迅雷统一维护,若是出现了故障、宕机时,下载操做没法进行。缓存

  中心化服务还能够限制一些下载请求,人们发明了一种更聪明的方式就是Bittorrent,让每个种子节点所要存储的数据,经过哈希表存储在里面,BT工具相对不太受监管,服务更加稳定。安全

  IPFS团队把BitTorrent进行了创新,叫做Bitswap,它增长了信用和账单体系来激励节点去分享,我推断FileCoin有很大几率是基于Bitswap,用户在Bitswap里增长数据会增长信用分,分享得越多信用分越高。若是用户只去检索数据而不存数据,信用分会愈来愈低,其它节点会在嵌入链接时优先选择信用分高的。服务器

  这一设计能够解决女巫攻击,信用分不可能靠机器刷去提升,一直刷检索请求,信用分越刷越低。请求次数和存储量的变量之间有一个比较精妙的算法,相似一个抛物线,前期能够容忍不少东西,达到必定次数后再也不信任。

  对象层和文件层适合结合来谈,它们管理的是IPFS上80%的数据结构,大部分数据对象都是以MerkleDag的结构存在,这为内容寻址和去重提供了便利。文件层是一个新的数据结构,和DAG并列,采用Git同样的数据结构来支持版本快照。

  命名层具备自我验证的特性(当其余用户获取该对象时,使用指纹公钥进行验签,即验证所用的公钥是否与NodeId匹配,这验证了用户发布对象的真实性,同时也获取到了可变状态),而且加入了IPNS这个巧妙的设计来使得加密后的DAG对象名可定义,加强可阅读性。

  最后是应用层,IPFS核心价值就在于上面运行的应用程序,咱们能够利用它相似CDN的功能,在成本很低的带宽下,去得到想要的数据,从而提高整个应用程序的效率。

基于IPFS的项目

  IPFS的团队在开发时,采用高度模块集成化的方式,像搭积木同样去开发整个项目。协议实验室团队2015年创立,到17年的时间里都在作IPLD、LibP2P、Multiformats这三个模块的开发,它们服务于IPFS底层。
  Mutiformats是一系列hash加密算法和自描述方式(从值上就能够知道值是如何生成)的集合,它具备SHA1SHA256 SHA512Blake3B等6种主流的加密方式,用以加密和描述nodeID以及指纹数据的生成。
  LibP2P是IPFS核心中的核心,面对各式各样的传输层协议以及复杂的网络设备,它能够帮助开发者迅速创建一个可用P2P网络层,快速且节约成本,这也是为何IPFS技术被众多区块链项目青睐的原因。
  IPLD实际上是一个转换中间件,将现有的异构数据结构统一成一种格式,方便不一样系统之间的数据交换和互操做。如今IPLD支持的数据结构,是比特币、以太坊的区块数据,也支持IPFS和IPLD。这也是IPFS为何受到区块链系统欢迎的缘由之二,它的IPLD中间件能够把不一样的区块结构统一成一个标准进行传递,为开发者提供了成功性比较高的标准,不用担忧性能、稳定和bug。
  IPFS应用了这几个模块的功能,集成为一种容器化的应用程序,运行在独立节点上,以Web服务的形式,供你们使用访问。
  最后是Filecoin,Filecoin是创建在IPFS基础上的一条公链,旨在创立一个分布式的储存市场,帮助IPFS激励用户利用多余的空间存储链上信息,维系IPFS生态的正常运行与发展。Filecoin激励用户出租本身的闲置硬盘、磁盘等存储空间,用于接收链内存储信息,防止部分节点下线或破坏致使文件不可用问题。出租了本身存储空间的用户便成为矿工,只需链接到 Filecoin 网络,而后等着协议来处理文件传输和交易就行。矿工贡献的存储空间越大,得到的Filecoin(FIL)就越多。固然,客户也能够经过花费Filecoin来雇佣矿工来存储或分发数据。

IPFS的应用意义

  第一,能够为内容创做带来必定的自由。Akasha是一个典型的应用,它是一个基于以太坊和IPFS的社交博客创做平台,用户创做的博客内容经过一个IPFS网络进行发布,而非中心服务器。同时,用户和以太坊钱包帐户进行绑定,用户能够对优质内容进行ETH打赏,内容创做者能以此赚取ETH,如同人脑挖矿同样。它没有太多监管的限制,也没有中间商抽成,内容收益直接归创做者全部。
  第二,能够下降存储和带宽成本。我以前也举过爱奇艺的例子,而作视频比较成功的项目叫「Dtube」。它是一个搭建在Steemit上的去中心化视频播放平台,其用户上传的视频文件都通过IPFS协议进行存储,具备惟一标识。相较于传统视频网站,它下降了同资源冗余程度,同时大大节约了海量用户在播放视频时所产生的带宽成本。
  第三个,能够与区块链完美结合。区块链的本质是分布式帐本,自己的瓶颈之一就是帐本的存储能力,目前大部分公链的最大问题是无法存储大量的超媒体数据在本身的链上。比特币至今所有的区块数据也才30-40G左右,以太坊这样可编程的区块链项目也只能执行和存储小段合约代码,DApp想发展成超级App,受到了极大的限制。运用IPFS技术解决存储瓶颈是目前来看的过渡方案,最典型的应用就是EOS。EOS引觉得傲的是能够支持百万级别TPS的并发量,其中除了DPOS共识机制的功劳以外,还归功于其底层存储设计是采起IPFS来解决大型数据的传输效率。EOS将本身打包好的区块数据经过IPLD进行异构处理,统一成一种便于内容寻址的数据结构类型,并挂载到IPFS的link上,让IPFS网络承担存储和P2P检索的逻辑,而不消耗EOS区块链系统自己太多的计算资源。
  第四,能够为传统应用提供分布式缓存方案。 IPFS-GEO,它是一个为传统LBS应用提供分布式缓存的项目,能够将地理位置坐标数据经过GeoHash算法转化成一维字符串,并将与之相关联的具备检索价值的数据存入IPFS网络,由IPFS网络标识惟一性,并分布在各个邻近节点上。当检索请求到来时,系统先经过字符串近似度范围比较,缩小检索范围,加快检索效率,经过NodeID从附近节点拿到超媒体数据,达到相似分布式缓存的效果,大大提升了LBS应用整个检索动做的效率。

IPFS的缺陷

  信息不可撤销、不可篡改是IPFS的优势,也是缺点。若是是一个内容错误,须要更新的文件,那么不可撤销、不可更改将会成为一个很麻烦的事情。对此,IPFS给出的对应措施是:能够将修改以后的文件上传至IPFS,IPFS也会对文件进行更新,在IPFS内可搜索到文件更新的全部历史纪录。
  IPFS将大文件分别存放于不一样的块中,也不可避免的有一个隐患,即:若是一部分存放文件的节点通通下线不可用了,而且该文件没有备份,那么整个文件都是不可用的。对此,有两种解决方案,一是激励更多的节点去存储这个信息,二是积极分发文件,使得更多节点存储这个信息。



欢迎订阅「K叔区块链」 - 专一于区块链技术学习

博客地址: http://www.jouypub.com
简书主页: https://www.jianshu.com/u/756c9c8ae984
segmentfault主页: https://segmentfault.com/blog/jouypub
腾讯云主页: https://cloud.tencent.com/developer/column/72548
相关文章
相关标签/搜索