APP下载

云存储多卷负载均衡的LSM键值存储系统

2023-10-18周元辉陈书宁李大平万继光

小型微型计算机系统 2023年10期
关键词:轮询键值存储系统

徐 鹏,周元辉,陈书宁,刘 玮,李大平,万继光

1(华中科技大学 计算机科学与技术学院 武汉光电国家研究中心,武汉 430074) 2(北京平凯星辰科技发展有限公司,北京 100192)

1 引 言

建设“数字化中国”是《十四五规划》提出的重要目标之一,数字化建议意味着海量的数据[1].随着网络技术的不断进步,在一些场景下,用户通过网络获取数据的速度接近甚至是超过了从本地存储中获取数据的速度.因此,数据上云是一大趋势,云存储具有数据可靠性高[2,3]、扩展性强[4,5]、按需付费和性能稳定等特点,能够为用户提供丰富的服务[6,7].但是单个云存储卷(以下简称卷)可使用的最大IOPS和带宽受到限制[8],无法满足用户的高性能,特别是IOPS需求.基于云存储服务商的对云存储卷的计费规则和实际性能测试,发现相比于单个卷,在容量相同时,组合使用多个小容量的卷能够以相同的费用获得更高的IOPS和带宽性能.然而,测试表明,简单组合使用多个卷的方式会导致各个成员卷之间的负载严重不均衡,不能充分发挥出多卷所累加的最大性能.

为充分发挥多卷的性能,需要基于实际的存储系统进行分析和优化.日志结构归并树(Log-structured Merge-tree,LSM)[9]以读性能为代价的设计思想极大地提升了写性能,因此已被广泛应用于各大互联网服务厂商的键值存储系统(例如Facebook的RocksDB[10]、Apache的Cassandra[11]、Google的BigTable[12]和LevelDB[13]以及阿里云的X-Engine[14]),成为了各类存储系统的重要组成部分.对此,本文旨在充分发挥部署在LSM键值存储系统的多云存储卷性能.

LSM的数据分层设计使得LSM键值存储系统在处理读请求时产生大量的I/O请求[15-17].虽然键值对在Li层内的各sstable文件之内和之间均保持有序且不存在重复,但是Li层与Li+1层之间的键值对则不然.因此,在查找键值对时,LSM键值存储系统必须逐层进行查找,且在未命中目标键值对或遍历完所有的层之前无法确保查询结果的正确性.相较于将写请求在内存中进行聚合之后再批量地写入存储的设计[18],在最坏情况下,LSM键值存储系统处理读请求时需要向每一层发出随机I/O请求,导致大量的读I/O放大.因而,依赖于随机I/O请求的读性能受到卷的IOPS性能和键值对在LSM各层分布的影响.

现有的多卷负载均衡方案仅依靠写数据策略来最终决定数据在成员卷之间的分布,不仅无法充分应对多变的读负载(例如顺序读写、随机读写或昼夜变化等[19,20])的问题,同时依然存在将LSM不同层键范围重合度高的sstable(或者一部分)分配到同一个成员卷的问题,导致成员卷之间的读负载严重不均衡.

因此,需要将在多卷的成员卷之间迁移读负载热数据的方式作为现有多卷负载均衡方案的补充.而为了实现读负载均衡,需要实现键范围在各个成员卷之间均匀分布,从而避免读负载的热数据引起单个成员卷的I/O压力超过其购买的IOPS性能、进而造成多卷整体性能无法充分发挥的问题.

为此,以提升多卷读性能为目标,提出一种云存储多卷负载均衡的LSM键值存储系统TANGO.TANGO通过优化LSM的合并操作过程以实现多卷的读写负载均衡.在合并操作新生成的sstable落盘前,先根据统计的多卷中各个成员卷的关键信息,判断该sstable与各个成员卷的键范围重叠情况,选择键范围重叠最小的成员卷执行写入;针对读为主的负载,无法通过合并操作达到负载均衡,TANGO采用后台数据迁移方式进一步达到负载均衡.由此,针对每个键范围数据的读I/O请求会被均匀分散至多个成员卷,实现多卷读负载均衡的目标,从而充分发挥多卷的性能.

本文的主要贡献如下:

