昨天是 2019 年的情人节(2/14),没想到 Filecoin 在 Twitter 放出一条重磅消息,宣布已将 Filecoin 项目开源,提供测试网络,详细报道可以参考官方博文。
什么是 Filecoin?
Filecoin 是一个去中心化的存储网络,能将海量用户的闲散存储资源充分利用起来,从而构建一套超低成本的可靠存储系统。
因为它没有中心,所以会用到区块链技术,只不过一般区块链使用的是算力挖矿的工作量证明(Proof-of-Work mining),而 Filecoin 使用的是存储工作量证明(Proof-of-Storage)。
与 IPFS 的关系
在谈 Filecoin 之前想必大家对 IPFS 已经有过了解,那二者有什么关系呢?
简单来说,IPFS 主要负责 P2P 网络中的内容寻值和内容传输,而 Filecoin 是内容永久存储的激励层,它们之间是相互补充的关系。
IPFS addresses and moves content; Filecoin is the missing incentive layer。
Filecoin 架构
我们可以把 Filecoin 简化为两层,一个是区块链,主要是记录全网状态(一个去中心化的状态机),包括所有钱包账户和余额,市场订单匹配记录。另外一个是存储的解决方案,主要包括副本策略(纠删码,多副本),端到端加密,存储时间和续费策略,存储市场匹配等。
它主要包括 4 种角色:
- 存储矿工(Storage miners): 将自己的磁盘抵押出来,提供存储服务,类似云厂商的对象存储
- 检索矿工(Retrieval miners):可以帮助用户快速的检索到内容,类似于传统意义的 CDN
- 存储客户端(Storage clients):能够上传内容到 Filecoin,类似对象存储上传客户端
- 检索客户端(Retrieval clients):能够从 Filecin 检索到内容,类似对象存储下载客户端
如何挖矿?
挖矿就是在 Filecoin 网络中获取虚拟货币(FIL),主要可以通过以下途径:
- 成为存储矿工,在市场中通过报价的方式出租存储空间,当匹配成功,将获取相应报酬
- 成为检索矿工,帮助内容下载客户端下载内容
- 成为数据修复矿工,帮助修复丢失或损坏的数据
目前版本主要实现的是存储矿工部分,其它以后会相继完成。
那如何成为存储矿工呢?
Step 1: 通过抵押资产创建存储矿工
例如: 创建一个矿工承诺10个扇区(目前每个256 MiB)和100 FIL作为抵押,消息气价格为0 FIL /unit,限制1000个气体单位。
go-filecoin miner create 10 100 --price=0 --limit=1000 --peerid `go-filecoin id | jq -r '.ID'`
这一步可能需要较长时间,主要确认账户余额是否足够抵押,如果创建成功将返回矿工地址。
Step 2: 启动矿工
go-filecoin mining start
Step 3: 创建存储订单请求
// 获取存储矿工地址
export MINER_ADDR=`go-filecoin config mining.minerAddress | tr -d \"`
// 获取矿工拥有者(Filecoin 节点) 地址
export MINER_OWNER_ADDR=`go-filecoin miner owner $MINER_ADDR`
// 创建一个报价请求,例如以0.000000001 FIL/字节/块的价格询问,对2880块有效,消息气价为0 FIL/unit,限制为1000气体单位
go-filecoin miner set-price --from=$MINER_OWNER_ADDR --miner=$MINER_ADDR --price=0 --limit=1000 0.000000001 2880 # output: CID of the ask
// 查询报价列表
go-filecoin client list-asks --enc=json | jq
如何存取数据?
想使用 Filecoin 来存储数据,必须保证节点钱包具有充足的余额(FIL),这个等以后上线主网后可以通过交易市场购买,目前测试网络可以通过 faucet 免费获取。
Step 1: 添加存储的内容到本地节点
这点很像 ipfs add xx
, 例如:
echo "Hi my name is $USER"> hello.txt
export CID=`go-filecoin client import ./hello.txt`
go-filecoin client cat $CID
也可以通过文件导入:
export CID=`go-filecoin client import ~/Desktop/sample-data-master/camel.jpg`
go-filecoin client cat $CID > image.png && open image.png
Step 2: 查询存储市场,获取报价
可以通过命令查询存储矿工的报价列表:
go-filecoin client list-asks --enc=json | jq
结果类似:
{
"Miner": "fcqxvnl37zdv8clc26j6r43zn8md7tc2mrfx77vru",
"Price": "2.5",
"Expiry": 588,
"ID": 0,
"Error": null
}
Step 3: 匹配报价
go-filecoin client propose-storage-deal <miner> <data> <ask> <duration>
其中:
- miner: 通过
go-filecoin client list-asks
出来的矿工地址 - data: 本地导入内容的 CID
- ask: 通过
go-filecoin client list-asks
列出来的 ID(通常都为 0) -duration: 希望存储的时间周期,30秒为一个blocks, 所有一天就是 (2 blocks/min * 60 min/hr * 24 hr/day) = 2880 blocks。
Step 4: 矿工存储数据
当匹配订单(propose-storage-deal
)创建成功后, 本地数据将自动通过 bitswap 传输到矿工节点。
Step 5: 客户端检索数据
客户端可以通过提交查询订单和数据恢复操作来下载数据,例如:
// 创建查询订单
go-filecoin client query-storage-deal <dealID>
// 当查询订单创建后,可以通过订单 minner 的地址以及想查询的内容 ID 来获取内容
go-filecoin retrieval-client retrieve-piece <minerAddress> <CID> # 可能需要1分钟
现状
当前 Filecoin 还是较为早期阶段,部分功能还在开发中,而且存在一定安全问题。现在上线的是测试网络,主网预计 2019 Q3 上线。
核心功能进展:
- 存储矿工: 基本完成
- 检索矿工: 待开发
- 数据修复矿工: 待开发
- 客户端加密: 待开发
- 纠删码存储: 待开发
思考和展望
Filecoin 是完全去中心化的存储系统,优劣式明显。
劣势:
- 去中心化方案,引入区块链,必然会带来性能的降低(QPS 较低,确认时间长),这决定了它不能像标准对象存储(3副本)那样提供高速的上传下载能力。
- Filecoin 主要激励机制是靠虚拟货币,但它具有很大的价格波动性,而存储文件需要很长的时效性,币价的波动性会带来存储的不稳定性,矿工存储利益不平衡。
解决办法:
- Filecoin 为我们提供了将无限闲置资源利用起来的可能性,这在未来数据大爆炸时代是很有用的。虽然它存在上诉说的性能问题,但它可以用作低频存储(冷数据)而且这部分的存储量是巨大的,只要它具有超级吸引力的价格,而在热数据方面我们可以考虑通过 IPFS 来做缓存(类似 CDN),从而形成闭环。
- 对于币价的不稳定性这点,可以通过快速变现的方式减少持有的货币,或者降低订单存储结算周期,按照每周付费。
结语
在 Filecoin 之前已经有不少去中心化的存储,比如(Sia, StorJ),但它们都没有真正流行起来,很大原因就是价格上没有绝对优势。
Filecoin 能否流行起来,需要时间来证明,不过就目前来看,Filecoin 绝对是去中心存储市场中最耀眼的那一个。
参考链接: