Filecoin的存储单元称为扇区。对传统硬盘结构理解的小伙伴,对这个术语应该比较亲切,传统硬盘的最小存储单元就叫Sector。为了证明Sector的存储,Filecoin进行了一系列的处理,传说中的P1/P2/C1/C2。在处理过程中,一个Sector的计算会生成若干文件,最终会生成replica。相关文件是如何组织的?Cache都是由哪些文件组成,分别是多大?本文就从存储的角度看看这些过程和逻辑。
Filecoin的存储管理的逻辑主要实现在sector-storage项目中。在深入理解Sector存储逻辑之前,先讲讲Worker和Manager。
01?相关术语
Worker-处理P1/P2/C1/C2的服务,Worker又分为两种:localworker和remoteworker。localworker处理本地服务处理,remoteworker支持远程服务处理
Microstrategy创始人:阿根廷需要比特币来代替比索而不是美元:金色财经报道,阿根廷比索在过去12个月中贬值超过40%,Microstrategy创始人Micheal Saylor在推特上表示,阿根廷人民现在\"需要比特币\"。该推文是在报道称一些阿根廷政客赞成用美元取代比索的时发出的。
阿根廷总统候选人Javier Milei表示,美元化可以为阻止通货膨胀,3月份的官方通货膨胀率为103.4%。然而,尽管美元化在阿根廷得到广泛支持,美元的批评者,包括Saylor在推特上的追随者,都支持他呼吁阿根廷居民选择比特币来代替。[2023/4/28 14:32:52]
Manager-管理多个Worker
Scheduler-调度器,调度多个Worker,一个Manager通常有一个Scheduler
数据:目前超99%的比特币交易量来自超过10万美元的交易:3月14日消息,据加密分析平台IntoTheBlock报告,虽然矿工在市场影响方面已经变得无关紧要,但机构在加密货币中发挥着越来越大的作用。数据显示,目前超过99%的比特币交易量来自超过10万美元的交易。2020年三季度以来,机构主导和结构变化加速,大额交易占比保持在90%以上。此外,报告称,加密货币正在发展,但矿工在其中扮演的角色越来越小。一方面,矿工持有的BTC数量创10年新低。另一方面,比特币算力接近创纪录水平,而价格下跌。以上两种情况都对矿工的利润率造成压力,可能会导致矿工出售部分资产以支付运营费用。[2022/3/14 13:54:41]
Store-Sector存储系统
02?Sector存储
Sector处理相关的文件存储在Store中。Store通过sectorstore.json进行配置:
分析 | Grayscale Q1报告:产品流入资金环比增加40%,99%资金流入比特币信托基金:Grayscale 近日发布了第一季度投资报告,详细介绍了Q1投资产品流入和客户构成的变化。Grayscale的产品流入从第四季度的 3,010万美元增至第一季度的 4,270 万美元,环比增加40% 以上。与前 12 个月相比,在流入Grayscale产品的资金中,99% 的资金去向是比特币信托基金,而前一年这一比例为 76%。此外,这份报告还强调了Q1客户构成的变化,对冲基金的投资从 2018 年Q4的不足100万美元大幅增加至2019年Q1的近2400万美元。[2019/5/14]
CanSeal表明Store可以用来Seal,CanStore表面Store可以持久存储Seal的结果(replica)。Weight是权重,在多个Store选择时使用。ID是Store的UUID编号。
一个Store中存在三种存储,分别对应三种目录:unsealed(未封存的文件),cache,sealed。
03?Worker&Store
sector-storage项目的README中的这张图很好的解释了sectorstorage的各个模块以及相互的关系:
整幅图分为上下两个部分:上部分是Manager,下部分是RemoteWorker。Manager中包括一个LocalWorker。stores.Index是所有Sector存储的索引。Scheduler,上部分的中间,管理所有的Worker,并且调度Sector相关的存储。
workermanagementAPIs通过/rpc/v0的jsonRPC接口实现remoteworker的管理。通过/remote的HTTPAPI实现存储的Fetch操作,简单的说,传输文件。specs-storage.Prover/Sealer/Storage是Manager暴露出来的接口,实现Sector的证明,封存和存储。
每个连接到Manager的Worker会和Manager同步它的内存/CPU以及显存的信息。Scheduler在接受到新的请求时,会针对请求(Task)的类型以及资源的需求,从当前Worker中挑选最合适的Worker进行请求的处理。如何选择Worker,感兴趣的小伙伴,可以查看selector的相关逻辑。
从存储的角度,重新整理一下,这些关系:
以一个Manager连接两个Worker为例。Worker只能Seal,但是不能Store。为了更清楚展示Worker之间的数据传输,第一个Worker只做Precommit1,第二个Worker做Precommit2和Commit。
04?SealTask
理解SealTask,最好对照了Sector的状态管理一起看。对Sector状态管理还不熟悉的小伙伴,可以查看之前的文章:
Filecoin-Sector状态管理逻辑
接下来,看看每个SealTask对应的存储数据的变化。
AddPiece
如果其中左边的Worker接收到任务,AddPiece任务会在unsealed目录中创建原始数据。
PreCommit1
PreCommit1阶段,简称P1,针对SDR算法,计算若干层数据。如果Sector是32G,需要计算11层。对SDR算法不熟悉的小伙伴,可以看看之前的文章:
经过PreCommit1,生成的数据存储在Cache中:
PreCommit2
PreCommit2的阶段,简称P2,生成Replica,计算ColumnHash,并生成Merkle树(tree_d,tree_c,tree_r_last)。因为P2,不在同一个Worker处理,在进行处理之前,需要先传输给合适的Worker,处理的结果同样存储在Cache中:
Commit和Finalize
在Commit生成证明后,进入Finalize状态,Finalize可以理解成“归档”。因为在Worker上没有Store能力,删除不需要持久化的数据,需要持久化存储的数据,将传输回Manager。
05?数据存储量
以32G的Sector为例,在处理过程中需要存储的数据如下:
原始数据-32G
原始数据Merkle-32G
P1layer-32*11G
P2-ColumnHash?&tree_c-32*2G
P2-Replica&tree_r_last-32G9.2M*8
总共:512G多一点。
06?持久化数据
Sector经过P1/P2/C1/C2处理后,也就是说,经过PoREP处理后,需要持久化存储Replica的数据和tree_r_last的数据。tree_r_last的数据需要存储的原因是PoSt要用到。特别注意的是,tree_r_last的数据并不是完整的Merkle树数据,删除了其中一些层的数据。
32G的Sector,对应的tree_r_last分成了8棵子树,每棵子树是8叉树,默认存储的时候,忽略了最低的两层。也就是,去除最低两层的存储量为:
所以每棵子树的存储数据为4G*0.00223=9.13M。
也就是说,Sector持久化存储比例在1.0022左右。
总结:
Filecoin存储管理的逻辑主要在sector-storage中。Sector的处理任务,可以通过多个Worker完成。每个Worker的存储目录结构一致,Sector数据可以在多个Worker之间通过Http服务传输。Sector处理过程中,最大的存储需求量在512G左右。持久化存储比例为1.0022。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。