做SDS存储的都知道,现在IPFS挖矿项目很多。IPFS挖矿对存储的需求很大,因此经常有朋友和我探讨关于IPFS存储的选型问题。今天,我们就来深入讨论一下这块内容,大家可以根据自己的想法谈谈自己的理解。
IPFS对存储的需求
IPFS指星际文件系统(InterPlanetary File System)。IPFS是一个分布式的Web,点到点超媒体协议。可以让我们的互联网速度更快,更加安全,并且更加开放。IPFS协议的目标是取代传统的互联网协议HTTP。
IPFS引入Filecoin作为存储之上激励层,也就是Filecoin矿工存储数据的同时,会得到一部分Fil虚拟币收益。Filecoin与其他区块链项目有相似之处但也有不同,不同点主要体现在以下几个方面:
质押:Filecoin矿工在进行数据存储之前,需要提交一定的质押币,因为涉及到数据的完整性和安全性,所以官方对参与者设置了一定的门槛。如果出现错误,如存储系统无法访问,或数据丢失等情况,则可能不仅拿不到收益,还会把质押的Fil币全部扣除。
时空证明:与其他区块链项目不同的是,Filecoin使用PoSt(时空证明)作为共识算法。顾名思义,时空证明主要目的是证明数据在一段时间内占用存储系统的一部分空间。
时空证明的生成过程中,需要访问底层存储系统,所以存储系统的性能和稳定性就跟时空证明的正确性密切相关。如果IPFS/Filecoin参与者可以遵照规则提供稳定的时空证明,则参与者所获得收益也会随着存储数据量的增加而水涨船高。
惩罚机制:Filecoin的惩罚机制比较复杂,同时也很严格,如果频繁出现失误,那就得不偿失了。跟存储相关的惩罚主要有下面几种:
A、时空证明出错
时空证明出错包括很多种情况,常见的如已封装的数据丢失或数据出错,会导致时空证明出错。而出错将会导致罚币。
B、未提交时空证明
如果Filecoin矿工不仅没有在一个证明周期内提交证明,而且延迟的时间甚至超过了生成攻击阈值,则会被系统认为证明没有提交。
C、违背合作
如果由于存储服务不可用,或存储系统故障导致矿工未能按照合约在规定时间内完整且安全的存储用户数据,则用户可以马上报告给主网。在确认情况属实后,将会对矿工进行处罚,扣除矿工的质押币和其后的挖矿收益。
IPFS后端存储选择
通过上面分析可以看出,IPFS对数据存储的安全性和完整性具有非常高的要求,所以怎么选择存储,就变得非常重要。我们主要从三个维度来谈IPFS对存储方案的选择。
传统NAS or分布式:对于传统NAS来说,元数据和数据使用本地存储,无法扩展,不具备高可用,同时受限于存储空间和性能,实际可保存的文件数有限,一般小于1亿,存储空间也为TB级别。分布式存储系统中,数据采用分布式架构,可扩展,具备高可用;一般情况下单命名空间中,文件数可支持百亿,容量也支持百PB到EB级别。
在IPFS场景中,传统NAS会有一定的用武之地,但分布式存储一定是趋势。分布式系统带来的高可用和容错,是非常契合IPFS底层存储需求的。
开源方案 or企业级存储:对于IPFS场景,动辄几十PB上百PB的存储集群部署已经是常态了,在这种情况下如何保证大规模存储集群的数据安全和长期稳定运行就是Filecoin参与者们要思考的问题了。
随着数据量的持续不断增加,只有保证存储系统可以稳定提供服务的前提下,才可能做到收益最大化。开源方案短期内可能成本较低,但如果由于大规模下运维能力不足,对核心IO逻辑或者一些数据安全特性理解不透彻,则可能造成投资血本无归。所以长期来看,选择企业级存储方案是更优的选择。
对象存储 or文件系统:IPFS的底层存储类型选择上,目前市场主要有两种声音:文件系统&对象存储。
文件系统是以目录树的结构进行组织,以文件为单位进行存储的。对象存储则主要是以扁平化的结构进行组织,所有对象都平铺在存储桶中,与文件系统一个明显的不同是对象存储的接口协议是S3(事实标准),而非POSIX、NFS等标准文件系统的访问方式,这也导致大部分场景无法做到直接适配。
对于 IPFS场景来说,选择存储类型应该从以下几个方面来考虑:
1、数据规模:Filecoin本身主要存储32GB大文件,所以需要存储文件的数量非常少,对象存储的海量小文件优势没法发挥;
2、存储结构:Filecoin目录结构简单,实际只有1~2层目录,对于文件系统来说基本上是扁平的存储结构,对象存储同样没有什么优势;
3、应用对接:Filecoin原生使用文件系统接口访问底层存储,如果使用文件存储可以做到无缝对接。如果使用对象存储,则需要进行Filecoin应用代码改造。这种情况下除了存储产品,存储厂商还需要提供持续的Filecoin社区的跟进服务,无论是应用改造还是社区跟进,都需要投入大量的人力成本,这部分成本最终将转嫁到整体方案成本中。
针对对象存储应用改造的部分,大致分为2块:
1、对象存储driver,这部分是指基于S3 SDK封装的对象存储客户端,以及用S3 API模拟合并读等接口。
2,Filecoin代码改造,这部分主要是指改lotus相关代码库,以让lotus支持新的对象存储driver,包括合并读等接口。
后记
实际上Filecoin是一个非常典型的文件存储场景,并且仍然属于早期项目。项目本身还存在一些BUG和不稳定,在这种情况下选用存储厂商定制的Filecoin版本,并且跟随社区主线代码变更,如果碰到问题,无法确定是Filecoin问题还是存储厂商问题。
综上所述,这里比较建议选择分布式文件存储作为IPFS/Filecoin存储系统。