架构师深度拆解:Web3 需要什么样的存储系统?( 四 )


文章图片
01将可验证特性下推到存储引擎内部 , 由内置的Version-based(区块号)多版本Merkle树提供可验证可追溯 , 并且直接操作文件 , 从而缩短IO路径;
02多版本Merkle树的Node聚合为page , 提升磁盘友好性 , page存储采用Delta-encoding思想避免in-place更新(结合Bw-tree思路) , 状态数据修改时主要保存增量 , 定期保存基线 , 从而减少写放大 , 也减少了空间占用;
03为page存储实现Version-based的存储与检索 , 索引page都按区块号有序写入、在索引文件里有序总局 , 核心数据结构为B树变种 , 从而实现有序数据locality;
04利用区块链场景数据的追加写、Immutable特点 , 架构上采用Log-Structured思想 , 通过日志文件来组织数据;
05数据与索引分离 , 数据按区块号有序写入数据文件 , 通过异步IO、协程并发等提升系统并发度 , 索引多模 , 区块&状态通用 , 除Merkle树支持状态数据 , 实现有序B树支持区块数据;
06当前最新版本Merkle树优先在内存里缓存或者全部缓存 , 链上合约执行时 , 如果存在则直接读取 , 不需要访问page来重放 , 从而加速合约执行 。
基于这些核心设计 , 实现了成本降低的同时性能提升 , 链平台交易TPS、延时等性能指标不会随着数据规模的提升而衰减 。
降成本
虽然存储资源占用大幅降低后 , 但是链上数据依然面临持续增长带来的高成本问题(问题4) 。
基于LETUS架构的后台数据治理框架 , 我们能很方便的扩展实现数据迁移/压缩/垃圾回收等治理策略 , 基于这些策略 , 为用户提供进一步降成本能力 , 并针对自己的业务特点来选择使用:
(1)智能控温分层存储:存储介质按照性能、成本分层 , 通过智能控温调度数据在不同介质的分布量 , 将冷数据后台自动迁移到廉价介质(如NAS) , 降低存储整体成本 , 并实现容量扩展 , 不受单盘空间限制 。
(2)范围扫描的批量裁剪:对于历史版本Merkle树和状态对象 , 基于版本有序性与内置Merkle树 , 让用户可以指定目标区块号范围裁剪 , 通过Page边界扫描 , 批量索引与数据裁剪、垃圾回收实现存储空间释放 , 进一步降低状态数据成本 。
规模扩展
针对问题5 , LETUS采用分布式存储架构 , 实现单个共识参与方计算和存储分离 , 计算层和存储层可分别部署独立集群 , 通过高性能网络通讯框架进行数据读写访问 。
为了对海量状态数据进行灵活的数据分片 , 并且保证各个区块链的参与方hash计算的一致性 , 将数据切片为256个最小存储单元(msu) , 并将一个或者多个msu构成一个状态数据分片(partition) , 将所有数据分片调度到多个物理机器 。 从而实现规模弹性扩展 , 解决了单机存储的容量瓶颈和带宽瓶颈 。
阶段三:生产落地
为了全面落地铺开的同时让业务平稳运行 , 能够开着飞机换引擎 , 在这几年的研发过程里 , 我们充分准备、循序渐进的分阶段落地:
架构师深度拆解:Web3 需要什么样的存储系统?
文章图片
2021年5月 , 基于LETUS存储引擎的区块数据冷热分层 , 在版权存证业务灰度上线 , 存储成本降低71% , 解决容量瓶颈并降低运维成本 。
2021年8月 , 基于LETUS存储引擎的状态数据 , 在数字藏品平台“鲸探”双写灰度上线 , 并成功支撑秒杀场景;
2022年2-6月 , LETUS引擎的历史状态数据裁剪、存储服务架构升级等生产ready , 在数字藏品和版权存证等业务全面落地 , 并从灰度双写切为单写;LETUS单写意味着对硬件资源要求大幅下降 , 我们将“鲸探”生产环境的云资源全面降配 , 降配后链平台性能水位提升200% , 同时存储成本下降75% 。