1)将现有多路径负载均衡或哈希负载均衡的方案应用于使用多云存储卷的LSM键值存储系统,并对云存储卷进行了大量的组合测试,通过实验证明同等存储容量下多卷性能更好;但是,各成员卷之间仍然存在负载不均衡的问题,不能充分发挥出多卷的最大性能.进一步通过实验和观察,发现了基于LSM键值存储系统的多卷中各成员卷I/O负载严重不均衡的原因.以上发现为设计更为高效的多卷性能优化方案提供了依据.

2)针对1)中分析的结果,提出一种云存储多卷负载均衡的LSM键值存储系统TANGO.在LSM中合并操作新生成的sstable确定落盘的目标卷之前,先根据统计的多卷中各个成员卷的关键信息,判断要写入sstable与各个成员卷的键范围重叠情况,选择键范围重叠最小的成员卷写入.TANGO也通过选择性复制的热点数据迁移方法进一步均衡读请求热点数据分布.TANGO方案从读和写两个角度对多卷性能进行优化,弥补了现有多卷使用方案应对LSM键值存储系统的读请求热数据分布严重不均的缺点.

3)在亚马逊云的弹性块存储卷上实现了TANGO以及对比方案,并将所有方案进行了详细的对比和分析,从多卷整体性能、各成员卷平均性能、成员卷实时性能和迁移开销等方面验证了TANGO的高效性.

2 背景及相关工作

2.1 LSM键值存储系统架构

如图1所示,基于LSM的键值存储系统中包含多层存储结构(L0、L1至底层),每层存储容量有限,但每层的容量随层数的增加而逐层增大.所有到来的写请求都会被缓存至内存的缓存区memtable,而后写入到一个固定大小的sstable文件中,该sstable会被放入L0层.L0层中数据总量达到设定阈值时会触发合并操作(compaction),该操作将L0层和L1层有键范围重叠的多个sstable进行整理,合并重复数据、删去无效数据后,对剩下的键值对以键为序进行排序,并且将键范围相近的数据放在一起构成新的sstable,之后再写入到L1层中.其它Li~Li+1层的合并操作以此类推.

具体而言,合并操作通常需要执行以下3个步骤:

①读:将选定的Li和Li+1层sstable读取到内存.

②归并:将键值对从这些sstable数据块中的紧凑格式解包为键值对格式,然后将这些Li和Li+1层所有的键值对归并排序、删去Li和Li+1有相同键的键值对.接着将余下排序好的键值对重新打包为紧凑的sstable数据块格式,同时为每个新sstable生成对应的索引块和过滤器等元数据信息.

③写:将这些新sstable写回存储系统、插入到Li+1层,最后删去Li和Li+1层的旧sstable.

在上述写请求的数据流动路径下,LSM键值存储系统处理读请求时,首先在内存的memtable查找,然后从L0~Ln层依次进行查找.在Li层查找时,根据sstable的键值范围确定每层的候选sstable,然后使用候选sstable的元数据查找候选数据块,并在该数据块中进行查找.如果该层未读命中,则继续在下一层进行查找,直至命中或所有层均未命中.

2.2 多卷负载均衡方式

亚马逊云是目前应用最为广泛的云服务,因此本文以亚马逊云存储为例进行研究.在亚马逊弹性块云存储(Elastic Block Store)的计费策略下,实现多卷中各个成员卷之间的负载均衡是高效、低成本地充分提高和发挥多卷性能的关键之一.数据写入时在各个成员卷之间的落盘策略会对后续负载均衡状况产生巨大影响.在基于LSM的键值存储系统中,各层的写入都包含在合并操作中.因此合并操作决定了绝大部分键范围在各个成员卷之间的分布情况.

现有多卷负载均衡方案以调控写请求数据布局为主,可以归纳为3类:轮询方式,RAID方式和哈希方式.

①轮询方式:现有文献中没有发现针对云存储多卷优化的LSM键值存储系统的工作.为证明本文提出方案的有效性,现将现有其它多路径的负载均衡方法用于云存储多卷作为对比.通过轮询方式依次选取多卷中的成员卷[21,22],将上层通过合并操作新生成的sstable写入其中,可以让数据量在所有成员卷之间均匀分布.当然,也仅能实现数据量的均衡分布.

