聊聊 @SuiNetwork 团队开发的另一个存储项目 @WalrusProtocol 🧐🧐
Sui 开发公司 Mysten Labs,其实还开发了一个数据层项目 @WalrusProtocol 。
Walrus 是做数据存储和数据可用的项目。我研究完就一个感受——“牛逼”。这是我见过的最好的存储项目。
以下是正文,
去中心化存储项目主要有两类。
第一类采用完全复制(full replication)方式,以低效的冗余换取安全,即每个节点都存储完整数据副本,代表项目 @Filecoin Arweave 。
第二类采用 Reed-Solomon 纠删码方式,将原始数据切片保存,代表项目 @Storj 、Sia 等。
————————————————————————————————
用说人话的方式解释纠删码(Erasure Codes)
纠删码(Erasure Codes)的存储方式需要解释下,严谨来说,是将原始文件分割成 f+1 个原始切片,生成 2f 个额外的修复切片(repair slivers),每个存储节点保存一个不同的切片,任意 f+1 个切片就能重建原始文件。
好吧,你可以跳过这段不说人话的表述,来看下面这段。
假设我们要保存 4 个重要数字:[3, 7, 2, 5],这 4 个数字就是我们的"原始切片"。
接下来,我们要生成额外切片,
修复切片1 = 3 + 7 + 2 + 5 = 17
修复切片2 = 3×1 + 7×2 + 2×3 + 5×4 = 47
修复切片3 = 3×1² + 7×2² + 2×3² + 5×4² = 131
现在我们有 7 个切片:[3, 7, 2, 5, 17, 47, 131]了,对吧。
假设系统有7个节点,我们分发出去,
张三:3
李四:7
王五:2
赵六:5
钱七:17
孙八:47
周九:131
假设李四、赵六、周九丢失了数据,我们只有:[3, _, 2, _, 17, 47, _] 。
那怎么恢复原始数据咧?
还记得额外切片那里的公式么?没错,解一个二元一次方程。
3 + X + 2 + Y = 17
3×1 + X×2 + 2×3 + Y×4 = 47
得 X=7,Y=5 。
当然这只是一个很简易的例子。
你只需要记住纠删码达成的效果就好。效果是,只要有超过 1/3 节点正常就行。
换言之,在纠删码系统内,节点只存储数据切片就可以,只要超过 1/3 节点能运作,数据就可以恢复,但是需要节点稳定,因为替换成本高。
但在完全复制的系统内,需要有下载全部数据副本的全节点存在。
前者以牺牲部分安全性为代价换取低成本,后者则是以冗余为代价换取系统安全稳定。
————————————————————————————————
Walrus 的二维 (two-dimensional, 2D) 纠删码创新
Walrus 的方式,其实是去了中间点,在二者之间达成某种平衡。核心也是采用纠删码方式,只是在此技术上创造了改进性的技术 Red Stuff。
Red Stuff 采用了更巧妙的编码方式,对数据分片。还记得之前纠删码的例子吗?
要保存 4 个重要数字:[3, 7, 2, 5],要生成额外切片,最后解二元一次方程。
还是这个例子解释下 Red Stuff。Red Stuff 编码方式是二维 (two-dimensional, 2D) 编码算法,你可以想象成“数独”。
3 7 25 在 Red Stuf 编码里变成了,
[3 7]
[2 5]
假设编码规则是,
第3列 = 第1列 + 第2列
第4列 = 第1列×2 + 第2列×2
第3行 = 第1行 + 第2行
第4行 = 第1行×2 + 第2行×2
这是额外切片变成了
[3 7 10 20]
[2 5 7 14]
[5 12 18 34]
[10 24 34 68]
接下来,我们按照行和列分发给节点,
张三:3 7 10 20,也就是第一行
李四:2 5 7 14,第二行
王五:5 12 18 34,…
赵六:10 24 35 68,…
钱七:3 2 5 10,第一列
孙八:7 5 12 24,…
周九:10 7 18 34,…
郑十:20 14 34 68,…
假设王五丢了数据,也就是第3行数据丢失。那其实他只需要问第一行的张三和第二行的李四,分别要他们 10 和 7 数字就好了。
同样是二元一次方程求解,得出结果。
从以上通俗但不那么严谨的例子中,我们可以总结 Red Stuff 的特点,
恢复数据时,不需要完整的行或列,只需特定位置的数据即可。这个特性可以称之为“局部性”。
另外,一个数字,可以从行和列两个维度恢复,也就是“信息重用”。
再其次,对于复杂数据,可以先恢复更“容易”方便计算的维度,再利用已恢复数据计算困难维度,也就是“渐进性”。
在实际应用中,假设某文件,在纠删码架构下,编码为 301个切片。
通常的纠删码系统,恢复1个切片需 101个切片,而在 Red Stuff,恢复1对切片只需约 200个单独的符号。
假设存储 1GB 文件,系统有 301 个节点,通常的纠删码系统,节点故障后需要下载 1GB 才能恢复切片,而 Red Stuff,每个节点存储:主切片(3.3MB) + 次切片(3.3MB) = 6.6MB。
恢复时只需下载约 10MB 的符号数据,节省 99% 的带宽。
这个设计让 Walrus 能够以极低的带宽成本维护一个大规模的去中心化存储网络,将恢复成本从 O(|blob|) 降到 O(|blob|/n)。这就是为什么 Red Stuff 被称为"自我修复"的原因。
除此之外,Walrus 加入了很多安全特性,比如是首个在异步网络中支持存储挑战的协议。
这里所谓的“挑战”,类似于 Optimistic 机制对节点数据存储情况的抽查。
Red Stuff 每个切片都添加可验证的加密承诺(commitments),每个符号可独立验证等等。
总结下特点,
1)首个异步安全:解决了分布式存储对节点的信任问题;
2)自验证:内置防伪机制;
3)渐进式:处理节点动态变化;
4)可扩展:支持数百到数千节点;
以在安全和效率间找到最佳平衡。
(以上是本文第一部分)
2.64万
13
本页面内容由第三方提供。除非另有说明,欧易不是所引用文章的作者,也不对此类材料主张任何版权。该内容仅供参考,并不代表欧易观点,不作为任何形式的认可,也不应被视为投资建议或购买或出售数字资产的招揽。在使用生成式人工智能提供摘要或其他信息的情况下,此类人工智能生成的内容可能不准确或不一致。请阅读链接文章,了解更多详情和信息。欧易不对第三方网站上的内容负责。包含稳定币、NFTs 等在内的数字资产涉及较高程度的风险,其价值可能会产生较大波动。请根据自身财务状况,仔细考虑交易或持有数字资产是否适合您。