IPFS 垃圾回收和持久化存储

IPFS 节点默认将其 存储的数据 当作一种缓存。这就意味着它其实并不保证数据的持久化。资源总是有限的,是需要维护的,在条件具备的情况下,它会进行垃圾回收。

但同时,有些数据我们是不希望按照 gc 规则回收的,这是就需要将这些数据 pin 在节点上。

1 垃圾回收

IPFS 节点中垃圾回收器的配置,是在 ipfs 配置文件 中的 Datastore 配置 中完成的。关于回收器,相关的重要参数包括:

  • StorageMax: ipfs 数据仓库的存储上限。该值的默认 10GB
  • StorageGCWatermark: StorageMax 的百分比,一旦超过这个数值,如果 ipfs 守护进程运行且 gc 使能,将自动出发 gc 运行。该值的默认值是 90,即,超过 StorageMax 的 90%,将触发。
  • GCPeriod: gc 运行的频率。前提是 gc 被允许运行。默认值为 1 小时。

你也可以手动出发 gc:

1
2
3
4
5
ipfs repo gc

> removed QmPZhyTu8D7NqR5NvgkgNYsSYD4CNjnyuFejB8i23itJvA
> removed QmSYQFVAZgEnpa6NxiW5agyj3XU9VR4CbERShXiLhuPPPE
> removed QmS6SJXApoi59hqD8Naktgakc6UNHK1XDhqhtMg9sBhY8g

为了使 gc 能够运行,需要开启 ipfs 守护进程以及 gc 使能:

1
2
3
4
5
6
ipfs daemon --enable-gc

> Initializing daemon...
> go-ipfs version: 0.9.0
> Repo version: 10
> ...

2 Pin 在本地

垃圾回收按照一定规则是自动进行的,我们也可以通过几种方式,来保护数据,避免其被回收:

  • 通常,我们可以将数据 pin 在本地。当你在命令行客户端使用 ipfs add 指令添加文件时,将自动完成这个 pin 的动作,当然,你也可以手动去做,粒度更小(pin 一个 block;pin 一个 block 及其孩子;向上(父级)递归的 pin block)。

  • 当我们将文件放入本地的 MFS,其实也可以达到在本地 pin 一样的效果。但是,这种方式更加容易实现对文件的管理。


3 Pin 在远程

为了确保重要的数据能够被持续保留,你也可以使用 Pin 服务。这些服务运行在很多 IPFS 节点上,并允许用户将数据 pin 在他们的节点上,一些服务会提供一个的免费使用额度。在如下情况下,应当使用 pin 服务:

  • 本地磁盘存储不足,但是你有需要数据的持久化存储。
  • 你可能在使用手机/笔记本/平板,这些设备可能不是一直连接着网络,但是你希望能够随时访问到 IPFS 上的数据。
  • 你希望备份,并确保数据是持久化存储的,在其他电脑上仍然可见,即使本地已经删除了这些数据。

可以提供 pin 服务的第三方包括:Axel / Eternum / Infura / Pinata / Temporal / Crust Network 等.


4 持久化存储

通过个人的 IPFS 节点存储数据是非常简单的,但这时,你需要自己管理好硬盘。
这个问题,导致了那些允许你在远程存储数据的节点的兴起(通过 pin 服务,付费)。虽然这很方便,但是,也可能也会担心随之而来的花费问题,如果你不持续付费,数据同样面临者被删除的风险。

IPFS 确保其网络的任何数据都是可以被发现/被访问的,但是它并不确保这些内容是持久化可用的。这时,Filecoin 应运而生。


4.1 Filecoin 的解决方案

Filecoin 是运行在 IPFS 上的激励层, 是一个去中心化的存储网络,它允许存储提供者向外出租他们的存储空间。
用户和存储提供者之间,就多少数据将被存储/存储多长时间/花费多少上,达成一致。这个约定被称为一个 deal.一旦双方达成这个 deal,用户可以将数据发送给存储提供者,也可以检查数据是否被正确的存储。当用户想取回数据时,向这些 provider 发起数据即可。
花费的,就是 Filecoin 这种 token。

和 IPFS 相比,Filecoin 自然没有 IPFS 数据取回过程快;Filecoin 接受的数据最小需要达到 GiB 级别;同时,对于用户而言,Filecoin 的操作过程要更加复杂。

参考链接:
persistence-versus-permanence

IPFS Config-DataStore

© 2024 YueGS