Walrus 工作流程技术解析

  • King
  • 更新于 2024-11-27 00:29
  • 阅读 232

Walrus在数据存储领域展现出独特的特性与功能,其在单个时期(epoch)内的工作流程涵盖多个关键操作,包括写入、读取、切片恢复、处理恶意写入编码不一致情况以及委员会重新配置等,同时具备一系列扩展功能以保障系统高效运行与数据可靠存储。本文将深入剖析Walrus的各项工作流程与功能特性。

Walrus 在数据存储领域展现出独特的特性与功能,其在单个时期(epoch)内的工作流程涵盖多个关键操作,包括写入、读取、切片恢复、处理恶意写入编码不一致情况以及委员会重新配置等,同时具备一系列扩展功能以保障系统高效运行与数据可靠存储。本文将深入剖析 Walrus 的各项工作流程与功能特性。

写入流程(Writing a Blob)

(一)编码与准备(➊)

写入者首先运用 Red Stuff 编码算法对欲存储的 blob 实施编码操作。此编码过程会生成切片对(sliver pairs)、切片承诺列表以及一个 blob 承诺。随后,通过对 blob 承诺与文件元数据(如文件长度、编码类型等)进行哈希运算生成特定标识。这一步骤为后续的数据存储与处理奠定了基础,编码后的切片对及相关承诺信息将在整个存储流程中起到关键的标识与验证作用。

(二)区块链事务(➋)

写入者在区块链上提交事务,目的在于获取充足空间存储 blob 并完成注册。在事务提交时,需发送 blob 的大小以及 blob 承诺等信息。区块链智能合约在此过程中承担着重要职责,它将确保每个节点均有足够空间存储编码切片以及与 blob 承诺相关的所有元数据。写入者在事务处理中有两种选择,其一是发送一定支付以确保空间,其二是将未来时期的空闲空间作为资源附加到此请求中。这种机制既保障了存储资源的有效分配,又给予写入者灵活的资源调配方式。

(三)通知存储节点(➌)

当注册事务成功提交后,写入者将存储切片的义务告知存储节点。具体而言,发送事务、承诺以及分配给各存储节点的初级和次级切片,并附带切片与已发布一致性的证明。存储节点在接收到这些信息后,会对承诺进行验证,若验证通过,则在存储切片对后回复带签名的确认。这一交互过程确保了数据在存储节点端的准确性与完整性,同时签名确认也为后续的写入完成确认提供了依据。

(四)收集确认与发布(➍➎)

写入者需等待收集特定数量的签名确认,这些确认共同构成写入证书(write certificate)。随后,写入者将写入证书发布在区块链上,此发布点即为该 blob 在 Walrus 中的可用性点(Point of Availability, PoA)。至此,写入者可删除本地的 blob 副本并离线,而此 PoA 能够作为 blob 可用性的证明提供给第三方用户和智能合约。其他节点通过监听区块链事件,若自身未持有某 blob 的切片对,将启动恢复过程以获取过往所有 blob 的承诺和切片对。这一整套流程实现了 blob 从写入者到存储系统的完整存储过程,并通过区块链技术保障了数据的可用性与可追溯性。

读取流程(Reading a Blob)

(一)最佳努力读取(Best - effort Read)

在最佳努力读取路径下,读取者能够向任意存储节点请求指定的 blob 承诺和初级切片(1)。当收集到特定数量带有有效证明(针对特定要求)的回复(2)后,读取者便可以重建 blob。接着,读取者重新编码 blob 并重新计算一个特定标识,如果新计算的标识与原始的相同,则输出 blob,否则输出表示 blob 不一致的结果。这种读取方式在一定程度上保障了数据的获取,但在数据一致性方面存在一定的风险,不过在某些对数据准确性要求并非极高的场景下具有一定的适用性。

(二)高竞争场景下的读取(Reading under High Contention)

在高竞争情况(即多个读取者同时请求读取同一 blob)下,论文探讨了通过激励读取来满足需求的方式。同时,考虑到实际应用场景,预见了许多读取操作可借助聚合器和缓存来交付。对于热门 blob,无需每次读取都进行重建,从而有效提高读取效率。这种针对高竞争场景的优化策略有助于提升系统在高负载读取情况下的性能表现,减少资源消耗与响应时间。

