在分布式文件存储系统中使用IPFS

2020-06-28 15:55 栏目:经验之谈 来源:网络整理 查看()

IPFS(星际文件系统)是基于区块链的内容的分散存储解决方案。IPFS使用P2P(点对点)网络模式进行文件共享,这种模式分散分布在许多计算机或节点上。文件被分解成不同的部分,并存储在节点网络中,节点通过散列来跟踪文件。在查找文件时,原始文件将根据其哈希值重新创建。

在分布式文件存储系统中使用IPFS

使用分布式哈希表存储和检索文件系统是IPFS的核心创新。它类似于BitTorrent协议,但是它们以不同的方式指向共享文件。IPFS在区块链将文件存储为键值对。数据被分成256千字节的块,分散在节点或计算机网络中。有效协调,实现节点间的有效访问和搜索。BitTorrent不使用区块链,而是依靠Torrent来指向文档。您可以让不同的种子指向同一个文件,但是在IPFS,您只需要一个哈希ID指向该文件。

文件发布到IPFS的方式不同于文件发布到云的方式。所有关于IPFS的数据都通过它的散列ID来寻址。当有人请求数据时,他们直接通过哈希ID而不是实际文件本身来请求数据。因此,IPFS为文件的实际位置提供了一个抽象,所以实际的物理位置与应用程序无关。这种抽象消除了应用程序开发人员的复杂性。

在分布式文件存储系统中使用IPFS

节点在网络上托管文件。IPFS区块链的文件硬币等数字资产鼓励他们这样做。激励节点为其计算机或服务器上的托管文件提供存储空间。一些文件被分配了一个散列标识,然后可以通过网络分发。其他节点也可以托管同一文件,从而允许制作多个副本。想要这个文件的用户将根据离他们位置最近的节点的哈希值来访问它。

托管文件的所有节点都将引用根哈希,即文件的哈希ID。无论何时发出文件请求,用户都会根据文件的根哈希值,使用存储文件的最近节点的哈希值来下载文件。IPFS上没有重复项,因为在上传文件时,散列将总是引用文件或文件的一部分。

将文件放入IPFS区块链后,它将保持可用状态,直到通过解除文件绑定并运行垃圾收集例程将其删除。文件本身可以有不同的节点被其散列指向。只要有一个指向文件的哈希,不同的节点也可以托管该文件。IPFS可以被更新以指向不同的散列值,但是只要原始节点的散列值现在或将来的任何时候可以访问数据,至少一个节点仍然托管数据。

存储器寻址方案

IPFS和典型的基于云的基于互联网的存储系统的区别在于,它是基于内容的(内容寻址),而不是基于位置的(位置寻址)。位置寻址存储系统的一个例子是HTTP协议。当存储系统基于位置时,它指的是使用DNS服务器通过主机名来识别服务器。这通过映射到用户友好名称(如IP地址)的逻辑块寻址方案来跟踪主机。如果主机更改了名称或地址,还必须在名称服务表中对其进行修改。

基于内容的寻址存储属于从网络获得的数据的内容。这需要确定文件物理位置的内容标识符。在这种情况下,数据是根据加密的散列而不是逻辑地址来访问的,就像文件的数字指纹一样。网络将总是基于散列返回相同的内容,而不管文件的上传者、上传时间和上传时间。

就速度和可靠性而言,IPFS可以比HTTP做得更好。内容寻址存储系统可以从离用户最近的各种服务器(如IPFS网络上的对等点或节点)提供文件,而不是依赖服务器位置来获取文件。换句话说,用户只需要搜索一个文件,而搜索引擎不会引用位置,即服务器名称或地址。相反,它们将通过文件的哈希值来引用该文件,并且可以从网络上最近的可用节点获取该文件。

安装IPFS

有两个节点选项可用于IPF的公共安装。

1.PFS桌面—直接在计算机(笔记本电脑或台式机)上托管和共享文件。您可以安装IPFS配套应用程序,允许使用网络浏览器访问本地节点。

2.IPFS集群—对于大规模的文件托管和共享,该集群支持跨IPFS节点集群的Pinets的协调。这允许通过分布式节点构建大规模文件存储系统。

安装IPFS桌面后,配置节点应该首先初始化存储库。以下命令是从微软视窗操作系统或苹果电脑/Linux终端外壳输入的。

