前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【计算机系统】IPFS · 文件币 · 分布式网络

【计算机系统】IPFS · 文件币 · 分布式网络

作者头像
ZifengHuang
发布2020-07-29 15:53:43
1.4K0
发布2020-07-29 15:53:43
举报
文章被收录于专栏:未竟东方白未竟东方白

这篇的主要内容是浅淡下IPFS(星际文件系统)和Filecoin(文件币),途中讲讲分布式网络有关的故事。之前有很多人由于区块链大火而加入这个乱局中,其中文件币(Filecoin)有一个虚拟货币的名称,依附于看起来高大上的IPFS项目,在一段时间内也曾售价大涨,成为备受期待的明星项目,但它实际又是怎么样的呢?

一.胡安·贝尼特与协议实验室

介绍IPFS和Filecoin之前,首先先来说说创造它们的人,Juan Benet(胡安·贝尼特)。

上图这个有些胖的年轻墨西哥程序员叫胡安·贝尼特,他在2010年于斯坦福计算机科学专业本科毕业,2012年斯坦福硕士毕业,主要做计算机网络方面的研究。

在世纪之交,也就是他读中学的时候正是P2P(点对点技术)如日中天的时候,BitTorrent和Skype的横空出世给网络生活带来了不小的风波。如其他人一样,P2P的优良特性也给他留下了深刻的印象。后来,大学时期对计算机网络的研究和比特币等虚拟货币与区块链技术的盛行让他心里渐渐有了些想法:想要利用P2P和区块链来做点什么。

2014年5月,在加州帕洛阿尔托市郊的一间小出租屋内,他终于创建了著名的协议实验室(Protocol Labs)。这个公司组织起一帮人专注于研究网络协议,至今为止创建了下图多个项目,而其中最出名的便是排于上方的IPFS和Filecoin,这就是创造IPFS和Filecoin的故事。

说完了胡安和协议实验室,那么IPFS和Filecoin具体是什么呢?

二.IPFS与Filecoin

IPFS,即星际文件系统(InterPlanetary File System),其实是一个互联网协议,也就是类似于常见的HTTP协议,FTP协议的东西。之所以胡安贝尼特要创造它,是因为他看到了HTTP的局限性,决定加入兴起的Git版本控制理念,然后在BitTorrent的基础上进行的整合创造出新的协议。而不同于BitTorrent是下载协议,作为文件储存协议的IPFS,它的诞生是为了取代HTTP。

而Filecoin,即文件币,简称FIL,上面说到了是和IPFS不同的项目,它是一种基于区块链技术的虚拟货币,本身则是一个分布式储存网络,旨在打造一个基于区块链系统的数据存储和检索方法,也用来证明分布式存储的可行性。它将作为IPFS的激励层,鼓励更多的人参与接受这个协议,最终推动IPFS的流行。一下子抛出这么多概念可能会有点复杂,后面的内容将会有所解答。目前需要知道的关键是:有的人将IPFS与"挖文件币"混为一谈,这是错误的想法,虽然文件币是为了IPFS而存在的,但是其实它是可以独立于IPFS存在的。

那么上面说到IPFS的目标是要取代我们每天都在使用的HTTP协议,可HTTP协议有什么缺点呢?为什么要取代它?怎么样才能取代它?IPFS提出了一个宏伟的想法,但高楼非一日建成,它的思想需要从它的前辈们一步步讲起。

三.HTTP的缺点

虽然HTTP协议我们每天都在使用,但是它明显不是完美无缺的。例如各位平日上网的时候,最讨厌可又最常遇到的问题是什么?是连接不上想要的服务器(server)和找不到资源吧。当主机在网络上访问信息时,也许是对面的服务器出现了故障,也许是中间的连线被阻断,也许是服务器上的这个资源已经被清除,甚至是当前过多人在访问导致服务器忙不过来,都可能出现这样的问题。

