这次让我们来谈谈去中心化储存的方式, IPFS ,全名是星际文件系统,让我们来看看这种方式有什么特点。

在讲解IPFS 之前,让我们先来复习一下几个现有的文件传输协定,第一个是hyper text 也就是http 协议,这个协议本身是一个让你可以去读取网络上文件的协议,而读出来你再用特定的方式来显示他,这就是我们现在使用的web ,他依靠的是单一伺服器的内容,所以当伺服器挂了,你就无法读取该网站的内容,还有因为伺服器的地缘关系,很多时候你在很远的地方他读取的速度是相对很慢的。

另外一个是所谓的BT ,这个协议就有点像我们现在讲的IPFS ,他是一个共享的协议,当你发出一个文件的请求,有很多文件的节点就会去贡献他的文件,所以如果文件分享源离你很近的话,相对你拿到文件的速度是快的,而且当越多人在分享一个文件,你能够拿到文件的速度也会变快。

IPFS

IPFS是一个分散式的文件储存系统,他将每一台参与的电脑当成一个节点,储存在这上面的文件会使用杂凑技术变成content identifier —CID来代表这个文件,然后将这些文件拆成一个个小的文件,储藏在这个网络上的节点之上,当用户需要调阅这个文件的内容时,在使用P2P的方式去找到储藏有这个部分文件的节点,取出来进行读取。

分散

在这网络上,每一个文件都有一个独特的Content Identification,这个数字可以代表这个文件,让我们在寻找文件的时候不是因为这个文件在哪里,而是这个文件是什么。让整个查找的逻辑相对会比较直接,然后这个主文件又可以拆成很多小文件,而这些小文件储存在不同电脑里面,理论上,因为每个相同文件会有一样的号码,所以如果你的文件跟其他人是同一份,你们就可以共享这个内容,也不会有冗余文件的问题。

在软体架构上,跟其他的分散式储存一样,将整个文件分散成很多个部分,分散在不同部分去做储存,是很常见的。因为当我们在处理大型的文件的时候,如果你不把它分散出来,你可能会花很长一段时间再将这个文件从硬碟读出来,而读取硬碟其实是相当慢的。首先,你必须将文件读出来写入在记忆体里面,才可以由记忆体去显示出来。

反之,如果你将文件切割成很多的部分的时候,理论上你就可以平行的从不同电脑里面去读取这个文件,此时就像是在一个车站一样,当旅客可以从不同出口进出的时候,你就可以更快的将旅客疏散出来。例如,我们在跨年的时候,我们可以看到,捷运局会希望你可以从象山站,甚至永春站来进出捷运,这都是一样的道理,但如果大家都挤在市政府站,那么大家就要等很长一段时间才能够从101 疏散出来。

速度

因为分散的关系,你可能会采用离你比较近的节点,这个节点可以更快的去存取你要的资料,在传统的中心化架构里面,如果你是在美国的机房,因为距离的关系,当你必须要存取这个网页的时候,你可能必须要花比较长的时间来存取这个文件,所以我们有CDN 这个技术,他就是希望你能够针对内容在比较近的机房,进行内容的存取,但现在这个分散的技术,理想的状况,假设很多人进行分享的话,你可能可以从就近的电脑来存取别人分享的文件,这不就是最天然的CDN 吗

当然,这只是一种假设,实际上传输的速度还会跟你邻近的电脑他的网络频宽,以及电脑的设备,然后还有演算法的执行效率有关,毕竟CDN 是专门用来存取内容的, P2P 网络要在这方面占有优势其实还是挺难的,但如果cdn 也参与这部分的工作呢毕竟,以往的经验指出,大公司来染指这种open source的开发也是蛮常见的。

隐密性

当我们的文件散布在其他人的电脑的时候,我们会遇到一个问题:那就是我们不想让别人知道我们的文件内容是什么

现代人很注重隐私这件事情,那我们要如何把文件放在其他人的电脑里面,但又同时间不被对方所知道我们的资料呢毕竟,我们是把我们的资料放在一个公开的网络上。

我们可以透过加密的机制,他把你不想让别人知道的讯息,使用私钥去进行加密,当你有了这把私密的人,才能够将这个内容解锁,也就能知道这个讯息里面的内容。

结论:

储存是一门相当重要的工作,以现代的网络来说,几乎你所用到的每一个网页都需要储存,包含文件、声音、影片等。也就是说,你在使用网络的时候,你无时无刻都在跟储存的伺服器打交道, IPFS 所希望能做的就是打造一个更好去取得这些文件的方式,他希望能够让这些文件少一些控制,多一些分享,但历史上这样的专案很多都无疾而终,毕竟太理想化了,但是这次区块链的产业,在这个以自愿分享的土壤中,加上了代币的肥料,是不是能长出不一样的结果,让我们继续观察下去。