ipfs初始化

正在初始化位于/Users/username/的ipfs节点。go-ipfs

生成2048位RSA密钥空气.完成的

对等标识: qmcpo 2 ilbikrd f1 D6 qu 6 vxunb 6 p7hwrbnpw 9 klah8 eg 67 z

要开始,请输入:

ipfs cat/ipfs/QmyPajzv5 czsna 625 s3x F2 nemtygpphdwez79 ojwnpbdg/readme

第一次使用IPFS时执行此初始化。下一步是运行IPFS守护进程,将节点加入网络。

ipfs守护程序

正在初始化守护程序.

API服务器侦听/ip4/127.0.0.1/tcp/5001

网关服务器侦听/ip4/127.0.0.1/tcp/8080

这将在本地计算机127.0.0.1上初始化并运行守护程序。它启动一个监听TCP端口5001的API服务器和一个监听TCP端口8080的网关服务器。现在,通过发出swarm命令,您应该可以看到网络上的其他IPFS节点。应该是这样的:

ipfs群对等体

/ip4/104 . 131 . 131 . 82/TCP/4001/P2P/Qmacpdmgv2bgheyerunrqae3n 8 szbutfsmvsqqlUvj

/ip4/104 . 236 . 151 . 122/TCP/4001/P2P/qmsolju 6 M7 xth 32 kvt 3886 qryqxazb1kshaanjgw 36 yx

/ip4/134 . 121 . 64 . 93/TCP/1035/P2P/qmwhyrpwqnsz 1 wxhr 219 oojdytvxjpyzudupdpdsaovn 5

/ip4/178 . 62 . 8 . 190/TCP/4002/P2P/Qmdxzz 25 Cyzsf 99 Cscqmmpz 1n tbwte 8 qtkfazkpzQpdtfb

如IPFS文件所述,pees采用以下格式:

传输地址/P2P/公钥散列

以下是在网络上获取文件的命令示例:

cat.jpg

开放cat.jpg

这将从指定的对等点获得一个名为“cat.jpg”的名称,并在本地打开它。

IPFS的Javascript

以下是使用Runkit NPM和Infura网关将数据写入IPFS网络的测试代码(对公众免费)。

IPFS常数=要求(‘ipfs-mini’1 . 1 . 5);

const ipfs=新IPFS({host: 'ipfs.infura.io ',port: 5001,protocol : ' https ' });

常量数据=“在网络上写测试消息”;

ipfs.add(数据,(错误,哈希)={

如果(错误)

返回console.log(错误);

}

console . log(' https://ipfs . infura . io/ipfs/'哈希);

})

在这段代码中,我使用require函数在节点上请求“ipfs-mini”包。JS.然后我配置对IPFS信息网关的访问。然后,我将数据指定为字符串“在网络上编写测试消息”。我创建一个条件,在出错时返回一个错误,否则我需要一个哈希值,然后控制台记录网关的URL和哈希值。

结果将返回唯一的哈希:qmqhadgstsruv 7 aynn25 kwwtxp1g 9 kowdeim 32u F8 TD

我现在可以输入网址链接

这将显示我刚刚放入Infura网关的数据。数据不是持久的,将在几天或几周不活动后被删除。对于持久数据存储,需要在内部或云中使用专用服务器。

在分布式文件存储系统中使用IPFS

IPFS的优势

1.分散-文件存储在节点网络中,并被哈希引用。鼓励节点通过文件硬币管理文件。

2.容错-如果一个节点失败,只要有一个节点托管该文件,该文件仍然可以使用。没有单一的失败点。

3.可扩展性—托管文件的节点越多,网络上的用户就越快、越多。

4.持久存储——IPFS侧重于数据存储:只要能够访问与原始数据和任何新版本相对应的对象,就可以检索整个文件历史。假设数据块存储在整个网络的本地,并且可以无限期缓存,这意味着IPFS对象可以被永久存储而无需修改。

5.抵制审查——一旦内容被上传到IPFS,任何中央组织都不能删除,因为它是通过网络传播的。仅从一个节点删除它不会完全删除文件。这意味着在其他节点上仍有副本可用。

IPFS的缺点

对用户不友好