出现这样让人烦心的问题正是HTTP的缺点。HTTP协议导致了我们上网极度依赖于一个个中心化的服务器和连接客户端与服务器的主干网,一旦这两个环节某一个出问题就得不到我们想要的资源。而由于服务器端的储存空间限制,过时的资源很有可能被删去,而储存在单一的服务器上的资源一旦被删去,我们便不再有方便的方法能得到那些资源了。还有一个问题是由于服务器的承载能力有限,对多个客户端的请求分配效率可能很低下。

总结下HTTP的缺点我做成了下面这张图:

HTTP的这些缺点看起来都是难以解决的,可实际上仔细想想,问题很大程度上源于中心化思想,假如我们的上网协议是去中心化的,不再需要客户端们一起与一个服务器通信,问题大多都能迎刃而解,于是乎人们开始寻求构造分布式网络。

四.BT的改进

分布式网络也叫网状网络,即为了解决中心化可靠性低等问题,寻求通过复杂的网状结构极大增加寻找资源时的可用路径从而增加可用性。这并不是什么新奇的想法,在计算机发展的早期(1960)就有人提出过这种思想,但是当时计算机数量太少,实现分布式网络只会平白增大网络搭建的开销和资源的冗余,从而在当时被人抛弃。但是随着计算机的迅猛发展,全球的计算机数量不断增加,中心化网络逐渐无力应对时,人们重新想起了当年的分布式网络。

2000年,Jed.McCaleb和Sam.Yagan创立eDonkey(电驴,链接为eD2k),2001年4月,美国的程序员布莱姆·科亨于发布BitTorrent协议(简称BT,俗称比特洪流、BT下载),并于2001年7月2日时首次正式应用。P2P分享式网络突然兴起并不断扩大,似乎正要掀起一场分布式网络的革命。这场革命的方法是什么呢?这要说到BT的思路。

比起HTTP直观的想法,BT的思路要复杂一些。首先来介绍传统的BT下载,这是一个由用户群(peer),服务器(tracker)和种子(torrent)组成的网络。利用下面的图来了解过程:

从图中可以看到,BT相较于HTTP最大的变化便是下载资源不再依靠于单一的服务器,而是通过附近仍然拥有资源的活跃用户,将文件虚拟分块为2K的大小然后利用他人的上行带宽来下载,这样做就解决了中心化的缺点,不再受到主干网,服务器资源占用空间,服务器不能承受等等限制,上传到网络的资源慢慢扩散出去,一方面分散了最初分享者的上传压力,另一方面使得这些资源某种意义上在网络上永存。

虽然BT下载有很多优点,但是缺点仍然存在:一方面,从上面的图可以看到我们对资源的请求其实极度依赖于一个中心化的东西:torrent中带有的服务器(tracker)信息,因为我们需要利用这些小服务器所储存的活跃用户列表即路由表。当服务器被出问题时,例如常见的服务器由于BT对版权问题监管困难的原因而被封禁时,我们就无法再得到其他活跃用户的地址。另一方面,当一个资源的热度慢慢下滑,分享此资源的活跃用户可能越来越少,由于BT下载立足于其他用户的上行带宽,当用户群小到一定程度时,下载此资源就会十分缓慢且不稳定,随时有断链风险。

BT的这些缺点在后来都有了一定的解决,首先来说说第一个解决的问题:如何去除中心化的服务器(tracker),达到彻底的去中心化呢?

五.带DHT网络的BT

2005年的时候,电驴因版权问题败诉永久停止了开发,而BT则加入了对DHT网络的支持找到了新的方向。所谓DHT,全称分布式散列表(Distributed sloppy Hash Table),是一种分布式存储方法。它在不需要服务器的情况下,让每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个DHT网络的寻址和存储,在这里BT就是利用DHT来分布式储存了之前存于服务器的活跃用户列表,称为路由表。

在DHT-BT中,还增加了节点(node)这个概念,节点是是前面提到的用户群(peer)的加强,是遵守了这个新协议,承担了分布式储存路由表的用户群。再增加了一点,通过对每个文件进行hash,对每个节点也进行hash,接着通过在UDP的基础上应用Kad(emila)算法(异或)实现hash距离计算,从而将路由表分布式储存。

