三分钟了解DSP(网络篇)—— Sharding(上)

DSP 发布在 海盗号 17890

一种轻量、加密安全的数据分片(上)

注:本文探讨的分片技术是文件系统的分片技术,而非区块链的分片扩展技术。

DSP (Distributed Storage Protocol) 协议作为分布式文件存储协议,实现了一种高效的文件传输协议,这其中的核心技术为文件分片、分片传输、断点续传等特性提供了支持。

 

数据分片vs流式传输

 

TCP/IP 已经在传输层实现了数据包的传输协议,更底层是二进制字节流的传输,这方面TCP/IP已经做到了近乎完美的实现。对于一般文件应用层协议可以直接利用网络传输,直接把文件发送给对端。在网页端 HTTP Header支持分块传输(Chunked transfer encoding) 底层也是一种基于C/S交互的流式传输。在。DSP协议仅是在传输层做了多种协议支持包括TCP、UDP、QUIC等,提高了传输效率和网络稳定性。但是在DSP协议里,采用了一种轻量级的MerkleDAG的数据分片结构,称之为 Light- MerkleDAG。

 

MerkleDAG

 

MerkleDAG 是一种基于DAG 结构的默克尔树。在比特币的设计中,默克尔树被用作归纳一个区块中的所有交易,同时生成整个交易集合的数字签名,且提供了一种校验区块是否存在某交易的高效途径,就是默克尔路径。

DAG (有向无环图)区别于区块链的链式结构,有向无环图不仅是单一的链式结构,还具备方向。这在文件分块实用性非常大。文件的分块需要有一个根节点,后面的数据块可以依次指向这个根节点。在文件组织、数据遍历的时候这个结构非常有用。

IPFS系统使用两者的结合 Merkle-DAG 作为 IPFS 文件的结构化处理。IPFS对文件进行分块后,根据每个数据块生成基于内容的Hash,在IPFS里称为CID。叶子节点通过Merkle计算生成上层Links节点,Links节点是不包括文件原始数据,仅包含Merkle树结构信息的节点,它指向下一层节点。Links节点通过运算得出文件的Root Hash. 同理 Root Hash也是一个具有Links结构的节点。对它的Links数据进行解析之后,可以看到它包含的数据块。

IPFS网络中分享的文件Hash 也就是 Root Hash。通过对Root Hash的解析,可以获得下一层(L1) 的所有节点。同样对L1每个节点进行解析也可以获得L2....Ln的所有节点。再对 Leaf 节点进行解码后,可以获得文件的原始数据。

IPFS节点接收到一个Links数据块之后,通过解析所有Links,可以分析任意一个数据块Block是不是属于这个文件。但是缺陷也是很明显的,这种解析方式只能是从上而下,不管是用DFS或者BFS,都只能是顺序遍历。在数据分享的过程有很大的影响。

DSP的分片技术采用一种类似MerkleDAG,更轻量级的MerkleDAG分片方式,保留了原本的特性,同时解决了这个遍历的问题。

 

类MerkleDAG

 

DSP协议的实现默认采用256KB大小作为数据块的分片最小单元,通过优化的MerkleDAG文件分片协议更高效地存储或分享一个文件。文件在分片的时候允许设置是否加密。如果设置为加密,则文件分片的同时进行加密。同时叶子节点只保留原始数据,去除冗余的不必要的Link结构。

 

DSP 保留了文件的Root Hash,同时用所有的文件块 Hash List生成一个新的BlocksRoot,这个BlocksRoot 用来验证 Block Hash List 的完整性。DSP在出传输过程中会传播这个Hash List和 BlocksRoot。任意一个DSP节点可以验证这个列表的正确性,一旦验证通过。这个List可以用来继续乱序下载和断点续传。

IPFS的MerkleDAG存储方式也是基于K-V型数据库管理。DSP 协议 兼容这种存储方式,这种存储方式有利于存储节点管理自己存储的数据。而且K-V型数据库在现在的本地硬盘特别高效,不会有严重的性能问题。但是对于一个客户端,或者一个轻节点,这种方式就很重了。

比如一个客户端上传自己本地的一份文件,如果还需要将这份文件再分片存储到数据库中,这其实造成了数据冗余,尤其文件越多会呈现线性增长。DSP给客户端提供了一种基于文件的分片方式,客户端无需存储整个文件的数据分片,而是存储这个文件数据分片对应的结构化数据,比如一些偏移量,数据前缀, 数据块数等。通过这些结构化数据,DSP 也可以很直接得获取到一个数据块。

在底层的数据分片算法上,DSP借鉴了IPFS的Merkle DAG,同时也做了很多改进,对存储节点和客户端都更友好。

DSP 协议在分布式存储协议上有完整的协议设计,数据分片可以使得文件更不容易丢失,在DSP协议地设计上也有利于多备份,纠删等功能的实现。同时,在传输上也更加高效,也方便应用层直接控制数据片的生命周期。

本文链接:https://www.8btc.com/media/637024
转载请注明文章出处

文章标签: 分布式存储
评论
登录 账号发表你的看法,还没有账号?立即免费 注册