IPFS中MFS以及GC机制
概 述
IPFS的介绍在《IPFS文件存储详解》已经详细介绍过,本文主要介绍IPFS中的文件系统MFS(Mutable File System)以及文件的GC机制。
MFS和传统的文件系统一样使用目录对文件进行管理,区别在于MFS中的目录和文件都有哈希,该哈希由文件内容或者目录下面所有目录以及文件的内容唯一确定,如果目录下面的文件或者目录有变化则该目录的哈希也会变化,所以根据哈希可以判断该文件或者目录下面的内容是否有修改。
文件的GC机制主要介绍IPFS是如何进行文件删除的。
本文所述的IPFS的版本为v0.6.0。
MFS
本版块主要介绍IPFS的文件系统,即文件及目录结构是如何生成、组织和存储。
MFS中文件及目录结构如下图所示,最上层是root目录,表示该文件系统的根目录,所有文件夹以及文件都在该目录下面,MFS中用Root,Directory,File这三种类型分别表示root目录,文件夹,文件。root目录通过link(link中包含link文件夹或者文件的Name、Size和CID)链接到文件夹或者文件,文件夹又通过link链接到文件夹或者文件。
其中,root目录、文件夹都会存储在IPFS的DAG中进行持久化,另外root目录的CID(参考《IPFS文件存储详解》)存储在IPFS内置的LevelDB中,当IPFS启动的时候从LevelDB中取出root目录的CID,然后在IPFS的DAG中取出根目录,最后加载出整个目录结构。
下面详细介绍创建文件夹和增加文件的过程:
创建文件夹的过程如下图所示:
1. 新建文件夹;
2. 将该文件夹的父文件夹添加一条link,link包含该文件夹的Name、CID和Size;
3. 调用该文件夹的update函数,通过parent递归更新父级文件夹的状态(CID,修改时间等),逐级向上层文件夹更新,直到更新root结束递归过程。
删除文件夹和创建文件夹类似,只需要unlink(删除父级文件夹的link)和递归update即可。
增加文件的过程如下图所示:
1. 上传文件(参考《IPFS文件存储详解》中文件存储过程)
2. 将该文件的父文件夹添加一条link,link包含该文件夹的Name,CID和Size;
3. 调用该文件的flush函数,通过parent递归更新父级文件夹的状态(CID、修改时间等),逐级向上层文件夹更新,直到更新root结束递归过程。
删除文件和增加文件的过程类似,只需要unlink(删除父级文件夹的link)和flush即可。
文件GC机制
IPFS中删除文件时并不会立即删除掉该文件,而是将该文件的CID unpin(pin是固定CID,保证不会被GC,unpin则是会被GC),下次GC的时候则可以真正的删除该文件。
下图是IPFS的配置文件,其中红色部分是GC相关的配置。
StorageMax是存储文件的最大容量,默认是10GB,可以根据项目需要进行修改,当存储的文件超过该最大容量时会有warning,文件还是可以继续存储的。
StorageGCWatermark是GC的阈值,默认是90,即90%,触发GC的阈值容量为10GB*90%=9GB。
另外,GCPeriod是GC的间隔,默认是1h。GC触发的机制是每一个GC间隔时间,触发GC的检查,当存储容量超过阈值时则开始GC,将需要删除的文件或者块进行删除。
文件或者块的Pin模式如下图所示,文件的Pin模式是recursive,即递归Pin文件的所有的块。
如下图所示,pinner是块的GC管理器,其中recursePin是递归的pin的集合,里面存储所有文件的根CID:
每次触发GC时会进行ColoredSet,如下面两张图所示,将所有recursePin中的CID依次遍历,深度遍历该CID所有的links,这些links的CID都会存储到gcs这个集合中:
然后通过bs.AllKeysChan(ctx)可以获得所有的块的CID集合,最后遍历这些CID集合,判断gcs中没有的该CID的块都需要删除掉,具体见下图,从而实现了所有unpin的块GC触发的时候都会删除的效果。
注意:GC的时候会lock,此时上传文件和删除文件都会阻塞,GC需要占用的时间和文件存储量以及删除的文件大小有关系,可以将GC时间固定在每天用户操作最少的时间点,例如每天的凌晨3点,减少用户操作和GC的冲突。
总结
IPFS中MFS提供了一套基于CID的文件系统,目录结构也存储在IPFS的DAG中,目录的树状结构和DAG的结构本身是很类似的,所以将目录结构存储在DAG中巧妙地解决了文件系统目录结构地存储问题,最后只需要存储文件系统的根目录的CID从而可以方便地加载整个文件系统的目录。
IPFS中的文件GC机制目前不是很高效,通常文件存储10GB容量左右时,触发GC可能就需要几分钟到十几分钟的时间,由于IPFS是一个面向公网的一个用户一个IPFS节点的模式,所以该问题对于IPFS项目本身并不明显,但是如果将IPFS的存储以及GC机制作为投产项目使用,则需要对GC机制进行优化,减少GC占用的时间间隔。
另外IPFS本身每隔一段时间触发GC也不是很合理,针对项目的用户使用情况可以将GC触发时间固定在每天的凌晨某个时间,然后每24小时的GC触发间隔也是一种比较简单的解决IPFS的GC冲突问题的办法。
作者简介:姚文豪 来自数据网格实验室BitXMesh团队,数据平台架构师
概 述
1. 上传文件(参考《IPFS文件存储详解》中文件存储过程)
作者简介:姚文豪 来自数据网格实验室BitXMesh团队,数据平台架构师
IPFS发布go-ipfs 0.7版本,包括诸多安全性改进以及弃用SECIO:IPFS项目负责人Molly Mackinlay发推称,去中心化文件和网络托管协议星际文件系统(IPFS)发布go-ipfs 0.7版本,包括诸多安全性改进以及弃用SECIO。如果您使用的IPFS版本在0.5之前,请尽快升级。没有TLS的旧节点将不能加入网络。[2020/9/24]
管交所BGOEX关于“IPFS云管算力”首期认购上线公告:据官方消息,为回馈管交所的广大用户,第一期“IPFS云管算力”IPFS云算力认购上线送福利活动,在原有基础上,再次进行折扣。用USDT认购折扣为78折,由原来219USDT/TB折扣为现在171USDT/TB; \n用平台币BGO认购折扣为72折,由原来2800BGO/TB折扣为现在2000BGO/TB。首期认购时间为今天下午16:00开放,一直持续到7月3日20:00。“ \nIPFS云管算力”由管交所BGOEX推出的一项支持用户按T和周期租赁IPFS云算力并享有挖矿权益的业务,该算力依托知名矿池而建。[2020/7/1]
IPFS硬盘矿机“玛雅科技”获极豆资本5000万元人民币A轮融资:近日,IPFS硬盘矿机厂商“玛雅科技”对外宣布获得极豆资本领投、字节资本跟投的5000万元A轮融资。“玛雅科技”旗下业务包括玛雅矿机、基础托管、云算力挖矿。其中,玛雅矿机销售的机器主要包括两部分:一块是成熟的GPU矿机,另一块则是IPFS、brust、storj等硬盘挖矿类矿机。[2018/5/21]
标签:
区块链热门资讯
Pickle在上次在黑客事件之后,遭受重创,不过随着跟Yearn(YFI)的合并,事情出现了转机。在这次Yean的合并中,除了PJars跟 YFI的Vaults合并之外,对于PICKLE代币持有人来说,最关注的可能是其代币机制的变化。 DILL代币 在这次合并中,Pickle的代币机制出现了新的代币DILL。DILL类似于Curve协议中的VeCRV。
2020/12/22 14:54:50哈喽,大家好。经过半个多月的努力,ETH123 终于和大家正式见面啦! 少废话,先看东西! 以太坊生态有些啥?我该从哪里开始?什么钱包好用?刚接触以太坊的新人们往往面临这样一堆问题。密码学货币对新手而言不算友好,晦涩难懂的概念,鱼龙混杂的信息,都可能成为登上这片新大陆的阻碍。每个人都曾是行业的萌新,这些疑惑,我们也深有感受。
2020/12/22 14:54:46本期我们分享来自本体技术团队的一篇文章的第一部分,关于 Substrate 的合约机制分析。 概要 Substrate 把整个程序逻辑分为 Host 和 Runtime 部分,Host 功能是固定的,偏向于底层,是采用原生执行的方式,而 Runtime 部分是动态的,偏上层业务,编译成 Wasm 字节码,这样可以随时升级,其执行在 Wasm 虚拟机中。
2020/12/22 14:54:42zkSync 是一个用于扩展以太坊支付及智能合约的 Layer2 协议,zkSync 称之为:加密支付的新标准。
2020/12/22 14:54:3112月10日,国际货币金融机构官方论坛OMFIF发布了最新报告《支付的未来》,报告探索了传统支付提供商、科技公司和行业新进入者生态系统中正在进行的创新发展成果。 参与合作研究并联合发布报告的,既有花旗银行、万事达、Paypal、SWIFT等传统企业,也有互联网社交巨头Facebook旗下的数字钱包Novi。
2020/12/22 14:54:24今天分享阿飞兄弟对区块链经济下的货币思考,是关于法币、btc、ampl的简析。 阿飞对于法币、BTC、AMPL的理解很深刻,非常值得看,开拓思维,打开对Coin的另一个认识,或许不同意他的观点和看法,也没关系,可别拒绝思维的碰撞。 创新的东西,值得多看,就如一开始看不懂BTC,而 AMPL 能不能成唯有时间能给我们答案。
2020/12/22 14:54:19