在LSM键值存储系统中,由于Li与Li+1层之间的键范围存在重叠,且写负载的键值范围不确定,所以合并操作所涉及的层数同样存在较大的不确定性.因此,在多个成员卷之间以轮循方式写sstable时,无法实现键范围在各个成员卷之间的均衡分布.最终,导致轮循方案只能一定程度上解决写负载的均衡问题,而无法有效避免读负载的热键范围集中在某个成员卷上的问题.

②RAID方式:文献采用RAID0的方式组织多卷来充分发挥其所有成员卷的并行性能[23],但未注意到多卷之间的负载均衡问题.先将多卷中的N个成员卷组成RAID0,接着将要写入到下一层的sstable切分为多个固定大小的数据块(Chunk),然后将这些数据块并行地写入到每个成员卷.具体地,sstable的大小、切分的数据块大小以及成员卷的数量等因素综合决定了数据块在各个成员卷上的分布情况.RAID0布局策略不仅能使每个sstable的键范围分散到各个成员卷上,还能够充分利用多个成员卷的并行写性能.

但RAID0布局方式存在以下问题:首先,RAID0分割sstable进行数据布局时没有考虑各个数据块所包含键范围的热度,仍然无法解决读负载不均衡导致的读I/O请求集中在单个成员卷上的问题,从而会造成RAID0整体性能下降.其次,RAID0扩容时需要进行数据重构,会对所有数据产生影响,需要进行大量的数据迁移,也会对性能产生影响.

③哈希方式:现有文献中没有发现结合云存储多卷负载均衡和LSM键值存储系统的哈希优化方案.为证明本文提出方案的有效性,现将现有其它负载均衡的哈希方法[24]用于云存储多卷作为对比.哈希布局方案通过哈希算法来管理多卷中的各个成员卷,基于sstable文件名进行哈希,根据哈希结果将各个sstable分配到对应的成员卷.哈希布局方案相比轮循方式更加随机,也能够避免成员卷数量变动时带来的大量的数据迁移,减少对整体性能的影响.

但是,若成员卷数量较少,则容易发生哈希冲突,从而导致各成员卷之间负载不均衡.此外,现有哈希布局方案同样无法感知sstable内的键范围,存在将LSM不同层键范围重合度高的sstable分配到同一个成员卷的问题.

3 问题分析

在本节中,首先展示了组合使用多个云存储卷具有更高的性价比这一现象,然后揭示了目前多卷性能无法充分发挥这一问题并作出了进一步探索和说明.最后,基于发现的现象和问题,提出本文的设计思想.

3.1 组合使用多个单卷性价比更高

如表1所示,展示了大型云服务提供商亚马逊的云存储服务收费情况.亚马逊为单个云存储卷的IOPS和带宽都设置了最大值,并且提供了不同的容量性能模式.用户可以根据自己需求选择相应类型的云存储卷并进行参数配置.用户可基于初始IOPS选择是否购买额外的IOPS,购买时以IOPS/GB为单位,但是不能超过最大IOPS和带宽限制.所以如果只使用单个云存储卷提供服务,容易陷入带宽和IOPS瓶颈.因此考虑通过多卷组合的方式以打破单卷的性能限制、获得更高的存储性能.

表1 亚马逊弹性块存储的gp3和io1性能和费用概要Table 1 Summary of Amazon EBS performance and price

以亚马逊gp3类型的云存储卷为例,1个容量3000GB的单卷与3个容量1000GB的多卷的总容量和总费用都相同.表2示意了应用广泛的LSM键值存储系统RocksDB在总容量和总费用相同的gp3单卷(3000GB)和多卷(3×1000GB)上的随机写性能.多卷时,RocksDB采用轮循的方式在3个单卷之间写sstable.从表2中可以观察到,相比同费用和容量的单卷,多卷时RocksDB的随机写IOPS和吞吐率均提升了一倍、平均时延降低了一半.因为单卷受到了带宽的限制,导致实际使用的IOPS也受到明显的影响.而3个存储卷理论上带宽可以提高2倍,但实际测试中只提高了1倍,性能并没有完全发挥.

