Filecoin系列 - IPLD 技术分析

1. 用途

1.1 存储数据

为了成功地将数据加到 Filecoin 网络, 需要成功完成以下步骤:

  1. 客户端导入数据生成CAR文件: 数据必须打包成 CAR file (内容可寻址档案) - CAR是IPLD规范的序列化归档文件.
  2. 存储交易: 存储供应商和客户之间的存储交易必须由客户发起, 并由存储供应商接受。
  3. 传输CAR文件: 数据必须传输给存储供应商。
  4. 存储供应商必须将数据放在一个扇区(Sector)中,封包并提交证明给Filecoin网络
存储时的数据表示:

要存储的文件 -> IPLD DAG -> 序列化为CAR文件(它的Payload就是IPLD DAG) -> 生成Piece(包含PayloadCID, PayloadZero-Padding) -> 派生PieceCID(也叫CommP,是Payload+Zero-Padding的Merkle 根哈希) -> 若干个Piece 组成UnsealedSector -> CommD(Pieces的 Merkle 根) -> SealedSector(密封该扇区) -> CommRLast(sealedSector的Merkle 根) 和 CommC(lable的Merkle 根哈希) -> CommR(复制承诺) = Hash(CommC || CommRLast)

  • *PayloadCID*在 CAR’ed 和 un-CAR’ed 结构之间是通用的
  • CAR文件用于存储和网络传输 IPLD数据块
  • 生成的 .car 文件用额外的零位填充,以便文件生成二叉 Merkle 树。要获得干净的二进制 Merkle 树,.car 文件大小必须是二的某个幂 (^2) 。一个名为 的填充过程Fr32 padding将每 256 位中的每 254 位添加2个零位应用于输入文件。
  • *检索交易是根据PayloadCID*协商的

img

该图显示了 Piece 及其证明树的详细组成,包括完整和带宽优化的 Piece 数据结构。

1.2 检索数据

检索市场基于PayloadCID。PayloadCID代表文件UnixFS版本的 IPLD DAG根的哈希。在此阶段,该文件是具有IPFS样式表示形式的原始系统文件。为了使客户能够在检索市场上请求一些数据,他们必须知道PayloadCID

检索时的数据表示:

要检索的文件的PayloadCID -> 未密封文件(可能需要解封获得) -> un-CAR’ed 文件 -> 按IPLD DAG传输 -> 得到目标文件

1.3 数据传输

  • JS GraphSync 是 JavaScript 中 GraphSync 协议的实现。当用户想要在 Filecoin 网络中存储数据时,在数据传输过程中使用了 GraphSync。GraphSync 允许本地节点请求远程节点以获取远程节点 IPLD 数据的结果。
  • Filecoin 可以使用 GraphSync 来同步区块链并以去信任的方式传输 DAG 化的内容。对于网络参与者来说,JS GraphSync的实现可以实现网页上的点对点同步,使浏览器能够完成IPFS数据同步。

2. IPLD原理

2.1 IPLD的协议组成

  • CID(Self-describing content-addressed identifiers for distributed systems):基于内容寻址的自我描述标识
  • IPLD tree:基于 JSON、Protobuf和路径导航的跨协议的数据模型
  • IPLD Resolvers: IPLD转换器,可以添加新的协议到IPLD里面

2.2 IPLD对象由两个部分组成

  • Data — 大小 < 256 kB 的非结构化二进制数据块。
  • Links — 链接结构数组。这些是指向其他 IPFS 对象的链接。每个 IPLD 链接有 3 个部分:
    • Name — 链接的名称
    • Hash  — 链接的 IPFS 对象的哈希
    • Size——链接的 IPFS 对象的累积大小,包括跟随它的链接

2.3 Merkle DAG

IPLD使用 Merkle DAG(又名有向循环图) 数据结构来链接数据块

IPLD 是一组标准和实现,用于创建可普遍寻址和链接的去中心化数据结构。这些结构允许我们为数据做 URL, 就像超链接为 HTML 网页所做的事情。

Merkle DAG 提供了一种实现重复数据删除的直接方法,通过将冗余部分编码为链接来有效地存储数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Merkle DAG 是许多不同项目的基本构建块:Git 等版本控制系统、以太坊等区块链、IPFS 等去中心化网络协议以及 Filecoin 等分布式存储网络都使用Merkle DAG 用于存储和通信数据!

