月亮链 月亮链
Ctrl+D收藏月亮链

LOCK:深度解析IPFS怎样实现文件存储_BLOC

作者:

时间:1900/1/1 0:00:00

概述

IPFS-InterPlanetaryFileSystem星际文件系统,是一个点对点的分布式文件存储系统,IPFS的愿景是构建一个全世界的分布式网络,用来替代传统中心化的服务器模式,所有的IPFS节点组成一个分布式网络,每个节点都可以存储文件,用户可以从IPFS构建的网络中以DHT(DistributedHashTable,分布式哈希表)的方式获取文件,从而实现了新一代的完全去中心化的网络,旨在取代现有的万维网。IPFS功能很丰富,包括DHT组网,文件存储,Bitswap文件交换等功能。本文主要介绍IPFS的文件存储原理,文件上传到IPFS节点存储时,节点会将文件分块后进行存储,每个文件以MerkleDAG的格式组织,而MerkleDAG的根哈希则用来表示该文件。本文将对IPFS存储进行详解,所述的IPFS的版本为v0.6.0。

CID

在介绍IPFS存储文件的远离之前,先介绍一个重要的标识——CID,CID是IPFS中用来表示内容的标识,可以用来表示一个文件,也可以用来表示一个文件块。如下所示,CID是一个字符串,它主要由Version、Codec和Multihash三部分构成,Version目前分为v0和v1版本,v0版本的CID可以由V0Builder生成,v0版本的CID以Qm字符串开头,v1版本的CID可以由V1Builder生成,v1版本的CID主要包含三个部分Codec,MhType和MhLength,其中Codec是表示内容的编码类型,例如DagProtobuf,DagCBOR等,MhType是哈希算法,例如SHA2_256(默认的哈希算法),SHA2_512,SHA3_256,SHA3_512等等,MhLength是生成哈希的长度,默认用-1表示根据哈希算法确定长度。

国家发改委党组书记:区块链等数字技术与传统产业深度融合:金色财经报道,国家发展改革委党组书记、主任何立峰今日在学习时报撰文《党的十八大以来发展改革领域取得的历史性成就发生的历史性变革》。文章指出,新型基础设施建设加快,“东数西算”工程有序推进,区块链等数字技术与传统产业深度融合,数字经济规模连续多年位居世界第二。[2022/4/13 14:21:19]

IPFS组件介绍

IPFS用IpfsNode表示IPFS的节点,存储相关组件的如下所示:

这些组件的关系如下图所示,最上层是DAGService,它组合了BlockService组件,而BlockService组合了GCBlockstore组件,然后GCBlockstroe包含BaseBlocks和GCLocker两个组件,最后BaseBlocks组合了最原始的blockstore组件。

接下来分别介绍这些组件的功能:

北京互联网法院出台意见:加快区块链等现代科技与互联网审判工作的深度融合:北京互联网法院正式出台《关于为促进北京数字经济创新发展提供有力互联网司法服务和法治保障的意见》(以下简称《意见》),以充分发挥互联网司法职能作用,为促进北京数字经济创新发展、国家服务业扩大开放综合示范区建设提供有力司法服务和保障。《意见》提出,在互联网司法智能化应用方面,加快实现人工智能、5G、区块链等现代科技与互联网审判工作的深度融合,持续落地互联网技术应用的司法新场景,以北京互联网法院建设成效,为世行评估提供新的最佳实践样本。(北京日报)[2020/9/21]

Pinning:固定CID的管理器,主要负责将文件或者文件块的CID固定,固定CID的块不会被GC掉。上传的文件最后的文件的CID都会被固定住,防止被GC。

Blockstore:GCBlockstore类型,组合Blockstore和GCLocker两个组件。

北斗卫星导航系统发言人:北斗系统高精度服务正与区块链等新技术深度融合:今日上午10时,国务院新闻办公室举行新闻发布会,中国卫星导航系统管理办公室主任、北斗卫星导航系统新闻发言人冉承其介绍,基于北斗的高精度服务在抗击新冠疫情和南方水灾中发挥积极作用,正在加速进入新基建,与新一代通信、,北斗应用新模式、新业态、新经济不断涌现。(澎湃新闻)[2020/8/3]

BaseBlocks:原始的blockstore,提供了对Block的Get/Put/Has/DeleteBlock等操作。

GCLocker:用来锁住blockstore,保护blockstore防止被GC影响。

Blocks:提供Block的服务,组合Blockstore组件,提供了GetBlock/GetBlocks、AddBlock/AddBlocks、DeleteBlock等操作。

DAG:IPFS的默克尔DAG的服务,组合BlockService组件,提供Get/GetMany,Add/AddMany,Remove/RemoveMany等操作。

声音 | BitMEX Research:BCHABC新版本使得深度重组风险降低:BitMEX Research发布报告称,BCHABC的0.18.5版本新增了滚动区块“检查点”,降低了深度重组的风险,但增加了共识链分裂的风险,并为潜在的矿工攻击提供了新机会。此外,新系统会增加矿工攻击对网络造成的伤害,但会降低对此类行为的潜在回报。新版本对系统做了根本性改变,但目前尚不清楚这种变化是否是净效益。[2018/11/22]

文件存储流程

文件上传时将文件添加到IPFS的仓库中,上传的流程可以如下图所示,生成默克尔DAG的结构,生成的结构有两种Layout:balanced和trickle的。这里介绍默认的balanced结构,首先生成root作为根节点,然后将文件分割,默认按照256KB大小读取一个chunk,生成叶子节点,依次生成node1,node2,root节点会有Link指向挂在root节点的叶子节点node1和node2。root节点下面能够Link的叶子节点数量是有限的,IPFS中默认设置的是174个。

