IPFs(行星际文件系统)是一种基于区块链的内容去中心化存储解决方案。IPFs采用P2P(peer-to-peer)网络模进行文件共享,文件共享分布在许多计算机或节点上。文件被分成不同的部分并存储在节点网络中。这些节点通过散列跟踪文件。查找文件时,将根据其哈希值重新创建原始文件。
去中心化文件存储
使用分布式哈希表(DHT)存储和检索文件系统是IPFs的核心创新。它类似于BitTorrent协议,但它们以不同的方式指向共享文件。IPFs将文件存储为区块链上的键值对。数据被分成256kb的块,去中心化在节点或计算机的网络中。通过有效的协调实现节点间的有效访问和查找。BitTorrent不使用区块链,而是依赖torrent指向文件。可以有不同的Torrent指向同一个文件,但在IPFs中,只需要一个指向该文件的哈希ID。
文件发布到IPFs的方式与文件发布到云中的方式不同。IPFs上的所有数据都由其散列ID寻址。当有人请求数据时,他们直接通过散列ID而不是实际的文件本身来请求。因此,IPFs为文件的实际位置提供了一个抽象,因此实际的物理位置与应用程序无关。这种抽象消除了应用程序开发人员的复杂性。
节点承载网络上的文件。IPFs区块链上的filecoin等数字资产鼓励他们这样做。激励节点在其计算机或服务器上为托管文件提供存储。这些文件被赋予一个散列ID,然后可以通过网络分发。其他节点也可以承载同一个文件,允许创建多个副本。想要文件的用户将根据其位置最近的节点的哈希值来访问该文件。
托管文件的所有节点都将引用根哈希,这是文件的哈希ID。无论何时发出文件请求,用户都会使用基于根哈希值存储文件的最近节点的哈希值下载文件。IPFs上没有重复项,因为哈希在上载时总是引用文件或文件的一部分。
一旦文件被放入IPFs区块链,它将保持可用,直到通过解除文件绑定并运行垃圾收集例程将其删除。文件本身可以具有由其哈希指向的不同节点。只要文件存在哈希,不同的节点也可以承载该文件。IPFS可以更新为指向不同的散列值,但是只要原始节点的散列值现在或将来任何时候都可以访问数据,至少有一个节点仍在托管数据。
存储寻址方案
IPFs与典的基于云的互联网存储系统的区别在于,IPFs是基于内容(内容寻址)的,而不是基于位置(位置寻址)。位置寻址存储系统的一个例子是HTTP协议。当存储系统基于位置时,它指的是使用DNS服务器通过其主机名来标识服务器。这将通过映射到用户友好名称的逻辑寻址方案(如IP地址)跟踪主机。如果主机更改了其名称或地址,则还必须在名称服务表中对其进行修改。
基于内容的地址存储属于从网络中获取的数据内容。这需要确定文件物理位置的内容标识符。在这种情况下,数据是基于其加密散列而不是逻辑地址来访问的,就像文件的数字指纹一样。无论上传者、上传时间和文件上传时间如何,网络总是根据哈希返回相同的内容。
在速度和可靠性方面,IPFs可以比HTTP表现得更好。内容寻址存储系统可以从离用户最近的各种服务器(如IPFs网络上的对等点或节点)提供文件,而不是依赖服务器位置来获取文件。换句话说,用户只需要搜索一个文件,而不必搜索引擎引用位置,即服务器名称或地址。相反,他们将根据文件的散列值引用该文件,并可以从网络上最近的可用节点获取该文件。
安装IPF
有两个节点选项可用于IPF的公共安装。
一。PFS desktop直接在计算机(笔记本电脑或台式机)上托管和共享文件。您可以安装IPFs配套应用程序,以允许使用web浏览器访问本地节点。
2。IPFs clustermdash;为了大规模托管和共享文件,该集群支持跨IPFs节点组协调和协调pinet。这允许从分布式节点构建大文件存储系统。
安装IPFs desktop之后,配置节点首先初始化存储库。以下是您在windows PowerShell或MAC/Linux终端shell中键入的命令。
ipfsinit;初始化ipfsnodeat/Users/lt;用户名gt;/。转到ipfsgt;生成2048位rsakeypair…完成gt;小便ridentity:Qmcpo2iLBikrdf1d6QU6XuNb6P7hwrbNPW9kLAH8eG67zgt;启动,输入:gt;gt;ipfscat/ipfs/qmywapjz5czsna625s3xf2nemtypphdwez79ojwnpbdg/readme
**使用IPFs时执行此初始化。下一步是运行IPFs守护进程,将节点连接到网络。
ipfsdaemongt;初始化后台程序…gt;APIsererlisteningon/ip4/127.0.0.1/tcp/5001gt;**服务器listeningon/ip4/127.0.0.1/tcp/8080
这将在本地计算机127.0.0.1上初始化并运行守护程序。它启动一个API服务器监听TCP端口5001和一个**服务器监听TCP端口8080。现在您应该可以通过发出swarm命令来查看网络上的其他IPFs节点。应该是这样的:
.8.190/tcp/4002/p2p/QmdXzZ25cyzSF99csCQmmPZ1NTbWTe8qtKFaZKpZQPdTFB
如IPFs文档中所述,pees采用以下格式:
lt;传输地址gt;/p2p/lt;公钥哈希gt;
这是一个在网络上获取文件的示例命令:
ipfscat/ipfs/QmW2WQi7j6c7UgJTarActp7tDNikE4B2qXtFCfLPdsgaTQ/类别jpggt; 类别jpgopencat.jpg
这将从指定的对等方获取命名的类别jpgldquo;然后在本地打开。
IPFs的JaaScript
下面是使用runkit NPM和基础设施**(对公众免费)将数据写入IPFs网络的测试代码。
constIPFS=require(’ipfs-mini’1.1.5);constIPFS=newIPFS({host:’ipfs.infura.io公司’, 端口:5001,协议:’https’});constdata=“在网络上写入测试消息”;ipfs.add文件(数据,(err,散列)=gt;{if(err){returnconSOLe.log返回控制台(错误);}控制台.log() https://ipfs.infura.io/ipfs/’+hash);})
在这段代码中,我使用require函数Node.节点请求打开“IPFs Mini”包。然后我配置了Internet**ldquo;ipfs.infura.iordquo访问。然后我将数据指定为字符串ldquo;在网络上编写测试消息。我创建一个条件,如果出了问题,返回一个错误,否则我需要散列值,控制台记录**URL和散列值。
结果将返回一个唯一的散列:qmqhadgstsru7aynn25kwrbwtxp1gb9kowdem32uf8td
我现在可以输入URL链接:https://ipfs.infura.io/ipfs/qmqhadgstsru7aynn25kwrbwtxp1gb9kowdem32uf8td
这将显示我刚刚放入基础设施**的数据。数据不是持久性的,在几天或几周的不活动后将被删除。对于**性数据存储,需要在内部或云上使用专用服务器。
IPF的好处
一。去中心化-文件存储在节点网络中,并由哈希引用。激励节点通过filecoin托管文件。
2。容错-如果一个节点出现故障,只要有承载该文件的节点,该文件仍然可用。没有单一的失败点。
3可扩展性:承载文件的节点越多,网络上的用户将越快、可用性越高。
四。持久存储——IPFS关注数据存储:只要可以访问与原始数据和任何新版本对应的对象,就可以检索整个文件历史记录。假设数据块存储在整个网络的本地,并且可以无限期地缓存,这意味着IPFs对象可以**存储而无需修改。
5个。**审查,内容上传到IPF后,任何中央机构都不能删除,因为它是通过网络分发的。仅从一个节点删除文件不会完全删除该文件。这意味着其他节点上仍有可用的副本。
IPFs的缺点
不方便用户使用
IPFs网络上的文件索引不是很友好。例如,要通过散列ID访问文件,需要输入:ipfs.io/ipns/QmeQe5FMs8PNspzTQ3LRz1iMhdq9K34TQnsCP2jqt8wV
开发人员可以使用链接来共享文件,但这可能会变得冗长和耗时。IPFs使用IPNs(星际名称系统)来查找文件。IPNs将尝试使名称解析更加用户友好,就像互联网上的DNS一样。
有一个GUI和一个基于web的扩展IPFs支持应用程序,用户可以使用它来更方便地访问。然而,由于学习曲线变陡,它仍然不像普通智能手机应用程序那样用户友好或易于使用。这并不像点击网页上的按钮那么简单。用户必须知道IPFs如何使用它。
数据隐私和合规性
使用IPFs将客户数据(如个人身份信息(PII),如KYC)放在公共共享存储系统上并不是**的用例。首先,它违反了存储遵从性规则,该规则规定KYC数据不能也不应该在公共云或共享存储空间上公开,并且应该包括IPF。在公共云上,对组织管理数据的控制较少。金融机构的严格要求是将数据和数据备份存储在受监管的存储系统上,而不是公共存储系统上。这里的另一个问题是,因为它在公共网络上,所以任何节点都可以托管KYC数据。这进一步违反了关于谁可以在哪里存储数据的严格法律。
第二个问题是,所有节点都必须遵守金融系统的规章制度,这意味着它们必须具有备份、强大的安全性、容错性等。在公共网络上,这些节点是随机的,不能被设置为遵循规则,因为它们不必信任您的系统。他们还可以向网络上的其他用户提供KYC数据,恶意参与者可以访问这些数据,即使行为是加密的。它们可以自己解密,这为它们提供了一种方法。
不一致的数据
在IPFs上,节点很少有动力在网络上维护数据的长期备份。节点可以选择清除缓存的数据以节省空间,这意味着理论上,如果没有剩余的节点托管数据,文件最终将随着时间而消失。在目前的采用水平上,这不是什么大问题,但从长远来看,备份大量数据需要强大的经济实力。
这里的问题是,如果公司使用公共IPFs网络进行文件存储,则节点可以选择在将来的任何时候不承载文件。如果所有节点都决定这样做,则除非IPFs托管在专用网络上,否则无法将文件保留在网络上。根据IPFs协议,如果你添加到IPFs网络的文件没有被很多人访问,它将消失。你的数据需要在网络上更受欢迎才能永远保存。如果不希望数据从IPFs网络中消失,则必须将数据固定到节点。修复确保至少您的节点通过网络拥有数据。
因为IPFs是去中心化的,所以所有托管节点都有您上载的文件的副本。通常,如果文件不是活动的或经常使用的,它将被删除。这可能是一个非常有争议的问题,因为有时文件已经存档,不经常使用,有时需要立即删除。当已经存储在IPFs上的数据发生更改时,其散列也必须更改。如果有新版本,则必须上载,但不会覆盖旧版本。这会影响到文件的现有链接,因此原始文件保持不变,但现在需要为新文件创建新链接。
在更新KYC数据时,这可能是一个挑战。这些文档过期后,必须上载新版本以替换旧版本。IPFs提供了版本控制,但一旦它在公共网络上,就变得很棘手,因为有许多版本可从不同的节点获得。旧版本不会自动更新。旧的必须存档或销毁。IPFs不能像AWS或azure那样归档文件。
IPFs确实有一个版本控制系统。这是IPFs的Merkle-DAG体系结构的一个特性,它允许您构建分布式版本控制系统(VCS)。***的例子是GitHub,它使开发人员能够轻松地同时在项目上进行协作。GitHub上的文件使用Merkle DAG进行存储和版本控制。它允许用户独立地**和编辑一个文件的多个版本,存储这些版本,然后与原始文件合并和编辑。但从许多开发人员的角度来看,理论上这几乎是可行的,但还没有一种经过充分测试和验证的有效技术(在撰写本文时)。如果我们想实施它,就需要更多的时间和开发成本,从长远来看这可能是好事。
———————————–
作者:文斯·塔博拉
原始链接:https://medium.com/0xcode/using-ipfs-for-distributed-file-storage-systems-61226e07a6f
翻译:链三丰
———————————–
相关文章如下:
如何使用IPFs和火币网 ENS自动发布去中心化网站
区块链研究实验室Node.节点构建IPFs应用程序
区块链研究实验室的文件是否安全和保密,足以存储在IPF上?
文章标题:区块链研究实验室在分布式文件存储系统中使用IPFs
文章链接:https://www.btchangqing.cn/45143.html
更新时间:2020年06月28日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。