切片恢复(Recovery of Slivers)

(一)恢复的必要性与二维编码优势

在异步网络中进行 blob 写入或者节点出现故障恢复时,可能会出现部分节点在写入过程中未获取到切片的情况。Walrus 采用二维编码方案,这一方案具有显著优势。它允许每个诚实存储节点恢复并最终持有每个已过 PoA 的 blob 的切片,进而带来多方面好处。例如,实现了更好的负载均衡,因为所有节点都能响应读取请求;保障了存储节点的动态可用性,无需重构和重写所有 blob 即可重新配置;还实现了首个完全异步的部分存储证明协议(在第 6.1 节描述)。二维编码方案从根本上提升了系统在面对网络异常与节点故障时的鲁棒性与适应性。

(二)恢复协议流程

当存储节点发现自身未收到某个 blob 的切片时,会启动恢复流程。它将向所有存储节点请求与自身初级 / 次级切片和签名节点次级 / 初级切片相交部分的符号。由于有特定数量的节点签署了证书,至少特定数量的诚实节点会回复,这足以使所有诚实节点最终获得次级切片。然后,这些节点可以共享与请求节点初级切片对应的符号,使请求节点能够达到特定的阈值并恢复其初级切片。在整个过程中,每个符号具有特定大小,每个存储节点下载特定数量的符号,因此每个节点的恢复成本可计算得出,总恢复成本也能确定,且与读写成本相当。这种恢复协议流程在保障数据完整性的同时,将恢复成本控制在合理范围内,确保系统的高效稳定运行。

处理恶意写入编码不一致(Handling Inconsistent Encoding from Malicious Writers)

(一)不一致情况的发现

当客户端(写入者)恶意上传与 blob 正确编码不对应的切片时,节点可能无法从接收到的符号中恢复出与承诺一致的切片。这种恶意行为可能会破坏数据的完整性与可用性,因此 Walrus 需要具备相应的检测与处理机制。

(二)证明与处理流程

在这种恶意写入导致编码不一致的情况下,节点能够生成一个与特定要求相关的第三方可验证的不一致证明。具体操作是,节点将用于恢复的符号及其 Merkle 证明共享给其他节点,其他节点通过自行尝试恢复来验证。一旦验证通过,节点将在链上证明无效。当观察到特定数量的这样的证明时,所有节点将对该不一致 blob 的切片请求回复⊥,并附带指向链上不一致证据的指针。虽然正确的读取过程默认会拒绝任何不一致编码的 blob,但节点间就不一致达成共识有助于清理无效数据,避免在挑战协议中处理这些数据。这种处理机制有效防范了恶意写入行为对系统的破坏,保障了数据存储的安全性与可靠性。

委员会重新配置(Committee Reconfiguration)

(一)重新配置的触发与目标

由于 Walrus 是基于权益证明(Proof - of - Stake)的协议,存储节点集合在不同时期会因节点盈利状况和委托权益的变化而波动。当新委员会在时期之间替换当前委员会时,便会触发重新配置操作。其核心目标是确保所有已过 PoA 的 blob 始终可用,无论存储节点集合如何变化,前提是每个时期至少有特定数量的诚实节点。考虑到重新配置可能需要数小时,系统必须确保在此期间无停机时间,持续支持 blob 的读写操作。这一目标的设定对于保障系统的不间断服务以及数据的持久可用性至关重要。

(二)核心设计与挑战

高层次上,Walrus 的重新配置协议类似于区块链系统的重新配置协议,但由于状态迁移成本远高于经典区块链系统,面临着独特挑战。主要挑战在于时期 e 的写入操作与将切片从传出存储节点转移到传入存储节点之间的竞争。若时期 e 写入的数据量超过存储节点将其转移到新节点的能力,该时期将无法完成。当 e 时期的某些传出存储节点不可用时,问题会进一步加剧,因为传入存储节点需要从 e 时期的委员会中恢复切片。幸运的是,使用 Red Stuff 编码,故障情况下的带宽成本与无故障情况相同,但仍需要在网络中发送更多消息,并进行更多计算来验证证明和解码符号为切片。这些挑战需要通过精心设计的协议与算法来克服,以保障系统在委员会重新配置过程中的稳定运行。