声音 | 中国电促会秘书长:将促进区块链等技术与电力行业的深度融合:据中国电力网消息,中国电力发展促进会常务副会长兼秘书长游敏日前在座谈会上表示,电促会换届以后,将致力于促进“大云物移智和区块链”等新一代数字技术与电力行业的深度融合作为自己的核心服务业务,提出“跨界、融合、增值、共享”的服务理念。[2018/9/11]

如下图所示,超过174个后则会新创建一个newroot节点,并Link到oldroot,新的chunk作为node3被newroot直接Link。

当继续有新的chunk添加时,则会生成node34作为node3和node4的父节点,node34含有两个Link分别链接到node3和node4。

IPFS在init的时候会生成.ipfs目录,如下图所示,其中blocks则为文件块存储的目录,datastore为leveldb数据库,其中存储了文件系统的根哈希等,存储相关的配置关联在.ipfs目录下面的config文件。

经过上面的步骤,文件已经切块并转化成MerkleDAG的结构,接下来详细介绍每个块是如何进行存储的流程。

如下图所示,一个Block存储时,首先由dagService调用Add进行添加;之后由blockService调用AddBlock添加该Block;再调用arccache的Put,arccache是对存储的Block做arc策略的缓存;再之后由VerifBS调用Put进行存储,VerifyBS主要对CID的合法性进行校验,合法则进行Put;接着blockstore调用Put进行存储,Put函数中会对CID进行转化,调用dshelp的CidToDsKey方法将CID转化成存储的Key;再接着调用keytransform.Datastore的Put,Put函数中会将前缀拼上,这时Key加上了前缀/blocks;然后调用measure的Put函数,measure是对mount的封装;之后调用mount的Put函数,mount和IPFS的config配置文件中结构对应,根据key去查找对应的datastore,由于前缀是/blocks则可以找到对应的measure;调用该measure的Put函数;最后调用flatfs的Put函数,由Put函数调用doPut最终调用encode函数将完整的block写入的目录指定为/home/test/.ipfs/blocks/WD,其中WD来自于blocks/CIQFSQATUBIEIFDECKTNGHOKPOEE7WUPM5NNNSJCCDROMM6YHEKTWDY中的倒数第三第二个字符。这样该Block则写入了该目录下面的文件中。

总结

IPFS文件存储格式为默克尔DAG格式,每一层Links大小为174个,超过了则会重新调整。文件存储过程中有多个Datastore进行了组合和封装,每个Datastore功能比较单一,例如arccache只做Block的缓存,VerifBS只做CID的校验,这样做的好处是每个组件功能明确,不好的地方在于组合太多,调用深度太深,加上内部都是用interface,好几个组件都实现了该interface,不便于阅读。

IPFS的存储模式面向互联网用户而设计,因为它的开放性,允许所有节点随意接入,已接入IPFS网络的节点可以自由查找内容,不适合直接用来作为企业的文件存储服务。但其分布式存储的特点,很容易进行存储的动态扩容,可以通过结合节点认证机制和DHT查找内容的剥离,为企业的分布式存储系统,另外配合区块链技术,通过链上链下协同技术,很容易地解决链上存储容量不足的问题。

了解IPFS和Filecoin资讯,参与Filecoin挖矿,可联系IPFS研习社,微信号:XF2020IPFS

标签:LOCKLOCBLOCKBLOCBlockBurnShark LockBlockpassBlockEco

以太坊价格今日行情热门资讯
UTC:PD(皮蛋)上线VB网的公告_nutcoin

尊敬的VB网用户:PD即将上线VB网交易燃烧板,并开放PD/USDT交易对。具体安排如下:PD充值开通时间:8月14日14:00:00(UTC8)PD提现开通时间:8月14日14:00:00(U.

1900/1/1 0:00:00
COM:关于ZT暂停ANT充提币的公告_HTT

尊敬的ZT用户:因ANT节点维护,为保护用户财产安全,ZT现已暂停其充提币业务,维护完成后将恢复正常。具体恢复时间请关注官网公告,由此给您带来的不便敬请谅解.

1900/1/1 0:00:00
Bithumb:\b如何进行邀请返佣?_UMB

>>WEB端<<1.?进入BithumbGlobal官网?(bithumb.pro),登陆您的账户后.

1900/1/1 0:00:00
比特币:宸浩论币:比特币联动上涨压力未破,日内关注压力谨慎追高!_比特币全球市值排名前十

宸浩论币:比特币联动上涨压力未破,日内关注压力谨慎追高!如果自己没有尽力,就没资格说别人不尽全力,开口抱怨很容易,但闭嘴努力寥寥无几,每一个单边疯狂,都历经了暗涛汹涌,每一场疯狂庆贺.

1900/1/1 0:00:00
LINK:我本不想拉盘 都是你逼的_BTCDEFI

今天的封面是《巴黎的帆船》,威廉·詹姆斯·格莱肯斯昨天大盘下跌之前,雨神在圈子里提示了市场回调的风险,并且明确交代了不同仓位的处理情况.

1900/1/1 0:00:00
以太坊:以太坊做出小幅度上涨K线走势_W12价格

内容纪要:在今天走势中以太坊做出小幅度上涨K线走势,上方高点破位近期走势的新高,但是下方点位也出现了破位短期的新低,因此整体看K线走势以关注下方低点位置为主,目前关注点位376美元是否进行破位.

1900/1/1 0:00:00