IPFS系列 - 工作原理和机制
IPFS的工作原理和机制
(1) IPFS为每⼀个文件分配一个独一无⼆的哈希值(文件指纹:根据文件的内容进行创建),即使是两个文件内容只有1个比特的不相同,其哈希值也不相同。这个方式使得IPFS可以支持基于文件内容进行寻址;
(2) IPFS在整个网络范围内去掉重复的文件,并且为文件建立版本管理;
(3) 查询文件的时,IPFS网络根据文件的哈希值(全网唯一)进行查找;
(4) 哈希值不容易记忆,会产生传播造成困难,IPFS利用IPNS 将哈希值映射为容易记的名字;
(5) 每个节点除了存储自己需要的数据,还存储了一张哈希表,用来记录文件存储所在的位置。用来进行文件的查询下载;
(6) IPFS实质上为我们解决的最终要内容是:数据存储。它能够极大的降低数据存储的成本,提升数据下载速度。IPFS 的诞生是为了解决目前互联网所存在的弊端;
IPFS架构-身份层及路由层
身份层和路由层属于捆绑性质。对等节点身份信息的生成以及路由规则是通过Kademlia协议生成制定,KAD 协议实质是构建了一个分布式松散Hash表,简称 DHT,每个加入这个DHT网络的人都要生成自己的身份信息,然后才能通过这个身份信息去负责存储这个网络里的资源信息和其他成员的联系信息。
DHT(Distributed Hash Table)主要思想如下:全网维护一个巨大的文件索引哈希表,这个哈希表的条目形如<Key,Value>。这里Key通常是文件的某个哈希算法下的哈希值(也可以是文件名或者文件内容描述),而Value则是存储文件的IP地址。查询时,仅需要提供Key,就能从表中查询到存储节点的地址并返回给查询节点。当然,这个哈希表会被分割成小块,按照一定的算法和规则分布到全网各个节点上。每个节点仅需要维护一小块哈希表。这样,节点查询文件时,只要把查询报文路由到相应的节点即可。
IPFS系统保存数据可靠吗?
IPFS系统采用了的冗余备份技术是Erasurecoding,简称“EC”,简单讲:n份原始数据,增加m份校验数据,此时可以通过 n+m份数据中的任意 n份数据来恢复原始数据,也就是可容忍的最大失效的数据数量为m。
例如,如果想容错 4 个盘,采用 n+4 模式。传统的 RAID6 允许两个盘失效,对应 EC就是 n+2模式。
IPFS存储文件信息安全问题
如果你存储的文件是不想别人看到的文件,在存入 IPFS 之前对文件进行加密即可,这样即便是别人拥有了文件哈希,还需要私钥来查查看数据。
MerkleDAG树形结构的搭建及使用原理:
在IPFS上存储文件时,首先会将文件切片,切割成256KB 大小的文件。
之后循环调用(MerkleDAG.Add)方法构建文件MerkleDAG [Merkle directed acyclic graph(默克有向无环图)]。
文件hash值创建流程:
a.将切片之后的文件进行sha-256运算
b.将运算结果选取0~31位
c.将选取结果根据base58编码,运算结果前追加Qm 即为最后结果作为文件的46位hash值,根据IPFS底层代码计算,Merkle DAG为多叉树结构,最多为174叉树。
DAGService维护在源代码之中通常使用DAGService维护MerkleDAG,为MerkleDAG提供删除和增加的权限。
每个节点的数据都是全的吗, 节点间会自动同步数据吗
- 不会, 同样文件,IPFS网络中只存储一次,而一次会在IPFS网络中做三份备份。
- IPFS 使用分布式哈希表,快速找到拥有数据的节点进行检索
- 客户端民检索到的节点相连, 再下载
同步的内容, 索引表每个节点是不是全的
每个节点除了存储自己需要的数据,还存储了一张哈希表,用来记录文件存储所在的位置。用来进行文件的查询下载
IPFS的文件的网络检索是如何进行的
IPFS 使用分布式哈希表,快速找到拥有数据的节点进行检索,使用哈希验证其是否是正确的数据,找到对应的文件;
为提高网络强壮和使用效率,删除重复具有相同哈希值的文件,跟踪每个文件的版本历史记录,判断冗余重复。
冗余备份的能力
- 备份几次由订单决定, IPFS有最基本的备份机制,默认的基础冗余为相同文件最低备份三份,虽上不设限,但市场效应会使得不被经常访问的额外冗余被存储提供方主动删除。
IPFS网络上同样的文件只有一份吗?
- 同样文件,IPFS网络中只存储一次,而一次会在IPFS网络中做三份备份。
- 如果把人们都有的某个文件,做一次hash计算,只字不差的两个文件hash值相同,再次上传时不会进行多次备份。
- 这个IPFS网络上同样的 hash对应的文件只会保存一次。只需要使用相同的hash值,就可以访问那个文件,这个hash值就是文件的地址。
- 而改动一个字,就成为了一个新版本,hash值会变化,也就需要再次存储。
数据丢失问题
IPFS是采用冗余备份技术,纠删码来解决数据丢失这个问题的。
IPFS 采用的是f(n,m)的计算方法来增加数据存储的安全性,只要增加m的校验数据,即可以得到原始数据N,但是存储的费用也有所增加,就看用户需求。
另外IPFS自带修复数据技能,IPFS如果检测到系统有丢失的文件时系统会进行自动修复。
硬件要求
- 开个docker就能运行IPFS节点, 要求不高
IPFS的生态, 活跃度
- Github: https://github.com/ipfs/go-ipfs
- Star: 10.1k
除了Filecoin,还有没有别的链与IPFS结合
链没了, IPFS生态内还有 IPLD、Multiformats
IPFS系列 - 工作原理和机制相关推荐
- Spring MVC的工作原理和机制
Spring MVC的工作原理和机制 参考: springMVC 的工作原理和机制 - 孤鸿子 - 博客园 https://www.cnblogs.com/zbf1214/p/5265117.htm ...
- 原子性概念及原子类的工作原理-CAS机制
1.原子性概念 原子性是指一个操作是不可中断的,要么全部执行成功,要么全部执行失败,有着"同生共死"的感觉.即使在多个线程一起执行的时候,一个操作一旦开始,就不会被其它的线程干扰. ...
- springMVC 的工作原理和机制
转载自 https://www.cnblogs.com/zbf1214/p/5265117.html 工作原理 上面的是springMVC的工作原理图: 1.客户端发出一个http请求给web服务器, ...
- JavaScript 工作原理之五-深入理解 WebSockets 和带有 SSE 机制的HTTP/2 以及正确的使用姿势(译)...
原文请查阅这里,略有改动,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland. 本系列持续更新中,Github 地址请查阅这里. 这是 JavaScript 工作原理的第五章. 现在 ...
- 以太坊完整工作原理和运行机制!
以太坊完整工作原理和运行机制! 2018年04月28日 00:00:00 阅读数:26 作者 | Preethi Kasireddy 编译 | 老曹.Aholiab 链圈的人提起「以太坊」三个字想必是 ...
- 【TensorFlow系列一】TensorFlow工作原理
↑ 点击上方[计算机视觉联盟]关注我们 今天开始,小编会更新TensorFlow系列文章,包括TensorFlow的使用和TensorFlow实践的项目等. 本篇主要介绍TensorFlow的计算模型 ...
- 调试器工作原理系列一: 基础篇
调试器工作原理系列一: 基础篇 本文是一系列探究调试器工作原理的文章的第一篇.我还不确定这个系列需要包括多少篇文章以及它们所涵盖的主题,但我打算从基础知识开始说起. 关于本文 我打算在这篇文章中介绍关 ...
- 调试器工作原理系列三篇
基础篇 关于本文 我打算在这篇文章中介绍关于Linux下的调试器实现的主要组成部分--ptrace系统调用.本文中出现的代码都在32位的Ubuntu系统上开发.请注意,这里出现的代码是同平台紧密相关的 ...
- 【Nginx系列】Nginx配置使用与工作原理
热门系列: [Linux系列]Linux实践(一):linux常用命令 程序人生,精彩抢先看 目录 1.Nginx介绍 1.1 什么是Nginx? 1.2 Nginx能做什么 1.3 为什么要选择用N ...
最新文章
- vue读取redis 值_Jmeter连接Redis,一定很容易学会吧
- Science子刊带来新遗传证据:早期人类驯化了自己
- 今天准备正式开博了!专注于Silverlight!
- COMMAND 模式
- 基片集成波导原理_ETH研究人员开发微型红外光谱仪 可以集成到芯片当中
- xftp传输文件错误解决办法
- phpstorm 2017.1激活
- 常见排序算法的C#实现
- python 私有云_构建私有云伴随着哪些需求?
- 建立一个vs+qt打开系统摄像头的程序
- maven 基本常识以及命令
- 机器学习数学基础篇一:高数基础
- 归纳偏执_防御性编程:足够偏执
- mysql 存储过程 if !=_mysql 存储过程 if !=
- 出现Cannot find module 'xxx' 错误
- index函数python什么意思,python index函数是什么
- 一个执念重度患者的自白
- eclipse复制工作空间配置
- 通知与服务——服务Service——服务的绑定与解绑延迟绑定服务与解绑服务
- Android:打开和关闭输入法
热门文章
- 备份下grub4dos的menu
- w10计算机字体怎么设置在哪里设置,win10电脑修改系统默认字体的方法|win10系统怎么设置字体大小...
- Signal信号值及对应含义
- HTML5可以用ae合成,影视动画制作软件如何新建固态层让所有素材融合更好 ae快速模糊...
- python--别踩白块python代码
- 基于Python的学生在线选课系统的设计和实现
- 基于C开发一款简洁实用的Mp3播放器
- Xavier AGX安装open3d
- 易语言免费版 绿色软件
- 【HTML+CSS】简历表格