这么说还是很不清晰,关键的问题就是BT具体是怎么使用DHT来得到分布式储存的路由表从而得到想要的资源呢,下面我做了张图:

也就是说,DHT通过将文件和节点都进行hash,然后把文件储存在距离此文件hash最近(异或距离而非物理距离)的节点上,接着再类似之前BT的思路将此节点的信息广播出去,从而完成了分布式存储每个文件的路由表,只要在超时时间内不断询问附近节点是否知道距离文件距离更近的节点就必将能够找到活跃的节点(如果存在的话)。

通过这样的做法,资源下载才不再需要服务器来储存路由表,真正做到了去中心化,发布资源的主机在一开始运行一段时间将文件分散到网络中后便可以安心退出这个系统。这个思想成为了对抗服务器封禁或其他问题的最佳手段,催生了新一批P2P产物的诞生,例如大名鼎鼎的磁力连接magnet。

在下面的这张漂亮的动图中,节点们互相得到了资源的分块,并在网络中传播出去,单单靠着人与人之间的互助,资源似乎就在网络中得到了永存:

可现实哪里有那么美好,人与人哪里能自发的平等互助。前面说的BT的两个问题它只解决了一个,另一个问题更加棘手:当这个资源热度散去,如何才能增加参与者的积极性继续保留资源并提供上传呢?

六.PT等社区的诞生

PT,即Private Tracker(私有服务器),其诞生简直是人类本性的必然。前面我们知道,由于BT资源不再储存于中心化的服务器中,BT资源的下载必须依靠于其他拥有资源的人牺牲自己的上传带宽,BT资源的存活也需要尽可能多的人保证文件的储存,很明显这是一个当人们都做出利他举动时,整体系统可以得到最好发挥的情况,是一个近乎理想的分享环境。

但是人非圣贤,BT显然是个类似囚徒困境的情况。我们知道单次进行的囚徒困境在现实中是不稳定的,而网络下载由于资源是分块在不同peer处下载的,可以看做其实是与不同的人不断进行单次的囚徒困境,自然也是不稳定的。由于利己心理作祟,很多的用户只在BT中下载索取而不上传付出,想方设法限制上传速度,影响了越来越多的人开始思考自己是否有付出的必要,资源的下载越来越困难。

于是有一小帮人组织了起来,先是搭建了自己的私有种子服务器(PT),准备好流行的资源,接着制定了一个规则并写入软件中:此私有服务器会追踪每个人的上传下载流量,下载者需要支付积分来维持下载,积分需要通过贡献资源上传流量来获得。他们通过引入了积分这一类似于“劳动券”的概念,来激励这个小团体的BT生态,如果用现在流行的话来说积分规则就是BT的激励层。下面是百度百科上PT的

想来大家也会发现,PT实际上是一个非常脆弱的小范围"共识"。诚然PT解决了BT下载缺少激励的问题,但是PT的规则决定了它有以下几个致命缺点:1.社区围绕着中心私密服务器,一旦出问题这个好不容易建起的环境就会崩溃。2.为了保证PT服务器的安全,需要保证社区成员的纯正性,于是社区无法发展得很大。3.中心服务器负责着维护环境的公平,路由表不能流露到团体外,所以PT站全部都封锁了DHT功能。

于是看到这里就会发现:对传统的分布式网络BT的两大缺点的改进是相互矛盾的,且激励层PT与去中心化的DHT的矛盾似乎无法解决。这时候正好讲完了分布式网络的发展,想必看完的大家心里也能有一些新的想法了。一切连接到了梦开始的地方,可以接着说IPFS和新的激励层想法了。

七.IPFS与BitSwap策略

前面说了那么多,IPFS到底想怎么解决这些问题呢?答案是IPFS通过基于DHT-BT进行了一些改进,然后使用称为BitSwap的策略来作为激励层。欸?那文件币Filecoin呢?先来看看IPFS的改进细节。