(三)解决方法与流程

为解决上述问题,Walrus 采用一种独特的方法。在重新配置开始时,将写入操作直接定向到时期的委员会,而读取操作仍指向旧委员会,以此避免在单个点同时切换读写操作。为解决读取新鲜 blob 时的节点不确定性问题,将每个 blob 的首次写入时期信息包含在元数据中,依据此信息指导读取操作。新委员会成员在获取其分片的所有切片并准备好接管后发出信号,当特定数量的新委员会成员发出信号时,重新配置完成,所有读取操作将重定向到新委员会的存储节点。这种解决方法通过合理的读写操作定向与元数据利用,有效解决了委员会重新配置过程中的关键问题,保障了系统的平稳过渡与持续服务。

扩展功能(Extensions)

(一)Blob 存储寿命(Blob Storage Lifespan)

Walrus 中的 blob 存储寿命以时期为单位进行管理。写入者可购买最多 2 年的未来存储,并且能够通过在 Sui 区块链上的交易延长 blob 的寿命,具体方式是使用足够大小且具有较晚过期时期的存储资源。通过将 blob 和存储资源作为 Sui 区块链上的对象,可借助智能合约对存储资源的获取和寿命延长进行有效管理。例如,可通过封装 blob 和一些代币在 Sui 共享对象中来模拟 “无限” 寿命,其中代币用于定期购买存储资源。这种存储寿命管理机制为用户提供了灵活的存储时间控制,同时利用区块链智能合约保障了存储资源交易的安全性与可靠性。

(二)部分读取优化(Partial reads)

利用二维编码中源符号的特性(在文件编码中出现两次且分布在不同节点),Walrus 允许用户通过直接访问源符号进行更快的读取。若包含源符号的切片可访问,用户可跳过计算成本高昂的解码过程。对于作为较大 blob 一部分编码的特定资源(如图像),用户可尝试直接访问其源位置,从而避免下载整个 blob。这种部分读取优化策略显著提高了特定资源读取的效率,减少了不必要的数据传输与计算开销,提升了用户体验。

(三)拒绝列表(Denylist)

存储节点可能因法律或其他原因不想存储或服务特定 blob 的切片。Walrus 协议允许节点在 Sui 区块链上维护自己的拒绝列表,节点添加后可删除相关切片、拒绝新上传并停止服务。若一个 blob 被不超过 f 个节点列入拒绝列表,它仍然可用,这使得存储节点能够表达区域或本地策略偏好而不进行全局审查 blob。但如果一个 blob 被超过 f 个节点拒绝,它将无法在 Walrus 中读取。这种拒绝列表机制在保障存储节点自主性与合规性的同时,也兼顾了数据的整体可用性与分布式存储的特性。

(四)性能与扩展性(Performance and Scaling)

Walrus 的可用容量随着具有新存储和网络资源的节点加入以及每个存储节点资源的增加而提升,与智能合约协议不同,不会因节点增加而降低容量。写入和读取操作在存储节点间天然并行化,可充分利用网络聚合带宽提高效率。理论上,大型分布式网络(如 500 个存储节点,1Gbps 链路)可实现高读写容量(读取约 500Gbps,上传约 100Gbps),并且可通过缓存和内容分发网络(CDN)进一步优化。此外,Walrus 协议设计允许存储节点根据需求灵活扩展,单个节点可通过使用多台机器处理不同分片来应对数据增长,且系统无容量上限和读写吞吐量限制。这种卓越的性能与扩展性使得 Walrus 在大规模数据存储与高并发读写场景下具有极大的应用潜力。

总结

综上所述,Walrus 通过其复杂而高效的工作流程与丰富的扩展功能,在数据存储领域展现出强大的竞争力与适应性,能够满足多种复杂场景下的数据存储需求,并保障数据的可靠性、可用性与安全性。

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
King
King
0x56af...a0dd
擅长Rust/Solidity/FunC/Move开发