IPFS, InterPlanetary File System 是一个依靠 P2P 储存文件的系统。它的理念和机理和 BT 很像,不同的节点共同保存了一个文件,同时也都运用 DHT 来寻找文件。它还混合了时下最时髦的概念:区块链。通过 FileCoin 的应用来激励矿工们保存文件。这些理念看上去真的很美好,但是真的有想象中的那么好吗?

为什么是 IPFS?

在 IPFS 的官方网站上,列出了 IPFS 的几个优势:

P2P 效率高

p2p 技术的应用使得全球都可以快速的获得所需求的文件,不用担心国际网络之间连通性太差的问题。同时从多个服务器同时下载, 提升了下载速度。在视频分发的应用中,节省了高达 60% 的带宽。

永久保存

在 web 中,文件经常会失效,时常会有 404 的情况出现,一个网页的平均寿命只有 100 天。而 IPFS 使得文件可以得到永久的保存,同时还提供了类 git 的历史版本回溯功能,使得文件更加安全。

去中心化

没有了中心的控制,每个用户都有机会发出自己的声音,使互联网恢复原本开放和扁平的样子。

稳定

非中心化使得文件不会被轻易的删除,屏蔽,修改。于此同时,在分布式的背景下,由于没有了没有单点失效的问题,一些如地震、火灾、停电等不可抗力事件将不会影响互联网的正常运行,文件仍然可以通过分布式网络结构分发至用户手中。

浅尝辄止

可通过 Global Upload 将文件上传到 IPFS 网络之中,而不需要下载客户端至本地。

完整体验

前往 https://dist.ipfs.io/#go-ipfs 下载对应平台的 ipfs。安装过程具体参见 Install IPFS - IPFS Documenation

下载安装完成后运行 ipfs init 进行初始化。

添加文件

$ ipfs add example.txt
added QmZ4tDuvesekSs4qM5ZBKpXiZGun7S2CYtEZRB3DYXkjGx

运行后会得到一串字符,这既是 IPFS HASH,通过 IPFS HASH 可以从 IPFS 网络中获取自己的文件。这和磁力链很相像,同样是通过一段 HASH 去访问 DHT 网络来取得文件。

打印文件

$ ipfs cat /ipfs/QmZ4tDuvesekSs4qM5ZBKpXiZGun7S2CYtEZRB3DYXkjGx
hello worlds

QmZ4tDuvesekSs4qM5ZBKpXiZGun7S2CYtEZRB3DYXkjGx 替换为对应的 IPFS HASH

下载文件

$ ipfs get /ipfs/QmZ4tDuvesekSs4qM5ZBKpXiZGun7S2CYtEZRB3DYXkjGx

开启网关

$ ipfs daemon

开启网关后,便可以通过访问 http://localhost:8080/ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme 的方式在浏览器中下载文件,而不需要与命令行打交道。

官方也提供了许多公共网关供其他人使用,如 https://ipfs.work/ipfs/

IPFS 应用

IPFS 如今已经有了很多应用,如视频网站,图床,Wiki 等等

具体可参见 https://github.com/ipfs/awesome-ipfs

文件存活测试

对于 IPFS 来说,最不确定的是文件能否持续存在于 IPFS 网络之中。个人认为,文件在很长一段时间没有被访问后就会从 IPFS 网络中消失。要使得文件长久地存在于网络之中,就需要有人来 pin 这个文件,如今也有专门的服务来帮助用户 pin 住文件,如 eternum。但价格并不算友好,需要 $0.300/GB 每月。

还有一种方法便是常常去访问这个文件,使得这个文件一直存在于网络的各个节点之中。本人认为能被常常访问的最好方法便是发布至互联网上,在此本人将不同类型的文件上传至 IPFS 网络上,希望探寻出不同类型文件的存活时间。(本人预测图片的存活时间会最长,由于各种爬虫 🕷️ 的存在)

文档

PDF file: pdf-sample.pdf (8 KB)

文件来源: This is a test PDF file - UNEC

图片

Flat lay of healthy breakfast with bowls of fruit and oatmeal

Breakfast JPEG 3.9MB 3717×5576

图片来源: Breakfast by the Window photo by Brooke Lark (@brookelark) on Unsplash

视频

Video Of People Walking H.264 8.3MB 19sec 1920×1072

视频来源: Pexels Video