大方面来说,IPFS不同于BT是个文件下载协议,为了替代HTTP,IPFS被设计为一个文件储存协议。因此IPFS先是加入了类似Git的版本控制系统,储存了文件的历史信息并保证其不可篡改,让一个文件可以在网络中找到其祖先。然后为了方便处理,IPFS将文件在分布式网络中以树状结构储存,并支持了域名系统,使得网络上储存类似网站的层次结构成为可能。由于树状结构储存,IPFS中所有的文件都在同一个根文件系统下,从任意一个开端都能利用前面说到的DHT网络找到其他的文件,为了安全,IPFS又将文件都自带进行了加密。最后IPFS为了保证系统的稳定性和效率,引入了称为BitSwap的策略,将所有分布式储存的文件都实际上进行了分块,也就是储存在IPFS的分布式网络上的文件都是分块过的,然后分好的小块进行了hash。也许一个大文件hash出来在网络上是独一无二的,但是分块得到的小块却有很大几率会和其他网络上的文件重复,极大降低了冗余。

详细点说,BitSwap下载资源时,还是类似BT,IPFS由一个个的节点组成,由于前面说到资源其实是分布式分块储存在DHT网络中,然后由树状结构链接的,那么每个节点下载时就需要拥有两个列表:已有分块表,需要分块表。当节点发生类似DHT-BT的资源搜索时,节点与节点间会通过这两个列表进行数据交换,加入两个节点都在下载状态,便会互相将各自需要的分块进行询问并获取,直到分块组成了整个资源。将文件实际分块虽然比起BT的虚拟分块会导致本地的空间冗余,但在数据交换中却大大加大了速度并降低了整个分布式网络的冗余。

下图是BitSwap将文件分块带来的效果,右图的BT下载由于是虚拟分块所以不能让不同的文件混合下载:

了解了数据交换方法后,IPFS看起来还只是个加强版的DHT-BT,激励层问题怎么办呢?IPFS的BitSwap策略中还包含了信用机制。这个机制类似于PT的积分制度,但是区别在于PT的积分表由中心服务器维护,而IPFS也让其分布式储存了。怎么做的呢?首先IPFS给每个节点都保存一个"信用账单",当两个节点交互时,传出的节点增加信用值,传入的节点减少信用,信用的记账将更新在节点的"信用账单"中,节点负债越多下载效率就越低。然后为了防止账单被篡改,每次节点下载前都会进行一次对账,只有发生交互的两个节点的账单相匹配时才会被承认,否则会清除账单并记录,而多次发生清除账单的节点将被拒绝。在这样的策略下,节点如果只付出而不贡献,你的负债会慢慢广为人知,由于是分布式的账单,也许一开始拒绝你的节点还不算多,但是随着你进行交互的节点越来越多,下载的效率就会越来越低。

这个信用机制用一种比较简单的方法解决了激励机制,但是显然还有很多缺点,最大的缺点就是信用账单是分散保存在网络中的,你对其他节点的贡献并不会被当前在交互的陌生节点承认,也就是节点只会记录与你发生过的交易。还有一点就是交互中的两个节点之间的需求本身就是不对等的,很多时候确实需要衡量全局贡献才能决定此节点的信用,所以接下来为了解决这个问题,协议实验室提出了Filecoin来作为全局的虚拟代币。

八.Filecoin的过程

