- 将博客部署到IPFS节点
IPFS(InterPlanetary File System)星际文件系统 是一个面向全球的、点对点的分布式版本文件系统,目标是为了补充(甚至是取代)目前统治互联网的超文本传输协议(HTTP),将所有具有相同文件系统的计算设备连接在一起。
内容可寻址:通过文件内容生成唯一哈希值来标识文件,而不是通过文件保存位置来标识。相同内容的文件在系统中只会存在一份,节约存储空间
版本化:可追溯文件修改历史
点对点超媒体:P2P 保存各种各样类型的数据
根据官网介绍,传统的HTTP协议具有以下不足之处:
-
HTTP的效率低下,并且服务器昂贵。使用HTTP协议从中心化的服务器集群中一次需要下载一个完整文件,而P2P的方式可以从许多peers(对等节点)中下载不同的数据块,经研究可以节省60%的带宽成本。
-
历史文件被删除。据统计,网页的平均寿命是100天,部分网站数据不能得到永久保存。这也是受限于中心化服务器的高昂存储成本。
-
HTTP的中心化限制了发展机会。迄今为止,主要的云服务都是由几家重要的云服务商所提供,政府和机构可以在这些中心化集群前截取HTTP消息包,窥探和监控网民的生活;黑客们也可以通过DDOS等手段攻击中心化的服务器集群,网络瘫痪的案例屡见不鲜。
-
网络应用过于依赖主干网。当主干网因为不可抗力因素造成拥塞或宕机等,无法继续服务时,应用也会受到影响。
每个文件及其其包含的所有数据块,都会转换为一个散列字符串,称为哈希指纹。
每个节点维护一张DHT(分布式哈希表),包含相应数据块与目标节点的对应映射关系。整个哈希表被组织成二叉树,平均查询联系节点的复杂度是O(log2N)。例如要查询10000万节点只需20跳。
基于内容寻址而非域名寻址。只需要通过文件或数据块的哈希值,IPFS便可自动在全网节点中找到拥有这些数据块的节点,并从节点上拉去数据。
IPFS使用一个叫IPNS的分布式命名系统,将难于记忆的数据哈希值映射为易于记忆的字符串。这可以类比于域名与IP地址的映射关系。
IPFS用基于内容的寻址替代传统的基于域名的寻址,用户不需要关心服务器的位置,不用考虑文件存储的名字和路径。我们将一个文件放到IPFS节点中,将会得到基于其内容计算出的唯一加密哈希值。哈希值直接反映文件的内容,哪怕只修改1bit,哈希值也会完全不同。当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。
IPFS是通用目的的基础架构,基本没有存储上的限制。大文件会被切分成小的分块,下载的时候可以从多个服务器同时获取。IPFS的网络是不固定的、细粒度的、分布式的网络,可以很好的适应内容分发网络的要求。这样的设计可以很好的共享各类数据,包括图像、视频流、分布式数据库、整个操作系统,还有静态网站等。
curl -O https://dist.ipfs.io/go-ipfs/v0.4.13/go-ipfs_v0.4.13_darwin-amd64.tar.gz
tar xvfz go-ipfs_v0.4.10_darwin-amd64.tar.gz
cd go-ipfs
mv ipfs /usr/local/bin/ipfs
ipfs init
hexo clean
hexo g
# 将文件加入到本地节点,同时它会返回很多site_hash,记住public 这个文件夹的site_hash,假设是0xAAAAAA
ipfs add -r public/
# 部署到公网节点
ipfs daemon
# 使用上面生成的site_hash绑定节点,因为site_hash是根据内容改变的,同时这条命令会返回另一个hash,假设是0xBBBBBB
ipfs name publish 0xAAAAAA
# 每次更新的时候都可以使用这个hash去访问博客,网址是http://ipfs.io/ipns/0xBBBBBB
# 是ipns,不是ipfs,当然你也可以使用http://ipfs.io/ipfs/0xAAAAAA 访问最初的文件