表2 RocksDB在总容量和总费用相同的gp3单卷和多卷上的随机写性能(归一化结果)Table 2 RocksDB random write performance with a single or three volumes(normalized)

直观来看,通过将单个大容量云存储卷拆分为多个小容量卷的方式,可在费用和容量相同的情况下获得更高的性能.但是多卷性能没有完全发挥,需要进一步验证和探讨.

3.2 多卷性能无法充分发挥的现象

测试采用的系统为RocksDB,负载通过YCSB(Yahoo!Cloud Servering Benchmark,YCSB)[25]进行仿真.测试中配置了6个单卷,类型为亚马逊弹性块存储gp3的卷,每个卷的容量为60GB、购买的IOPS为3000.

测试时,先通过YCSB加载5000万条键值对,然后运行1000万条请求的测试负载,包含80%的读操作和20%的更新操作.RocksDB生成的sstable被以轮循的方式分配到6个卷中.

图2 多卷整体和各成员卷的实时IOPS情况,一种灰度的形状代表一个成员卷Fig.2 Realtime IOPS of the six volumes and each volume

图2示意了测试时多卷整体(上半图)和每个成员卷(下半图)的实时IOPS情况,通过不同的灰度表示不同的卷.从图2可以观察到,每个时间段,整体IOPS由于LSM聚合写的效果而超过购买的18000,但立即又下降到10000~15000的水平;另外,每个时间段都有一个卷的IOPS长时间运行在最高IOPS(3000)水平,其它卷的IOPS则在1000~2000之间的水平.该现象导致了绝大部分单卷IOPS性能未被充分利用,所以多卷性能存在较大波动,且多卷性能的起伏与大部分单卷的IOPS密切相关.

图3 键范围1.4×1010~1.5×1010在各卷分布的局部放大,每一种灰度表示一个成员卷Fig.3 Distribution of the key range 1.4×1010 to 1.5×1010for each layer of the LSM over 6 volumes

3.3 多卷性能无法充分发挥的原因

图3表示了LSM各层的键范围(1.4×1010~1.5×1010)在6个成员卷上的分布情况,每种灰度表示一个成员卷.从图3可以看到:数据在各个存储卷上的分布是不均匀的,有的灰度在单层中占得比例更大一些,表明某些键范围更多地分布该灰度表示的卷中;相邻层之间键范围重叠的数据灰度相同,说明这些数据都被存储在一个成员卷中.因此,若键范围重叠较高的数据被频繁读取时,大量的读请求将会聚集在同一个成员卷上.因为每个存储卷都存在带宽和IOPS限制,热数据较多的成员卷达到性能瓶颈后无法提供更高的性能,但是其它成员卷因为热数据较少,带宽和IOPS反而得不到有效利用,从而使多卷的整体性能下降.

3.4 问题分析小结和设计思路

LSM的数据分层机制造成了层与层之间键范围的重叠,导致读负载的小范围热数据分散在多层的多个sstable中,但是现有数据布局方案无法有效地将多卷中分布在多层、含有同一键范围的热sstable分散至多个成员卷.若多卷中数据无法根据键范围情况均匀地分散到各个成员卷中,各成员卷的读I/O数量将无法均衡.

为此,以提升多卷读性能为目标,提出一种云存储多卷负载均衡的LSM键值存储系统TANGO.TANGO通过优化LSM的合并操作的写过程来实现多卷的读负载均衡.在LSM键值存储系统执行合并操作并将新生成的Li+1层sstable写入到Li+1层中之前,先检测每个成员卷所拥有的Li+2层sstable与要写入的sstable的键范围重叠情况,选择键范围重叠最小的成员卷写入.这样一来,针对每个键范围数据的读I/O请求会被均匀分散至多个成员卷,能够达到多卷读负载均衡的目的,从而充分发挥多卷的性能.此外,TANGO主动地通过选择性复制的方式将满负荷卷的I/O请求卸载至其它卷,进一步处理由负载变化导致的各成员卷热点数据变化的问题.

4 TANGO设计

如图4所示,为TANGO的整体架构图,从读和写两个方面进行多卷的负载均衡调度.

图4 TANGO整体架构Fig.4 Architecture of TANGO