Filecoin实际上就是一个全局的,适用于整个IPFS的资源交易市场。最开始的时候提到Filecoin与IPFS是互相独立的,没错,对IPFS思路的介绍到上面为止就结束了。协议实验室看到了区块链的火爆,但是失望于区块链工作量证明(PoW)(关于PoW和区块链,网上有很多很好的解释,例如https://www.zhihu.com/question/37290469/answer/107612456)的巨大能源消耗,又想到了IPFS缺少的激励层,于是提出了Filecoin。

Filecoin是一个资源交易市场,细分为存储市场和检索市场。

在检索市场中,用户通过向矿工支付文件币,然后矿工去寻找用户要求检索的资源,找到的资源若可以通过协议实验室正在设计中的“复制证明”(PoRep)和“时空证明”(PoST)进行证明,则代表交易成立,交易写入区块链矿工得到报酬。

在存储市场中,用户向矿工提出请求,询问哪位矿工愿意耗费自己本机的储存空间来保存文件,接收请求的矿工需要先向区块链系统提交押金,然后进行保存。在保存文件期间,系统会不断向所有矿工提出“复制证明”(PoRep)和“时空证明”(PoST),称为挑战。挑战本身是基于文件内容的,成功完成了这两个证明的矿工就完成了挑战,系统验证通过后就会认可这段交易,用户向刚才储存文件的矿工提交文件币,然后系统给完成了挑战的矿工奖励文件币,将这些结果写入区块链中。

以上就是文件币的运行过程,虽然证明所用的算法目前还没有被完成,但是看起来还蛮有用的吧。最终把储存文件的任务交给IPFS解决,文件交易交给Filecoin处理,协议实验室终于解决了最开始说的两个问题。

到此为止一切似乎很顺利,现实真的这么美好么?在我看来IPFS与Filecoin的未来却并不明朗。

九.IPFS与Filecoin的未来

协议实验室自从成立到现在已经快五年了,但是他们这两个最重要的项目只完成了IPFS。IPFS可以说已经是个比较成功的项目了,到现在为止推出了两年,也收获了一批用户,可是就目前来看,IPFS的知名度始终处于较低水平,远远无法与其前辈BT相比。前面花了那么长的篇幅让我们理解了分布式下载的原理,想来大家也能明白分布式的网络最重要的是需要大量的主机,只有参与者够多,网络上才能有足够的资源来下载和有足够的节点来加速下载。

可从下两图来看,仅仅看百度指数的数据,BT的热度却远远超越IPFS的热度,而单独看IPFS的话,IPFS的热度甚至还呈现一种下降趋势,看不到反超的机会。

而来看Filecoin,情况更不乐观。曾经备受期待的文件币Filecoin热度上远远比不上大哥比特币,呈现出类似与BT对比时的样子。

文件币分析起来,我认为和项目的进度过慢有关,储存证明确实很难实现。IPFS与文件币,在一开始提出的时候都是备受期待的,可是时间过去了那么久,文件币进行了两次融资卖币,却仍迟迟未能将协议确立下来,最近才勉强做出来一个简单的网站主页和开放了部分源代码。

目前为止文件币虽然在网上有交易信息,但在网上交易的都是文件币之前融资时得到的期货。即使是期货,也能在一定程度上反映出市场对文件币未来的期望,结果并不好看。本来随着现在人们对虚拟货币的热情褪去,渐渐冷淡的市场中大多数虚拟货币就已经在不断贬值,文件币的多次跳票更是不停打击着投资者的信心。最终从下图coinmarket的数据可以看到,即使是兑比特币的嫁个,文件币也从发布以来一路走低,图表中的几个回弹是文件币几次大新闻的时候,情况并不乐观。

曾经的明星项目,如今只能苟延残喘,不由得令人叹息。

十.后记

虽然最后说了很多不看好文件币的话,但是我心里还是希望这个项目可以成功的,第一次看到IPFS和Filecoin的想法时,我也觉得这是会颠覆世界的项目,只是时间长了才渐渐失望。也许文件币确实是个很难发展项目,也许在做出更大突破前IPFS就是敌不过老大哥BT,也许这两个项目永远无法成功,但是我还是在心里希望这两个项目能至少在人们的心里留下一点点印象,能让我们未来看到类似的产品,或者未来重新打量起BT和虚拟货币时可以稍微提一句这两个项目,因为不管它做的怎么样白白埋没都有些可惜了。而这也是我写这么长的文章的意义。

最后,上一篇结尾说到的拿课上演讲的内容来改成文章,想着资源利用嘛,但是这篇文章居然花费了远超我想象的时间,越写越长。这篇文章可能错漏百出,有问题希望在底部留言。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未竟东方白 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档