在IPFS网上建立文件索引的方式不太方便用户。例如,要通过哈希ID访问文件,您需要输入:ipfs.io/ipns/QmeQe5FTgMs8PNspzTQ3LRz1iMhdq9K34TQnsCP2jqt8wV

开发人员可以使用链接来共享文件,但这可能会变得乏味和耗时。IPFS使用IPNS(星际命名系统)来查找文件。IPNS将努力使域名解析更加用户友好,就像互联网上的域名解析一样。

有一个图形用户界面和一个基于网络的扩展IPFS支持应用程序,用户可以使用它更方便地访问它。然而,由于学习曲线更陡,它仍然不如普通智能手机应用程序那样用户友好或易于使用。这不像点击网页上的按钮那么简单。用户必须知道IPFS是如何工作的,然后才能使用它。

数据隐私和合规性

使用IPFS将客户数据(如个人身份信息(PII,如KYC))放在公共共享存储系统上不是最佳使用情形。首先,它违反了存储合规性规则,该规则规定KYC数据不能也不应该在公共云或共享存储空间上披露,并且应该包括IPFS。在公共云上,对组织管理数据的控制较少。金融机构的严格要求是将数据和数据备份存储在受监管的存储系统上,而不是公共存储系统上。这里的另一个问题是,因为它位于公共网络上,所以任何节点都可以承载KYC数据。这进一步违反了严格规定谁可以在哪里存储数据的法律。

第二个问题是,所有节点都必须遵守金融系统的规章制度,这意味着它们必须有备份、强安全性、容错性等等。在公共网络上,这些节点是随机的,所以它们不能遵守规则,因为它们不必信任你的系统。他们还可以向网络上的其他用户提供KYC数据,即使行为被加密,恶意参与者也可以访问它。他们可以自己解密,这为他们提供了一种方法。

不一致的数据

在IPFS,节点没有动力在网络上维护数据的长期备份。节点可以选择清除缓存的数据以节省空间,这意味着理论上,如果没有剩余的节点托管数据,文件最终将随着时间的推移而“消失”。在目前的采用水平上,这不是一个大问题,但从长远来看,备份大量数据需要强大的经济实力。

这里的问题是,如果公司使用公共IPFS网络进行文件存储,节点可以选择在将来任何时候不托管文件。如果所有节点都决定执行此操作,文件将无法保留在网络上,除非IPFS托管在专用网络上。根据IPFS协议,如果你添加到IPFS网络的文件没有被很多人访问,它将会消失。你的数据需要在互联网上更受欢迎,这样才能永久保存。如果您不想让数据从IPFS网络中消失,您必须修复节点上的数据。固定确保至少您的节点拥有网络上的数据。

因为IPFS是分布式的,所以所有托管节点都有您上传的文件的副本。通常,如果文件不活跃或不经常使用,它就会被删除。这可能是一个非常有争议的问题,因为有时文件被归档并且不经常使用,有时需要立即删除。当已经存储在IPFS的数据发生变化时,其散列也必须发生变化。如果有新版本,必须上传,但旧版本不会被覆盖。这将影响文件的现有链接,因此原始文件保持不变,但现在您需要为新文件创建一个新链接。

在更新KYC数据时,这可能是一个挑战。当这些文档过期时,必须上传新版本来替换旧版本。IPFS提供版本控制,但是一旦它被放到公共网络上,它将变得棘手,因为许多版本可以从不同的节点存在。旧版本不会自动更新。旧的必须存档或销毁。IPFS不能像AWS或Azure一样归档文件。

IPFS确实有版本控制系统。这是IPFS Merkle-DAG结构的一个特点,它允许你建立一个分布式版本控制系统(VCS)。最流行的例子是Github,它使得开发人员可以很容易地同时在项目上进行协作。Github上的文件使用Merkle DAG进行存储和版本控制。它允许用户独立地复制和编辑一个文件的多个版本,存储这些版本,然后将它们与原始文件合并进行编辑。然而,根据许多开发人员的观点,这在理论上几乎是可行的,但是没有经过充分测试和验证的有效技术(在撰写本文时)。如果我们想要实现它,将需要更多的时间和开发成本,这从长远来看可能是好的。

在分布式文件存储系统中使用IPFS

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发