在处理写请求时,不论是将memtable经由flush操作写入到L0层,或是将合并操作新生成的Li+1层sstable写入到Li+1层,都可以视为对新生成sstable的处理过程,都通过写入决策进行写数据分布.

写入决策:在写入新sstable时,先检测每个成员卷所拥有的sstable与要写入的新sstable的键范围重叠情况,选择键范围重叠最小的成员卷写入.通过写入决策的调整,键范围更均匀地分布在多个卷之间,主动地均衡了各卷之间可能的读负载.

读请求到来时,会直接分发给数据所在的sstable,但是为了防止热点数据过于集中,会定期通过负载迁移将读热点数据复制到负载较低的卷,以对读负载在各个卷之间进行重新分布.

负载迁移:负载迁移针对的是热的读请求数据,通过数据迁移操作来直接调整各个成员卷读负载的大小.若某个成员卷的IOPS达到其付费IOPS,则说明该成员卷数据热度过高,需要迁移部分热数据到其它IOPS较低的成员卷,迁移时以sstable为最小单位.需要指出的是,迁出的数据通过复制的方式进行,因此无须将数据迁回的操作.

4.1 关键信息统计

在进行具体的读写调度之前,需要收集每个成员卷信息,包括每个sstable的被访问情况以及键范围等,然后计算出每个sstable的热度值以整个成员卷的访问权重,为写入决策和数据迁移提供依据.

关键信息统计部分除了需要简单记录各个成员卷中每个sstable的键范围,还需要计算出每个sstable的热度值和每个成员卷的访问权重.

(1)

其中,N(t-1,t]表示在时间间隔(t-1,t]内第i个sstable被访问的次数,WRio为sstable的大小除以256KB所得的实际写入的I/O请求数量(因为云存储卷会自动地将小写请求尽可能地聚合为256KB的大写请求[26]),α为冷却系数,在0~1之间(默认为0.5).

(2)

上述统计的关键信息反映了每个卷的总体负载情况、对每个卷的I/O访问以及卷内的键范围分布,为写入决策和负载迁移提供了均衡各卷负载的依据.另外,上述统计信息可以从LSM的相关处理过程中直接获得,且需要的计算开销低,所以不会带来明显的开销.

4.2 写入决策

4.2.1 键范围重叠情况判断

写入sstable时除了对数据总量均匀分布的考量,还要尽量让后续对该sstable所包含键范围数据的读取I/O请求分散在多个成员卷中,从而实现多个成员卷之间的I/O请求数量均衡.

因此,写入新生成的sstable时,需要避免写入到与该sstable对应键范围重叠比例较大的成员卷.所以,要先确认新生成的Li+1层sstable与每个成员卷已有的Li+2层sstable键范围的重叠情况,然后将新生成的sstable写入到重叠次数最小的成员卷.写入memtable时的操作相当于L0层的特例,不再单独说明.

在选择成员卷写入新生成的Li+1层sstable时,将该sstable与每个成员卷中Li+2层sstable的键范围进行对比.如果该sstable的键范围与Li+2层某个成员卷的sstable存在键范围重叠现象,则将该成员卷的重叠次数加1.

4.2.2 选择要写入的成员卷

根据统计结果,选取重叠次数最小的成员卷写入新生成的sstable.当有多个成员卷的重叠次数相同时,优先考虑访问权重最低的成员卷,若仍有相同项,则随机选择一个成员卷写入新生成的sstable.

如图5所示,展示了一个合并操作生成的sstable写入时选择成员卷的例子.图5中,先对L1层的sstable 0(键范围b-d)与L2层的sstable 1(键范围a-b)和sstable 2(键范围c-d)进行合并,然后生成了新sstable 11(键范围a-b)和sstable 12(键范围c-d).通过键范围重叠情况判断可知,sstable 11与卷1、卷2、卷3、卷4的重叠次数分别为1、0、0、0,所以sstable 11可以写入到负载较低的卷2中;sstable 12与卷1、卷2、卷3、卷4的重叠次数分别为0、1、0、0,所以sstable 12可以写入到负载较低的卷3中.

图5 写入时选择成员卷的示意图Fig.5 Write the sstable to a volume with the minimal key range overlap

