Nezha: A Key-Value Separated Distributed Store with Optimized Raft Integration

本文提出了 Nezha 系统,通过创新性地结合键值分离架构与 Raft 共识协议,优化了持久化策略并引入分级垃圾回收机制,有效解决了传统一致存储中因重叠 I/O 操作导致的性能瓶颈,显著提升了读写吞吐量。

Yangyang Wang, Yucong Dong, Ziqian Cheng, Zichen Xu

发布于 Wed, 11 Ma
📖 1 分钟阅读☕ 轻松阅读

Each language version is independently generated for its own context, not a direct translation.

这篇论文介绍了一个名为 Nezha(哪吒) 的新型分布式存储系统。为了让你轻松理解,我们可以把整个系统想象成一个繁忙的“快递分拣中心”

1. 背景:旧系统的“三重浪费”

想象一下,传统的分布式存储系统(比如基于 Raft 协议的)就像一个效率低下的老式快递站

当客户(用户)寄出一个包裹(写入数据)时,这个包裹必须经过三次完全重复的搬运和登记,才能算“安全入库”:

  1. 第一次搬运(Raft 日志): 为了让大家(多个服务器节点)对“谁先寄了什么东西”达成共识,包裹必须先被抄写进一本“会议记录本”(Raft Log),并同步给所有同事。
  2. 第二次搬运(WAL): 仓库管理员(存储引擎)为了保险起见,又要把这个包裹的内容抄写进自己的“临时登记簿”(Write-Ahead Log)。
  3. 第三次搬运(正式入库): 最后,包裹才被正式放进货架(SSTable 文件)。

问题所在:
如果包裹很大(比如几兆的大文件),这种“抄三遍”的做法就像让快递员把一吨重的货物搬了三次,既累(I/O 开销大)又慢(写入速度慢)。而且,为了整理货架,仓库还会不断把旧包裹打碎重组(压缩/Compaction),这又增加了额外的搬运工作。

2. Nezha 的解决方案:聪明的“哪吒”

Nezha 系统就像是一个拥有“分身术”和“智能分拣”的超级管理员。它做了两件事来彻底解决这个问题:

A. 核心创新:把“名字”和“货物”分开(Key-Value Separation)

Nezha 发现,其实大家真正关心的只是“谁寄了什么”,而不是每次都搬运那个巨大的包裹。

  • 旧做法: 每次都要搬运整个大包裹。
  • Nezha 的做法(KVS-Raft):
    • 只搬运“货物”一次: 巨大的包裹(Value)只被搬运并存放一次,直接扔进一个专门的“大仓库”(ValueLog)。
    • 只搬运“标签”多次: 在“会议记录本”和“临时登记簿”里,只记录包裹的位置标签(比如:货物在仓库第 3 排第 5 架,偏移量是 1024)。这个标签非常轻,像一张小纸条。

比喻: 就像你去图书馆借书。旧系统是把整本厚书复印三遍存档;Nezha 系统则是只复印一张索书号小纸条,真正的书只放在书架上一次。这样,写入速度瞬间起飞!

B. 读数据时的挑战与对策:智能“整理术”(Raft-aware GC)

虽然“只搬运标签”让写入变快了,但读取时会有新问题:

  • 问题: 当你想读一本书时,你得先查小纸条找到位置,再去大仓库把书取出来。如果书是乱序堆放的(因为新来的包裹是随机扔进去的),找起来就像在大海捞针,速度会变慢。
  • Nezha 的对策(GC 框架):
    Nezha 引入了一个自动整理机器人
    1. 三阶段处理: 它把整理过程分为“整理前”、“整理中”、“整理后”三个阶段,确保在整理时,仓库大门依然敞开,没人被挡在外面。
    2. 自动排序: 机器人会把散乱堆放的“大仓库”里的书,按照索书号(Key)的顺序重新排列整齐,并建立一本快速索引目录
    3. 结果: 当你再想读数据时,系统先查快速目录(哈希索引),直接定位到整齐排列的书,读取速度不仅恢复了,甚至比以前更快了(特别是连续读取时)。

3. 为什么 Nezha 这么强?(实验结果)

论文通过大量实验证明,Nezha 就像给快递站装上了“火箭引擎”:

  • 写入速度(Put): 提升了 460%!因为不再重复搬运大包裹了。
  • 读取速度(Get): 提升了 12.5%。虽然多了一步查标签,但通过智能整理,整体效率更高。
  • 扫描速度(Scan,比如连续读很多数据): 提升了 72.6%。因为数据被整齐排序了,读取就像在流水线上拿东西一样顺畅。

4. 总结

Nezha 的核心思想就是:
在分布式系统中,“共识”(大家达成一致)和“存储”(把数据存好)不应该各干各的,导致重复劳动。

Nezha 通过把“大货物”和“小标签”分离,让共识协议只处理轻飘飘的标签,而把沉重的货物统一存放。同时,它设计了一套智能的整理机制,确保在追求写入速度时,不会牺牲读取体验。

这就好比,以前大家为了存数据,每个人都要背着重重的砖头跑三趟;现在,大家只负责递一张轻飘飘的纸条,真正的砖头由专门的传送带一次性运走,并且自动码放整齐。这就是 Nezha 让大数据存储变得又快又稳的秘诀。