可以解析 IPLD 数据和 CID 的系统可以引用来自其他系统的内容:例如,我们可以有一个引用 IPFS 中数据 blob 的 Filecoin 交易,或者一个引用特定 Git 提交的基于区块链的智能合约!CID 使我们能够为每条数据提供唯一的全球地址;Merkle DAG 和 IPLD 为我们提供了一种遍历和理解数据结构的方法。它们共同构成了一个由相互关联和相互理解的数据生态系统组成的全球网络的基础。

3. 支持链接类型

参考: 深入理解IPFS(2/6):什么是星际关联数据(IPLD)?

3.1 链接数据

IPLD 允许我们将所有散列链接的数据结构视为统一信息空间的子集,将所有通过散列链接数据的数据模型统一为 IPLD 的实例。这意味着可以从全局命名空间中完全不同的数据结构链接和引用数据。在 Filecoin 中被广泛使用:

  • 所有系统数据结构都使用 DAG-CBOR(IPLD 编解码器)存储。
  • 存储在 Filecoin 网络上的文件和数据也使用各种 IPLD 编解码器(不一定是 DAG-CBOR)存储。

因为 IPLD 是为内容寻址数据设计的,所以它还在其数据模型中包含一个“链接”原语。实际上,链接使用 CID规范。IPLD 数据被组织成“块”,其中一个块由 原始编码数据 及其 内容地址 或 CID 表示。每个内容可寻址的数据块都可以表示为一个块,这些块一起可以形成一个连贯的图或 Merkle DAG。

3.2 IPLD 选择器

IPLD 选择器还可用于寻址链接数据结构中的特定节点。

–> 3.3 已能链接的异构数据

通过 IPLD,*可以跨协议遍历链接,让您可以探索数据,而无需考虑底层协议*

  • Git
  • Bitcoin
  • Ethereum
  • IPFS
img

4. 支持可验证性

可通过CID来验证一棵 Merkle DAG 树

通过 Ipld 数据结构持久化这种状态以及通过使用检查状态并可能纠正错误的初始化例程来实现的。

所有系统数据结构都使用 DAG-CBOR(IPLD 编解码器)存储。DAG-CBOR 是 CBOR 的一个更严格的子集,具有预定义的标记方案,专为哈希链接数据 DAG 的存储、检索和遍历而设计。与 CBOR 相比,DAG-CBOR 可以保证确定性。

5. 不支持错误恢复-纠删码(Erasure Code)

参考: EC纠删码原理

什么是Erasure Code ?
Erasure Code(EC),即纠删码,是一种前向错误纠正技术(Forward Error Correction,FEC,说明见后附录),主要应用在网络传输中避免包的丢失, 存储系统利用它来提高 存储 可靠性。相比多副本复制而言, 纠删码能够以更小的数据冗余度获得更高数据可靠性, 但编码方式较复杂,需要大量计算 。纠删码只能容忍数据丢失,无法容忍数据篡改,纠删码正是得名与此。

EC的定义

Erasure Code是一种编码技术,它可以将n份原始数据,增加m份数据,并能通过n+m份中的任意n份数据,还原为原始数据。即如果有任意小于等于m份的数据失效,仍然能通过剩下的数据还原出来。

EC的分类