至此,借助LSM键值存储系统flush操作和合并操作写入新生成sstable的时机,以较少的额外写操作,可以将相邻层之间具有键范围重叠的sstable均匀分散至多个成员卷,在整体上实现各成员卷之间的负载均衡.

4.3 负载迁移

数据在写入各成员卷后,因为读负载发生变化,导致部分数据过热,使得各成员卷之间的I/O压力不均衡.为此,只能主动迁移热点数据来进行平衡,将集中在单个成员卷上的热点数据分散至负载较低的成员卷,从而使得多个成员卷的IOPS均匀且接近其购买的IOPS.

负载迁移功能弥补了写入决策无法应对负载变化引起的各卷之间读负载不均的问题.由于负载迁移采用的是复制热数据的方式,因此避免了迁回数据的开销.

5 实验与分析

本章节基于亚马逊弹性块云存储卷进行测试,测试所用负载由YCSB生成.

5.1 测试环境

测试平台:使用应用最为广泛的亚马逊云服务作为测试平台.测试时,使用EC2 m5d.2xlarge云计算实例,该计算实例配置了8个vCPU、32GB内存.组合使用6个容量均为60GB的gp3卷,理论上最高可提供18000的IOPS性能;作为对比,使用单个容量为360GB的gp3卷,该大容量的卷购买3000的IOPS性能.

对比方案:在应用广泛的LSM键值存储系统RocksDB的基础上,实现使用多个成员卷的TANGO及对比方案,同时对比使用单个大容量卷的性能.具体对比了TANGO、轮询、RAID和哈希4种方案.多卷方案中,轮询方案通过循环的方式为每个sstable选择写入的成员卷;RAID采用RAID0的方式将sstable切分为块大小后组织为条带的形式写入所有的成员卷;哈希则是通过哈希sstable文件名来确定该sstable所写入的成员卷.

测试工具:本文采用常用的云服务器标准测试集YCSB[25]进行的测试,它提供了一个框架和一组默认的7个工作负载,用于评估键值存储的性能.1)负载Load:100%写操作,生成数据集满足Uniform分布;2)负载A:50%读操作,50%写操作,Zipfian分布;3)负载B:95%读操作,5%写操作,Zipfian分布;4)负载C:100%读操作,Zipfian分布;5)负载D:95%读操作,5%写操作,Latest分布;6)负载E:95%范围查询,5%写操作,Zipfian分布;7)负载F:50%写操作,50%读改写操作,Zipfian分布.

测试时,首先基于YCBS自带的A~F负载评估各种方案的整体效果,最后使用YCSB的合成负载进行验证.

默认参数:RocksDB的键大小为16B、值大小为256B,sstable大小为8MB,同时仅将sstable的元数据缓存在内存中,以精确观察TANGO对多卷IOPS性能的利用情况.

需要注意的是,观察YCSB整体性能的测试获取的是RocksDB之上的用户IOPS请求,由于在RocksDB内部将写请求聚合后再处理,因此统计得到的IOPS可能高于多个卷的IOPS之和.观察每个卷IOPS性能的测试获取的是与云存储卷实际交互的I/O信息,因此统计得到的IOPS将在卷所购买的IOPS性能附近.

5.2 多卷整体性能评估

5.2.1 YCSB默认负载下的IOPS

本小节使用YCSB的6种默认负载(负载A~F)来模拟工作负载,分别测试评估轮询、RAID、哈希和TANGO 4种方案性能.

首先随机加载5000万条键值对数据,然后运行1000万条键值对的工作负载.测试结果如图6所示.6种工作负载下TANGO的性能都优于其它多卷方案,且单卷相同容量时的IOPS明显低于所有其它多卷方案.负载D时,TANGO的IOPS为23013,相较于其它多卷方案的IOPS至少提升了52%.由于6种默认负载的读写比例和数据分布方式变量控制较为复杂,后续控制负载的变量只改变读请求比例做进一步观察测试.

图6 不同YCSB负载下各种方案的多盘整体IOPS

5.2.2 不同读写比例合成负载下的IOPS

