FAST 2024 Paper 论文阅读笔记整理
问题
键值存储在数据中心应用程序中发挥着核心作用,许多KV存储都是使用写优化索引(WOI)(如LSM[58])构建的,称为WO-KV存储。最近的WO-KV存储针对现代SSD进行了优化,可以利用其高带宽并提供低延迟[73]。
为了使其具有容错性至关重要,目前的常见方法是在许多机器上复制存储,并使用现成的复制协议,如MultiPaxos[43]、Raft[56]或Viewstamp replication(VR)[46]来协调对存储的写入和读取。
现有方法局限性
现有复制协议的问题:
-
浪费了高写性能,只提供了较低的写吞吐量,因为必须在单个线程上顺序写入,以确保副本相同[66]。这也会导致高延迟,因为复制副本必须进行协调才能就写入顺序达成一致。
-
较差的读性能。为了保持强一致性,将读取限制在只访问leader [38,52,55],其他副本的读取带宽未被使用。这对WO-KV存储尤其不利,因为它们的读写不对称[9]:读取比写入更昂贵,因此读取次数越多,性能就越差。
本文方法
本文提出IONIA,基于SSD的写优化键值(WOKV)存储的新型复制协议。通过其存储感知设计,IONIA利用了基于SSD的WO-KV存储的独特特性。
-
利用接口特性将并行执行推迟到后台,从而实现高吞吐量的一次往返(RTT)写入。将所有写入转换为盲写入,以避免在写入之前执行慢速读取。当写入完成时,不返回执行结果,而只向客户端返回确认,因此无序协调。随后将排序和并行执行推迟到后台,实现高吞吐量和1RTT写入。
-
利用基于SSD的KV存储的性能特性,在任何副本上进行可扩展读取,而无需强制写入所有副本,从而在不影响写入可用性的情况下提供可扩展性。对于基于SSD的存储,可扩展性可以与本地性脱钩:因为SSD是瓶颈(而不是网络),即使是发送额外消息的非本地读取也不会影响可扩展性,只要这些额外消息仅以内存状态(而非SSD)访问其他副本。因此IONIA仅复制到一个仲裁以获得可用性,同时允许从任何复制副本进行读取。为了处理滞后的从副本,对于每个从副本的读取,IONIA在主副本处执行检查(一个元数据查询),以验证从副本返回的结果。这种方法仍然可扩展,因为主副本以高吞吐量提供来自内存的元查询。IONIA利用SSD和DRAM之间的性能差距,将可扩展性与局部性解耦,实现可扩展读取。
-
为了实现1RTT读取,IONIA将读取发送给从副本,同时将元查询并行发送给主副本。通过客户端一致性检查机制,主副本返回足够的关于正在读取的键的信息,而客户端则决定从副本结果是否为最新。
-
由读取优化引入的问题是,如何确保元查询始终从主副本的内存中提供服务,IONIA维护最近修改密钥的紧凑历史记录而不是存储中的所有密钥。一个相关的挑战是如何确保主副本为历史中不存在的密钥的元查询返回正确的信息,IONIA返回这些密钥的稍微不准确的信息,但不会危及一致性。
对IONIA进行了广泛的评估。对于写,IONIA与并行执行协议的吞吐量相匹配,同时提供低延迟;IONIA还近似于未复制服务器的性能。对于读取,IONIA提供了线性扩展,使所有副本的读取带宽饱和,而元查询不会成为瓶颈。大多数读取都在1RTT中完成,这是通过小历史记录(例如50MB)实现的。对于YCSB,IONIA将吞吐量提高了16倍,比MultiPaxos提高了38倍。
实验
实验环境:将SplinterDB集成为所有基线中的状态机,使用4GB缓存。每个复制副本都使用Intel DC S3520 SATA SSD,使用具有24B密钥和100B值的670M KVpair数据集。
数据集:YCSB
实验对比:吞吐量、读写带宽、1RTT读占比
实验参数:读写比、副本数量、历史大小、崩溃影响
总结
针对写优化键值存储(WO-KV)的副本管理。现有复制协议:浪费了高写性能,只提供了较低的写吞吐量,因为必须在单个线程上顺序写入;较差的读性能,将读取限制在只访问主副本。本文提出IONIA,利用了基于SSD的WO-KV存储的独特特性优化复制协议。(1)利用接口特性将并行执行推迟到后台,从而实现高吞吐量的一次往返(RTT)写入。(2)在任何副本上进行读取,同时无需强制写入所有副本。为了处理滞后的从副本,对于每个从副本的读取,IONIA在主副本处执行检查(一个元数据查询),以验证从副本返回的结果。(3)为了实现1RTT读取,IONIA将读取发送给从副本,同时将元查询并行发送给主副本。通过客户端一致性检查机制,主副本返回足够的关于正在读取的键的信息,而客户端则决定从副本结果是否为最新。