纠删码技术在[分布式存储](http://www.chinabyte.com/keyword/分布式存储/ //t _blank) 系统中的应用主要有三类: 阵列纠删码(Array Code: RAID5、RAID6等)、RS(Reed-Solomon)里德-所罗门类纠删码和LDPC(LowDensity Parity Check Code)低密度奇偶校验纠删码。

  • 磁盘阵列存储(RAID 5、RAID 6)
  • 云存储(RS): 涉及到矩阵求逆,采用高斯消元法
  • LDPC码目前主要用于通信、视频和音频编码等领域。与RS编码相比,LDPC编码效率要略低,但编码和解码性能要优于RS码以及其他的纠删码,主要得益于编解码采用的相对较少并且简单的异或操作

RS Code

  • 编码:给定n个数据块(Data block)D1、D2……Dn,和一个正整数m,RS根据n个数据块生成m个编码块(Code block),C1、C2……Cm。

    img

    上图最左边是编码矩阵(柯西矩阵),编码矩阵需要满足任意n * n子矩阵可逆。编码矩阵上部是单位阵(n行n列),下部是m行n列矩阵。下部矩阵可以选择范德蒙德矩阵或柯西矩阵。

  • 解码:对于任意的n和m,从n个原始数据块和m个编码块中任取n块就能解码出原始数据,即RS最多容忍m个数据块或者编码块同时丢失。

    1. 假设D1、D4、C2丢失,从编码矩阵中删掉丢失的数据块/编码块对应的行。

      imgimg

    2. 由于B’ 是可逆的,记B’的逆矩阵为 (B’^-1),则B’ * (B’^-1) = I 单位矩阵。两边左乘B’ 逆矩阵。

      imgimg

    3. 恢复原始数据D, 对D重新编码,可得到丢失的编码码

      img

EC vs RAID

正如许多分布式存储那样,三副本的容量利利 用率始终是个问题,特别是对于海量⾮结构化数据和冷存储这些在意性价比的应用来说。相比之下,纠删码(Erasure Code)能够提供接近于本地 RAID 5/6 的有效磁盘空间,代价是牺牲了性能。纠删码在随机写⼊,特别是改写和重构(Rebuild)时产生的 I/O 惩罚较大,对应的集群网络流量比副本保护模式要大。

结论

  • IPLD支持链接类型, 所以它的块数据可以是要链接的CID (即要链接的数据可以不在本地), 所以才叫内容可寻址数据结构
  • IPLD已支持的异构数据: Git, Bitcoin,Ethereum,IPFS. 不确定支不支持filecoin上的sector数据
  • IPLD本身不包含纠删码技术, 得自己在存储底层实现. (如采用22+2的纠删码技术,将空间利用率提升到了90%以上,相较于3副本策略,硬件成本缩减超过50%)

截屏2020-12-03 下午2.10.37

附录

名词解释

CID

IPFS 使用的内容标识符. CID 是一个散列摘要,其前缀是其散列函数和编解码器的标识符。这意味着您可以仅使用此标识符来验证和解码数据。

IPLD

IPLD (InterPlanetary Linked Data ), IPLD 是为内容寻址数据设计的,所以它还在其数据模型中包含一个“链接”原语。实际上,链接使用 CID规范。IPLD 数据被组织成“块”,其中一个块由原始编码数据及其内容地址或 CID 表示。每个内容可寻址的数据块都可以表示为一个块,块一起可以形成一个连贯的图,或 Merkle DAG。

  • IPFS 使用IPLD 来管理和链接所有数据块**。**

  • Filecoin 节点的 IPLD 存储是哈希链接数据的本地存储

UnixFS

建立在 IPLD Merkle-Dags 之上的文件格式

DAG-CBOR

Filecoin 系统数据结构都使用 DAG-CBOR(一种 IPLD 编解码器)存储, 具有预定义的标记方案,专为哈希链接数据 DAG 的存储、检索和遍历而设计。

Filecoin上, IPLD DAG 经 DAG-CBOR 序列化到 CAR文件

DAG-PB

IPFS中 IPLD 序列化为CAR文件的编解码器

CAR

CAR格式(Content Addressable aRchives)可用于将IPLD块数据形式的内容可寻址对象存储为字节序列;通常在具有.car文件扩展名的文件中。

Piece

Piece是用户想要存储在 Filecoin 上的数据的主要记账单位和协商单位。 Piece不是一个存储单元,它没有特定的大小,而是以Sector的大小为上限。一个 Filecoin Piece 可以是任何大小,但如果一个 Piece 大于矿工支持的 Sector 的大小,则必须将它分成更多的 Pieces,以便每个 Piece 适合一个 Sector。

每个 Filecoin Piece 是一个 CAR 文件,包含一个IPLD DAG,有对应的数据CID和piece CID。

Bitswap

IPFS 中的数据传输算法

GraphSync

Filecoin 中的数据传输算法, 使用 GraphSync 来同步区块。

img

数据可用性

数据可用性(Data Availability)是指发生了各种物理上的故障,系统仍然可用,数据不会丢失,一般通过RAID、副本、纠删码等技术实现。IPFS本身是不对可用性做保障的。因为添加的文件,默认只会放到本地节点。其他节点访问了相关的文件,才会在自己的机器上面存一份。但对于企业应用来说,数据一经写入,一般来说就需要有冗余,以防止各种意外情况导致数据损坏。从白皮书来看,Filecoin会使用副本或者纠删码来实现相关的功能。其他基于存储的区块链项目,也或多或少要涉及到这块才有价值。如果使用原生IPFS,那基于ipfs-cluster可以实现数据的自动冗余,但每个节点都存一份数据开销的确非常大。因此,基于IPFS提高数据可靠性方面的努力,是反映IPFS方案厂商技术实力的重要方面。

Filecoin的纠删码技术没找到

七牛云KODO存储集群

图片

出盘率可提高到*90%*以上,同时提供多副本的容错能力。多种纠删码(EC)方案灵活部署,满足各种规模存储的建设需要。提供SDK、文件接口等对接方案,适配各种算力方案。完整的数据防误删除,数据恢复机制,保证数据安全可靠。

优化了存储性能,全面提升扇区读写效率。采用了对象存储模型,从key直接到value,无目录树查找损耗,满足千亿文件数低延迟访问。

针对时空证明PoST, 对WindowPoST利用元数据服务快速定位数据,将多个查询请求合并,单个Partition(2349个32G扇区的情况下)可在18.8秒完成读取。对WinningPoST,将读请求合并,66*9次随机读合并为一个请求,大幅降低IO消耗和证明时间。

**灵活应对存储小集群、大集群。**根据出盘率、故障容忍性与存储容量和性能需求,设计集群规模和EC模型,如6+2,8+2,15+3等,支持一定数目的机器故障,不影响数据写入与时空证明。

**扩容方案最小支持单存储节点。**推荐根据当前EC规则扩容对应的数量,同时也可以根据需求更改EC,满足提升出盘率、容错性的新需求,应对算力爆发式增长等场景。

参考

  • 深入理解IPFS(2/6):什么是星际关联数据(IPLD)?
  • EC纠删码原理
  • 杉岩对象存储当底座,IPFS:这下稳了

往期精彩回顾:
区块链知识系列
密码学系列
零知识证明系列
共识系列
公链调研系列
BTC系列
以太坊系列
EOS系列
Filecoin系列
联盟链系列
Fabric系列
智能合约系列
Token系列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/84536.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apptrace如何帮我精准追踪移动广告效果?

开发者视角&#xff1a;Apptrace如何帮我精准追踪移动广告效果&#xff1f;​​ 作为独立开发者&#xff0c;我最头疼的就是​“广告投放到底有没有用&#xff1f;”​——钱花出去了&#xff0c;用户是刷量机器人还是真实用户&#xff1f;哪个渠道的ROI最高&#xff1f;Apptr…

【MySQL篇07】:redo log日志与buffer pool详解

文章目录 1. Buffer Pool 缓冲池2. redo log (重做日志)redo log 的作用&#xff1a;为什么需要 redo log buffer&#xff1f;什么时候刷盘呢&#xff1f; 3. 总结一下 redo log 和 Buffer Pool 在更新数据时的协同工作关键组件关系图刷盘完成后 1. Buffer Pool 缓冲池 首先&a…

Qt Library库系列----Serial串口

前言 每次写串口相关的功能时&#xff0c;总是需要重新写或者复制原来写过的文件&#xff0c;容易出错不说&#xff0c;这也不是码农的风格&#xff0c;所以还是得有一套自己得代码库&#xff0c;方便调用&#xff0c;又能保持神秘感。 一、开发需求 1.有个实例类&#xff1b;…

第八节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 用户管理(下)

Vben5 系列文章目录 💻 基础篇 ✅ 第一节:Vben Admin 最新 v5.0 (vben5) 快速入门 ✅ 第二节:Vben Admin 最新 v5.0 (vben5) 快速入门 - Python Flask 后端开发详解(附源码) ✅ 第三节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 对接后端登录接口(上) ✅ 第四节:Vben Ad…

Redis 性能瓶颈时如何处理?

当 Redis 遇到性能瓶颈时&#xff0c;需要从多个维度进行排查和优化。以下是系统化的解决方案&#xff0c;涵盖硬件、配置、数据模型、网络等关键点&#xff1a; 一、硬件资源优化 内存瓶颈 现象&#xff1a;频繁触发 OOM 或 used_memory 接近物理内存。解决&#xff1a; 升级服…

多相机三维人脸扫描仪:超写实数字人模型制作“加速器”

超写实数字人&#xff0c;又称“数字分身”&#xff0c;是以真人形象为原型构建的高仿真虚拟形象&#xff0c;按维度可分为2D数字人与3D数字人。这类数字人已广泛应用于影视制作、游戏交互、品牌直播等场景&#xff0c;其核心价值在于通过技术手段实现真人形象的数字化复刻&…

ceph 自动调整 pg_num

要让 Ceph 的 pool 自动调整 pg_num(PG 数量),你需要启用 PG autoscaler。这是从 Ceph Octopus(15.x) 开始引入的功能,能根据池的容量和对象数量自动建议或调整 pg_num,以实现负载均衡。 ✅ 一步步开启 Pool 的 pg_num 自动调整 1. 启用 PG autoscaler 模块(通常默认启…

Python Beautiful Soup 4【HTML/XML解析库】 简介

全面剖析大模型 图解大模型&#xff1a;生成式AI原理与实战 大语言模型大模型应用开发Transformer DeepSeek模型原理开发深度学习 图灵出品 大模型强化学习详解 大模型算法&#xff1a;强化学习、微调与对齐&#xff08;全彩&#xff09;详解强化学习 RLHF GRPO DPO SFT CoT D…

AI Agent开发与安全

AI Agent的核心演进 Level 1&#xff1a;LLM Agent&#xff08;聊天机器人&#xff09; 特点&#xff1a;靠提示词工程赋予人设&#xff08;如星座占卜、角色扮演&#xff09;&#xff0c;但存在幻觉问题&#xff0c;输出不可控。局限&#xff1a;娱乐性强&#xff0c;难胜任严…

NumPy玩转数据科学

本文在创作过程中借助 AI 工具辅助资料整理与内容优化。图片来源网络。 文章目录 一、引言二、NumPy 概述2.1 NumPy 的定义与发展2.2 NumPy 的重要性 三、NumPy 的多维数组支持3.1 多维数组的概念3.2 多维数组的创建与操作3.2.1 数组的创建3.2.2 数组的索引和切片3.2.3 数组的运…

【uniapp小程序开发】图表组件ucharts的使用(入门)

一、插件的安装 安装非常简单&#xff0c;打开uniapp的插件市场&#xff0c;导入到项目中即可 下载地址&#xff1a;https://ext.dcloud.net.cn/plugin?id271 二、开始实践 先看页面的效果 页面中实现了三个基本图形的展示&#xff1a;折线图、饼图和柱状图。 上图左一&a…

APISIX+etcd高可用集群部署方案详解

#作者&#xff1a;任少近 文章目录 一、背景二、部署etcd1、etcd的svc部署yaml2、Etcd 服务定义说明3、etcd的statefulset部署yaml4、Etcd 状态集&#xff08;StatefulSet&#xff09;配置说明5、查看集群状态 三、部署apisix的deployment部署1、apisix部署yaml文件2、APISIX …

Excel常用公式大全

资源宝整理分享&#xff1a;https://www.httple.net Excel常用公式大全可以帮助用户提高工作效率&#xff0c;掌握常用的Excel公式&#xff0c;让数据处理和计算工作更加便捷高效。了解公式学习方法、用途&#xff0c;不再死记硬背&#xff0c;拒绝漫无目的。 命令用途注释说…

什么是Seata?

深入解析Seata&#xff1a;分布式事务的终极解决方案 什么是Seata&#xff1f; Seata&#xff08;Simple Extensible Autonomous Transaction Architecture&#xff09;是一款开源的分布式事务解决方案&#xff0c;由阿里巴巴中间件团队于2019年1月发起并开源&#xff08;最初…

【系统规划与管理师第二版】1.3 新一代信息技术及发展

一、物联网 物联网&#xff08;IoT&#xff09;是指通过信息传感设备&#xff0c;按约定的协议将任何物品与互联网相连接&#xff0c;进行信息交换和通信&#xff0c;以实现智能化识别、定位、跟踪、监控和管理的网络。物联网主要解决物品与物品&#xff08;T2T&#xff09;、人…

在Spring Boot中自定义JSON返回日期格式的指南

在开发Spring Boot应用时&#xff0c;很多时候需要在返回的JSON数据中以特定格式显示日期和时间。例如&#xff0c;使用LocalDateTime、Date等类型的字段时&#xff0c;默认的序列化格式可能不是你期望的路径。本文将介绍如何在Spring Boot中实现控制返回JSON数据的日期格式&am…

【大数据高并发核心场景实战】 - 数据持久化之冷热分离

大数据高并发核心场景实战 - 数据持久化之冷热分离 当云计算平台的业务后台处理工单突然接入客服系统的请求洪流&#xff0c;每日新增10万工单&#xff0c;3000万主表1.5亿明细表的数据库开始呻吟——是时候请出「冷热分离」这剂退烧药了&#xff01; 一、业务场景&#xff1a;…

【AI Study】第四天,Pandas(6)- 性能优化

文章概要 本文详细介绍 Pandas 的性能优化技术&#xff0c;包括&#xff1a; 内存优化计算优化大数据处理实际应用示例 内存优化 数据类型优化 # 查看数据类型 df.dtypes# 查看内存使用情况 df.memory_usage(deepTrue)# 优化数值类型 # 将 float64 转换为 float32 df[floa…

c++系列之智能指针的使用

&#x1f497; &#x1f497; 博客:小怡同学 &#x1f497; &#x1f497; 个人简介:编程小萌新 &#x1f497; &#x1f497; 如果博客对大家有用的话&#xff0c;请点赞关注再收藏 &#x1f31e; 智能指针的使用及原理 AII&#xff08;Resource Acquisition Is Initializatio…