FAST 2023 Paper 元数据论文阅读汇总
问题
分布式内存键值(KV)存储正在采用分离式内存(DM)体系结构以提高资源利用率。然而,现有的DM上的KV存储采用半分离式设计,在DM上存储KV对,但在单个元数据服务器上管理元数据,因此仍然在元数据服务器上遭受低资源效率的问题。
挑战
-
以客户端为中心的索引复制。为了容忍内存节点故障,客户端需要在内存池中的内存节点上复制索引,并保证索引副本的一致性。但DM的内存池计算能力很弱。如果客户端简单地使用共识协议[36、46、50]或远程锁[60],由于冲突请求的显式序列化,KV存储的可扩展性较差[4,11,64,70]。
-
远程内存分配。由于计算能力较差,内存节点无法处理KV对的大量需要计算的细粒度内存分配[25,60]。客户端无法有效分配内存空间,因为需要多个RTT来修改存储在内存节点上的内存管理信息[38]。
-
客户端故障导致元数据损坏。客户端故障可能会使其他人可以访问部分修改的元数据,从而损害整个KV存储的正确性。
本文方法
本文提出了FUSEE,一种完全内存分离的KV存储,将分离引入到元数据管理中。FUSEE在内存节点上复制元数据,即索引和内存管理信息,在客户端直接管理它们,并在DM体系结构下处理复杂的故障。
-
为了在客户端上可扩展地复制索引,FUSEE提出了一种客户端为中心的复制协议SNAPSHOT,允许客户端同时访问和修改复制的索引。实现可伸缩性的关键是在不涉及昂贵的请求序列化的情况下解决写冲突[7]。SNAPSHOT在数据副本中更新,客户端能够协作决定写入冲突下的最后一个写入程序,最后的写者获胜。该协议通过TLA+[35]进行了正式验证,以确保安全性和在崩溃停止故障下不存在死锁。
-
为了高效管理分离的内存,FUSEE采用了一种两级内存管理方案,将以服务器为中心的内存管理过程分为轻计算和重计算任务。计算量较小的粗粒度内存块由计算能力较弱的内存节点管理,计算量较大的细粒度对象由客户端处理。
-
为了处理客户端故障下的元数据损坏,采用嵌入式操作日志恢复客户端部分执行的操作。嵌入式操作日志重用内存分配顺序,并将日志条目嵌入KV对中,以减少DM上的日志维护开销。
我们使用微型和YCSB混合基准对FUSEE进行评估。实验结果表明,FUSEE在资源消耗更少的情况下,比DM上的最先进的KV存储性能提高了多达4.5倍。
开源代码:https://github.com/dmemsys/FUSEE
实验
实验环境:在CloudLab[19]的APT集群上的22台物理机器(5台MN和17台CN)上运行实验。每台机器都配备了一个8核Intel Xeon E5-2450处理器、16GB DRAM和一个56Gbps Mellanox ConnectX3 IB RNIC。这些机器通过56Gbps Mellanox SX6036G交换机互连。
数据集:microbenchmark,YCSB
实验对比:延迟、吞吐量、可扩展性、故障恢复
总结
针对分离式内存系统中,KV存储的元数据可扩展性差的问题。作者提出将元数据分离到每个内存节点上,在内存节点上复制元数据信息。提出三个优化点:通过客户端为中心的复制协议SNAPSHOT,在不序列化的同时解决写冲突,在多个副本上更新最后判断顺序解决冲突;采用两级内存管理方案,将内存管理分为重任务和轻任务,分别由客户端和内存节点管理;采用嵌入式操作日志进行故障恢复,减少日志开销。