c. 挑战三:副本解耦后如何加速数据恢复操作
副本解耦后,通过一种并行的恢复机制,以利用数据解耦存储的特征来加速数据恢复操作。
如图步骤①中,当为节点上的数据构建Merkle tree以检测丢失的数据时,使用两个线程,并行地从LSM-tree的主副本和两层日志的冗余副本中读数据。
当修复多个范围段的丢失数据时,如图步骤③,同样使用两个线程,并行地从LSM-tree的主副本和两层日志的冗余副本中读写数据。
三、实验
3.1 实验设置
实验服务器硬件配置
● 在6个节点(5个存储节点,1个客户端节点)组成的本地集群中运行所有实验, 10 Gb/s以太网交换机;
● 工作负载:使用YCSB 0.15.0来生成工作负载,KV对大小为1KB,生成的工作负载服从Zipf分布 (0.99);
● 参数:默认采用三副本,并且将写一致性等级和读一致性等级默认设置为1(WCL=ONE, RCL=ONE)。
3.2 比较
● Cassandra v3.11.4 VS multiple LSM-trees (mLSM) VS DEPART
● DEPART builds on Cassandra v3.11.4
在开源的分布式KV存储系统Cassandra上实现了原型系统DEPART,同时也实现了多个LSM-tree的简单解耦方案。将DEPART与Cassandra、多个LSM-tree的解耦方案分别进行性能比较,以展示系统DEPART的设计优势。
实验一:基准测试
实验一分别测试了不同KV系统的写、读、范围查询和更新操作的吞吐量。
由实验结果可知,相比于Cassandra,系统DEPART可以显著提升所有操作的吞吐量。而对于多个LSM-tree的解耦方案,其可以较好地提升Cassandra的读性能,但对Cassandra的写性能提升非常有限。主要原因是多个LSM-tree的解耦方案会导致解耦出的每个LSM-tree仍然需要执行频繁的Compaction操作,以维护每层数据的完全有有序,从而导致总的Compaction开销仍然非常严重。
实验二:不同一致性配置
实验评估了不同一致性配置下的系统性能。这里对于强一致性等级,考虑了三副本下不同的写一致性等级和读一致性等级配置。
由实验结果可知,与Cassandra相比。系统DEPART可以在不同一致性配置下均可以提高所有操作的吞吐量,并且相比于多个LSM-tree的解耦方案,DEPART可以有效提高写入和更新操作的吞吐量。
然而,当读一致性等级(RCL)配置为大于1时,与Cassandra相比,DEPART的读性能收益会变小,并且DEPART的读性能还要略差于多个LSM-tree的解耦方案。其主要原因是,在这种读一致性配置下,每个读请求需要成功访问至少两个副本,因此必须搜索两层日志当中的冗余副本;又由于两层日志中的冗余副本并未完全排序,因此读取两层日志的性能要低于读取完全排序的LSM-tree的主副本。
注意,DEPART的读性能仍然要好于Cassandra,因为副本解耦后,DEPART搜索的数据量更少,但是DEPART的读性能要差于多个LSM-tree,因为多个LSM-tree保持冗余副本完全有序。
实验三:数据恢复性能
分别测试当恢复不同数据量时所需要的时间。
与Cassandra相比,DEPART将恢复时间减少38%-54%,主要原因是并行修复机制可以并行地读写主副本和冗余副本。
实验四:有序度参数S对系统读写性能的影响
如表格所示,当S的值为1时,两层日志会变为两层LSM-tree,KV数据是完全有序的,因此它可以获得最高的读吞吐量。但由于频繁的合并排序操作,这时候写吞吐量是最低的。
当S的值从1不断增大时,两层日志的有序度会不断降低,故合并排序开销逐渐减小,因此写性能会不断增加,而读性能会不断降低。
因此,可以通过调整S的取值,在读写性能之间做合适的权衡。
四、总结
DEPART是一个基于副本解耦的高性能和高可靠的分布式KV存储系统,包括轻量级副本解耦方案、两层日志架构、有序度可调机制、并行恢复机制等关键模块设计。
KV研究热点总结与展望
首先,目前KV领域的绝大部分工作都集中在优化KV存储引擎上,例如改进LSM-tree架构,以减轻读写放大问题,以及结合新型硬件来重新设计KV存储引擎等等。
但在KV系统的数据容错层,相关研究极少,我们进行了初步探索,观察到当前统一的多副本管理会极大加剧KV系统的读写放大,因此研究设计了基于副本解耦的多副本差异化管理框架,极大提升了系统性能。这项工作基于Cassandra开源平台实现,并可以应用在TiKV等一系列基于LSM-tree的分布式KV存储系统中。
对于KV系统未来的研究方向,可以结合应用层的需求和缓存特征来进行特定的KV系统设计。例如,研究设计一种属性感知的内存KV系统,使其在存储结构上能够支持对数据属性值的高效读写,最终部署到云存储平台,以高效支撑SQL数据库等应用。此外也可以结合上层应用的其他特征和需求来设计针对性的KV存储系统。
详细内容请参阅论文《DEPART: Replica Decoupling for Distributed Key-Value Storage》