本次测试基于YCBS的负载C合成的不同读写比例的负载以评估TANGO及其对比方案的整体IOPS性能,相比YCSB的默认负载,读写比例设定更加灵活.首先随机加载5000万条键值对,然后执行1000万条键值对的随机请求,统计不同读请求比例下的整体IOPS,结果如图7所示.

图7 不同读请求比例下各种方案的多卷整体IOPS

从图7中可以观察到,组合使用6×60GB gp3卷的TANGO、轮询、RAID以及哈希方案在不同读操作比例负载下的IOPS,均显著高于使用单个容量为360GB的gp3卷.

在使用多个成员卷的方案中,TANGO在不同读写比例的负载下均表现出最高的IOPS性能.在100%随机读的负载下,TANGO的IOPS为17363,实现了多卷理论上最高18000 IOPS的94.4%利用率;相较于轮询、RAID和哈希方案的IOPS性能,TANGO分别提升了26%、21%和30%,是费用相同的情况下单个大容量卷IOPS的7倍左右.

随着负载中写请求比例的增加,所有方案的IOPS性能均有增加;主要原因是LSM键值存储系统对写请求I/O的聚合作用.在50%读和50%写的混合负载下,TANGO的IOPS性能为33419,比RAID0高25%;虽然RAID0通过并行写6个卷提升了写性能,但无法在多个成员卷之间进行热点数据均衡.哈希方案由于无法有效地在多个成员卷之间分散键范围,因此在读写混合负载下致使单个成员卷的压力超过该卷的付费IOPS、限制了多卷整体IOPS的发挥.轮询方案相对于RAID和哈希方案,能够将写均衡到不同的存储卷上,从而间接地使读操作均衡,因此性能提高较快.

5.2.3 不同读写比例合成负载下的平均响应时间

如图8所示,不同读请求比例下各种方案的平均响应时间.可以看到TANGO方案的平均响应时间最小,随着读请求比例降低,平均响应时间持续减少.在读比例为70%时,TANGO的平均时延仅为41us,比其它多卷方案中最低的轮询方案降低了22%.这是因为TANGO在写的过程中借助合并操作,实行了深入的数据分散布局,将数据写入到键范围重合度最低的成员卷中,以避免过多请求访问同一个成员卷从而造成排队时间过长.

图8 不同读请求比例下各种方案的平均响应时间Fig.8 Average response time under varied read-write ratios

5.3 各成员卷性能

需要指出的是,受云计算实例和亚马逊云的限制,无法获取RAID方式中各成员卷的I/O性能.

5.3.1 各成员卷的平均IOPS

如图9所示,显示了两种读请求比例下3种方案各成员卷的平均IOPS.可以看到,对于轮询和哈希方案,在90%和50%的读请求比例下,各成员卷之间的平均IOPS参差不齐,始终存在较大的差距.在90%读请求比例下,轮询方案和哈希方案的IOPS最高成员卷与最低成员卷的IOPS相差分别达到35%和37%.对于TANGO方案,两种读比例下的各成员卷IOPS均在2900附近,差异都很小,尤其是在50%的读请求下,各成员卷的IOPS相差小于1%,且均接近每个卷的3000最大IOPS.

图9 两种读请求比例下3种方案的成员卷的平均IOPS

5.3.2 各成员卷的实时IOPS

为更直观地说明各成员卷之间读负载不均衡对总体性能的影响,本次测试使用YCBS合成的不同比例的读写负载,使用iostat获取每个卷的实时IOPS,每种标记表示一个卷,结果如图10所示.

从图10中可以观察到,轮询和哈希方案下各个成员卷的实时IOPS在2000~3000间呈现明显的分层,大部分时间只有1个或2个成员卷能够运行在最高的3000的IOPS状态,因此多卷整体性能没有被充分发挥.

TANGO方案下,各个成员卷的IOPS均维持在单卷最高的3000的IOPS附近运行,且成员卷之间的IOPS差距较小.所以TANGO方案下的多卷整体性能最好.

图10 两种读请求比例下多卷方案各成员卷的实时IOPS

另外,由于TANGO在写入时将负载进行均匀分布,使每个成员卷都能以最高性能运行,整体性能上移,因此能够在更快的时间内完成操作.

5.3.3 多卷方案各成员卷实时IOPS的标准差

如图11所示,不同读请求比例下各种方案的实时IOPS标准差,该标准差由所有成员卷的最高IOPS与最低IOPS计算而来.可以观察到,整体上,TANGO的标准差远小于轮询和哈希方案.随着运行时间推移,TANGO各成员卷IOPS之间的标准方差逐渐减少,且稳定在100左右.因为TANGO能够识别冷热数据并且进行负载调度迁移,而轮询和哈希方案无法减少各卷之间的I/O负载不均衡,其标准差稳定在400左右.

图11 不同读请求比例下各种方案的实时IOPS标准方差Fig.11 Realtime IOPS standard deviations of each volume for varied read-write ratio and approaches

5.4 数据迁移开销

TANGO的开销可以分为两个部分:1) 写入决策改变合并操作中新生成sstable写入位置带来的开销;2) 数据迁移的开销.写入决策的执行可以减轻数据迁移的压力,因为数据被按照键范围分布的更加均匀.

写入决策需要统计各个成员卷的关键信息,判断键范围重叠情况,所有的信息统计和判断操作都是通过额外线程来执行的.因为sstable的粒度在MB级别,所以只需要少量的存储空间和CPU计算资源即可,不会引起明显的性能开销.由于TANGO仅改变了sstable的写位置,因此不会对sstable的持久化和合并操作造成额外影响.

因为在多卷存储体中,热点聚集于某个存储卷中的多个sstable中,并且该卷的性能达到上限后限制了其余卷的访问,因此需要进行热数据的迁移来进行读负载均衡.

因此,TANGO的主要开销是数据迁移.为了验证TANGO方案的迁移开销,引入了一个基于IOPS的数据迁移方案进行对比.基于IOPS的迁移方案将I/O压力最高的卷中的热数据迁移到当前I/O压力最小的卷.

表3 TANGO与基于IOPS策略的迁移数据量和次数对比(归一化后的结果)Table 3 Migration times and data size(normalized)

测试结果如表3和图12所示,表3展示了两种迁移方案的迁移次数和迁移数据总量的对比,图12展示了每次迁移耗时的分布情况.从表3可以观察到,基于IOPS的迁移方案迁移次数比TANGO多了65%,迁移数据量也比TANGO多了65.5%.从图12可以观察到,基于IOPS的迁移方案中75%的迁移耗时100ms左右,因基于IOPS的方案从IOPS最高的存储卷中迁移sstable时读取较慢,这进一步增加其迁移耗时.表3和图12的结果表明,TANGO的读负载迁移开销较低.

图12 TANGO与基于IOPS策略的单次迁移耗时对比Fig.12 Time for one migration

6 总 结

相比同容量的单个云存储卷,组合使用多个小容量的单卷能够获得更好的性能.但是简单地组合使用多个成员卷并不能充分发挥出多卷的最大性能,且现有的多卷负载均衡方案依然存在单个成员卷读访问热度过高而使整体性能无法完全发挥的问题.为此,提出云存储多卷负载均衡的LSM键值存储系统TANGO.TANGO从读和写两方面入手来调整负载在多卷之间的分布:在写方面,通过改善LSM的合并操作来优化初始数据布局,选择键范围重叠最小的成员卷写入新生成的sstable;在读方面,通过迁移少量热点数据来进一步均衡各成员卷间的负载.在亚马逊云存储卷上评估表明,相比相同存储容量的单卷,采用了TANGO方案的同等容量的多卷可提高7倍左右的性能;相比采用其它方案的多卷,TANGO能提升20%以上的性能,且各成员卷间负载更加均衡.

猜你喜欢

轮询键值存储系统
分布式存储系统在企业档案管理中的应用
非请勿进 为注册表的重要键值上把“锁”
天河超算存储系统在美创佳绩
基于等概率的ASON业务授权设计∗
一键直达 Windows 10注册表编辑高招
依托站点状态的两级轮询控制系统时延特性分析
利用时间轮询方式操作DDR3实现多模式下数据重排
华为震撼发布新一代OceanStor 18000 V3系列高端存储系统
一种基于STM32的具有断电保护机制的采集存储系统设计
数据链轮询多网优化设计方法研究*