作者简介:沈佳杰(1989—),复旦大学工程师、博士.研究方向:纠删码存储系统、下一代网络架构.E-mail:jiajieshen@fudan.edu.cn
中文责编:英 子
1)复旦大学信息化办公室,上海 200433; 2)复旦大学计算机科学技术学院,上海 200433; 3)上海市智能信息处理重点实验室,上海 200433
1)Informatization Office, Fudan University, Shanghai 200433, P.R.China2)School of Computer Science, Fudan University, Shanghai 200433, P.R.China3)Shanghai Key Laboratory of Intelligent Information Processing, Shanghai 200433, P.R.China
erasure-coded storage systems; key-value storage systems; cloud storage systems; storage architecture; load balance; I/O performance optimization
DOI: 10.3724/SP.J.1249.2020.99175
纠删码广泛部署于分布式键值存储系统来保证数据可靠性.通过将用户数据编码并存储到多个存储节点,纠删码存储系统可以在部分节点失效的情况下恢复原始数据.随着存储节点数量的增加,存储节点往往会出现负载不均衡的情况,限制其在高校云计算和信息化领域的应用场景.为解决上述问题,提出大规模纠删码键值存储系统负载均衡方案.通过将逻辑控制和存储功能分离,纠删码存储系统可以高效地确定存储节点的负载状态.为充分利用节点之间网络带宽资源,提出多切片数据编码传输方案.根据用户写入数据量,设计混合数据写入机制来提升数据写入操作的性能.在此基础上,设计了原型纠删码键值存储系统,实际原型系统测试验证了本研究中负载均衡算法的有效性.
Erasure codes are widely used in distributed key-value(KV)storage systems to enhance the data reliability. However, load balance of storage nodes is a well-known challenge when deploying such erasure-coded storage systems in cloud computing and information service scenarios. To solve the above problems, we propose a large-scale load balance scheme for erasure-coded KV storage systems. By adding the control nodes to storage systems, our scheme efficiently obtains current states of the storage nodes. To improve the utilization of network bandwidth, we design a multiple-coded shard transmission proposal. Based on data volume of write requests, we further provide an efficient hybrid writing scheme. Finally, we implement a prototype erasure-coded storage system and conduct extensive experiments to verify the efficiency of our scheme.
纠删码[1]被广泛用于分布式存储系统[2]来保证数据可靠性.通过将用户数据编码生成多个块并保存多个存储节点,在部分存储节点失效的情况下,纠删码存储系统依然可以恢复出原始用户数据.与此同时,通过并行化读写用户数据,纠删码键值存储系统有效保证数据读写操作的性能.
然而,纠删码难以完成多个存储节点的负载均衡,这极大限制了大规模纠删码键值存储系统在云计算和信息化领域的部署应用.传统纠删码键值存储系统往往仅考虑有限存储节点的数据读写方案,缺乏在实际存储系统中设计海量存储节点读写过程中负载均衡机制.具体说来,在纠删码键值存储系统中设计负载均衡方案存在以下具有挑战性的难点.首先,负载均衡机制需要监控各个存储节点的状态.当节点数量较多时,存储系统往往需要多个监控节点协同获取存储节点的当前状态.其次,负载均衡方案需要充分利用节点之间的带宽来提升数据读写操作的性能.最后,负载均衡方案必须能够保证各种类型用户读写请求性能需求,充分考虑不同因素对数据读写时延的影响.
为应对上述实际存储系统中的挑战,本研究设计了面向大规模纠删码键值存储系统的负载均衡方案,提出一种逻辑控制和存储分离的纠删码键值存储系统软件架构,并设计相应的数据读写方案.具体说来,本研究有以下贡献:
1)构建了存储逻辑和存储分离的软件架构.通过部署多个逻辑控制节点并行化查询操作,存储逻辑和存储分离的软件架构可以快速获取存储节点的状态信息,动态调整数据存储策略,从而保证数据读写过程中各个存储节点的负载均衡.
2)提出了多切片数据编码传输方案.在数据写入过程中,用户端设备将对象数据切分成多个切片,发送多个逻辑控制节点,执行数据编码和传输操作,从而充分利用逻辑控制节点和存储节点之间的网络带宽,提升大数据量写操作的性能.
3)设计了基于数据量的混合式数据写入方案.通过副本存储机制和纠删码存储机制分别处理小数据量读写操作和大数据量读写操作,基于数据量的混合式数据写入方案兼顾了实际应用场景中各种数据量读写请求的性能需求.
4)实现了原型纠删码键值存储系统.为了测试负载均衡方案的有效性,本文使用原型纠删码键值存储系统测试了数据读写操作的性能.实验结果表明本文提出的负载均衡方案可以有效地保证存储系统数据读写操作的性能.
为保证存储数据的可靠性,纠删码存储系统将用户数据分成生成k个数据分片,编码生成m个校验分片,并将这些分片写入n=k+m个存储节点.通过这种方式可以保证即使在m存储节点失效的情况下,纠删码存储系统依然可以读取任意k个分片恢复出用户原始数据.
这里使用一个例子来说明纠删码键值存储系统数据写入过程.图1展示了用户端设备将对象写入4个存储节点的例子.
如图1,纠删码键值存储系统需要经过编码,传输和存储操作完成数据写入过程.用户端设备切片对象生成数据分片A和B, 编码数据分片生成校验分片A+B和A+2B, 并将编码完成的数据写入到存储节点.在数据写入的过程中,用户端设备和各个存储节点的计算、网络和存储资源,往往会成为纠删码键值存储系统的性能瓶颈.因此,优化这些瓶颈操作也成为了当前研究的重点.
纠删码存储系统被广泛部署于分布式存储系统来保证数据可靠性.REED等[3]提出RS(Reed-Solomon codes)码来保证传输和存储数据的可靠性.MU等[4]提出RS-Paxos算法来提升强一致性纠删码存储系统的数据读写操作的性能.这些编码被部署到HDFS[5]等分布式存储系统来保证数据可靠性.
研究人员已提出了多种编码方案来减少纠删码计算开销.PLANK等[6]提出Cauchy RS码优化了编码操作性能.ZHANG等[7]提出CaCo编码方案提升了Cauchy RS码的数据编码操作效率.HUANG等[8]提出PUSH方案来并行化数据编码和传输操作,充分利用了所有的存储节点计算和传输资源.类似的编码和计算性能优化工作还包括X-Code码[9],HoVer码[10],STAR码[11],Elastic-RAID方案[12].
纠删码存储系统也通过合理设计数据编解码方案来来提升网络传输的性能.通过在数据修复过程中引入网络编码方案,DIMAKIS等[13]提出用再生码来减少数据修复操作消耗的网络带宽资源.KERMARREC等[14]提出用延时修复机制来批量修复存储节点,进一步降低了网络传输开销.为保证数据传输和存储的安全性,RESCH等[15]提出AONT-RS算法来加密用户数据.ULUYOL等[16]提出Pando算法减少跨数据中心的Paxos算法一致性写入操作的网络传输开销.类似的网络传输性能优化工作包括LRC码[17],NCCloud系统[18],NCCS方案[19],CRaft算法[20].
与此同时,纠删码存储系统引入多种性能优化机制来减少磁盘I/O开销.通过优化RDP编码的数据读写过程,XIANG等[21]提出RDOR方案来减少单个磁盘修复操作的磁盘I/O开销.WANG等[22]构建了MDR码来减少数据修复过程中数据读取量.ZHANG等[23]提出RAID+方案来并行化读取磁盘中存储的数据,从而减少数据修复操作的时间.SHEN等[24]提出CASO方案来确定数据编码过程的关联性,从而提升数据写入操作的性能.为提升AONT-RS算法[15]的数据存储效率,LI等[25]提出CAONT-RS算法来提升数据去重操作的性能,并开发了CDStore系统[26]来提供存储服务.
虽然当前的性能优化方案可有效保证小规模纠删码键值存储系统数据读写操作的性能,随着纠删码键值存储系统规模的扩大,各个存储节点之间的负载均衡问题日益愈发凸显.具体说来,大规模部署纠删码存储系统存在以下问题:
1)存储节点检测较为困难.传统的纠删码存储存储系统逻辑控制功能和存储空间资源的分离性不足,造成了存储节点状态监测较为复杂.
2)节点之间的带宽资源利用不充分.由于当前纠删码的编码方案较为单一,仅读写存储节点的数据,难以充分利用节点之间的网络带宽.
3)难以动态选择数据读写策略.当前固定数据读写策略难以满足各种信息化存储应用场景下用户差异化的数据存储服务需求.
针对上述具有挑战性的问题,本研究设计了一种逻辑控制和存储资源分离的软件架构来快速地确定存储节点的状态信息.在此基础上,提出多切片数据编码传输方案和基于数据量的混合数据写入方案来提升数据读写操作的性能.
为分析制约分布式存储系统读写操作性能的关键性因素,测量了在不同数据量情况下单个存储节点数据读写操作的性能.
为探究制约大规模分布式键值存储系统数据读写性能的因素,实验将测试了用户端设备向单个存储节点读写数据的性能.为不失一般性,实验使用实际存储系统中常用Go标准库[27]中HTTP的Get和Put来完成对于存储节点的读写操作.
实验使用两台服务分别作为用户端设备和存储节点,并部署了1 Gbit络连接两台服务器.这里主要测试了从1 kbyte~256 Mbyte不同数据量情况下数据读写操作的时延.时延主要统计数据读写操作消耗的时间.这里取10次数据读写操作时延的平均值来获取最终的测试结果.
图2展示了数据读写操作的时延测试结果.通过观察图2可以发现以下规律:
1)相较于数据读取操作,数据写入操作往往会消耗更多的时间.
2)当单个存储节点读写数据量较小的情况下,数据读写操作的时延具有较大确定性.
3)当前用户写入较大情况下,读写的数据量对数据写入操作的时延有着较大的影响.
在设计实际的纠删码键值存储系统时应当充分考虑用户端设备和服务器节点之间数据传输特性,从而保证数据读写操作的性能.
分析测试结果可知,各种数据量的数据读写操作的特性往往存在着较大的差异.具体说来,数据读写操作的特性会对纠删码存储系统优化工作产生以下的影响:
1)数据写入操作往往是分布式存储系统的性能瓶颈.数据写入操作性能往往低于数据读取操作,同时也决定着编码后的分片数据写入那些存储节点,负载均衡方案应当优先优化数据写入操作.
2)数据量较少的对象读写请求,纠删码存储系统应当减少对象传输经过的节点数量.在读写数据量较小时,每次传输操作的时延具有一定的确定性,减少小数据量读写操作经过的节点数量往往可以有效提升于数据读写操作的性能.
3)数据量较大的对象读写请求,纠删码存储系统应当增加数据读写操作可使用的网络带宽.在读写数据量较大,数据读写操作的时延主要受待传输的数据量和可用带宽比例的影响.为提升大数据量读写操作的性能,负载均衡方案应当保证数据读写操作的网络带宽.
综上所述,纠删码键值存储系统负载均衡方案需要充分考虑数据读写操作的性能.针对各种数据量情况下数据读写操作的特点,负载均衡方案需要针对性地设计性能优化方案.与此同时,纠删码存储系统需要快速地获取所有存储节点状态,从而保证用户端设备提交的数据读写操作的性能.
为应对上述具有挑战性的实际问题,本研究提出一种逻辑控制和存储空间分离的软件架构,设计了多切片数据编码传输方案来充分利用各个节点之间的网络带宽资源,构建了基于数据量的混合数据写入方案来提升数据写入操作的性能.在此基础上,实现原型纠删码键值存储系统,并部署负载均衡方案,测试数据读写操作的性能.下面将介绍逻辑控制和存储空间分离的软件架构和数据读写过程中的负载均衡方案.
为高效地获取存储节点的状态信息和提升数据读写操作的性能,以下将从系统体系结构和数据读写过程方面来优化负载均衡方案.
为高效地管理计算、网络和存储资源,本研究设计了保证逻辑控制和存储资源分离的层次型软件架构,如图3.
在层次型软件架构中,纠删码存储系统的服务器节点可以分成两种类型:
1)逻辑控制节点:负责接收用户端设备数据,编码对象生成分片,读写存储在各个节点中的分片数据及监控其附属存储节点的运行情况.
2)存储节点:负责接收逻辑控制节点编码完成的分片,并将其保存在本地存储空间.由于不需要部署读写逻辑模块,存储节点可以使用较为简单的读写接口来保证数据读写操作的可靠性.
通过将编码控制逻辑和存储服务分布到服务器节点,纠删码存储系统可以很容易实现编码计算能力和存储能力的扩展.当存储服务不可访问时,纠删码存储系统可以根据逻辑控制节点收集的信息快速定位出失效的存储节点.
由于存储节点普遍存在暂时性失效的风险,逻辑控制节点需要在开始数据写入过程确定各个存储节点的状态.类似于Paxos算法[4],本研究引入两阶段提交协议:
1)准备阶段:由于分布式存储系统经常会出现存储节点不可访问,逻辑控制节点需要在准备阶段获取存储节点的状态,保证存储节点有足够的空间可以写入来自逻辑控制节点的数据.
2)写入阶段:根据获取的存储节点的状态信息,逻辑控制节点选择当前读写负载较轻的存储节点写入编码后的分片数据.
这里使用一个示例来说明数据写入过程.假设纠删码存储系统包括1个逻辑控制节点和4个存储节点,图4展示了两阶段数据写入过程.
如图4,根据所有存储节点在准备阶段回复的信息,逻辑控制节点确定存储节点4暂时失效.在数据写入阶段,逻辑控制节点将编码后生成的分片数据写入到3个在线存储节点.
由于需要查询的存储节点数较多,为减少存储节点查询操作对数据写入性能的影响,数据写入操作将做如下优化:
1)写入的数据量需要大于一个阈值.由于逻辑控制操作需要消耗一定的查询时间来获取节点状态,小数据量写入请求往往会引起较大的时延.
2)多线程执行查询操作且保证时间完成查询操作.通过使用设定查询进程的超时时间,可以保证在给定的时间内完成准备阶段.
虽然纠删码需要足够的在线存储节点才能完成数据操作,在存储节点数量足够多的情况下,逻辑控制节点通常可以在给定的时间内找到足够的存储节点.在数据写入过程完成后,逻辑控制节点会将分片所在的存储节点位置记录在元数据库中,以备数据读取时定位分片所在的位置.
由于任意k个分片数据可以恢复出原始数据,纠删码存储系统可以通过并行化从n个候选的存储节点中下载任意k个分片,即可解码出原始用户存储的对象数据.本研究设计了数据并行读取机制来加速对象数据的过程.
图5展示了对象数据读取过程.逻辑控制节点并行化向所有的存储节点发出读取请求.当接收任意k个分片时,逻辑控制节点将终止其他节点的数据传输操作,恢复出原始用户数据并将其返回给用户端设备.
通过上述数据读写过程,逻辑控制节点可以将数据读取操作的负载较为均衡地分配到多个存储节点,从而保证从存储节点高效地读写数据.
用户端设备也需要将数据读写负载平均到各个逻辑控制节点.与此同时,当读写请求数据量较小,数据写入操作引起的查询时延也会影响数据读写操作的性能.下面将构建多切片数据编码传输方案和基于数据量的混合数据写入方案,以期提升用户端设备读写数据的性能.
为均衡数据写入过程中各个节点的负载,设计切片数据编码传输方案和基于数据量的混合数据写入方案来提升数据读写操作性能.
纠删码存储系统需要充分利用各个节点之间带宽,用户端设备应当让尽可能多的逻辑控制节点参与到数据读写操作以减少单个逻辑控制节点的负载.这里设计多切片数据编码传输方案来保证网络传输开销可以均衡地分配到各个存储节点.图6展示了多切片数据编码传输过程.
由图6可见,用户端设备将对象分成3个接片,并写入3个逻辑控制节点.在接收来自用户端设备的数据后,逻辑控制节点选择当前负载较轻的存储节点执行数据写入操作.由于逻辑存储节点使用两阶段提交算法,逻辑控制节点往往可以获取存储节点的准确状态信息,从而避免存储节点出现负载不均衡的情况降低数据写入操作的性能.
为兼顾不同数据量的数据写入需求,设计了基于数据量的混合数据写入方案,如图7.
由图7可见,基于数据量的混合数据写入方案使用副本存储机制和纠删码存储机制来分别完成小数据量写入操作和大数据量写入操作.具体说来, 该方案采用以下步骤完成数据写入操作:
首先,逻辑控制节点接收来自用户的数据写入请求后,根据应用存储需求加密原始对象,并根据加密后的对象内容生成访问标签值.对比元数据库,检查是否已存储该对象.如果存在,则直接将对象访问标签值返回给用户端设备.
其次,根据用户端设备写入数据量的大小,决定是否编码存储到多个存储节点.当数据量较小时,将存储数据直接保存到本地RAID磁盘阵列; 当数据量较大时,使用两阶段提交方案将编码后的分片数据写入多个存储节点.
最后,数据存储操作完成后,逻辑控制节点将已生成对象访问标签值返回给用户端设备.为验证负载均衡方案的有效性,设计原型纠删码键值存储系统测试数据读写操作的性能.
为验证负载均衡算法的有效性,使用原型纠删码键值存储系统来测试扩容方案的性能.
实验使用21个存储节点部署纠删码键值存储系统.其中,15台服务器作为存储节点,5台服务器作为候选逻辑控制节点,1台服务器作为用户端设备生成读写请求.使用纠删码存储系统中较为常用的CAONT-RS算法来加密和编码用户数据,参数为n=7, k=4.
实验主要测试数据读写操作的时延和吞吐率.时延主要统计数据读写操作消耗的时间.吞吐率计算单位时间处理数据读写操作的数据量.实验独立执行读写操作10次,并统计这些数据读写操作的时延和吞吐率,从而获取实验测试结果.
由于数据读写性能受到数据读写量和控制节点数据量的影响,实验分别在不同读写请求数据量的情况下测试数据读写操作的性能.实验将数据读写操作数据量分成两组:小数据量读写操作的数据量为1~128 kbyte,大数据量读写操作的数据量为1 Mbyte~1 Gbyte.这里将默认逻辑控制节点数量设置为3台,读写数据量设置为64 Mbyte.
图9展示了在数据量较小的情况下,纠删码存储系统数据读写操作的性能.由图9可见,随着读写数据量的增加,数据吞吐率将上升.由于用户端设备直接将数据上传至逻辑控制节点 ,数据读写操作的性能不会受到逻辑控制节点的编码和传输操作的影响.
图 10展示了在较大数据量时,纠删码存储系统数据读写操作的性能.由图 10可见,随着写入数据量的增加,数据写入操作的吞吐率变大.在用户需要读写的对象数据量小于32 Mbyte时,由于数据写入开始前需确定参与数据写入操作存储节点的位置,数据写入操作往往要消耗一定时间存储节点的状态.这也造成了在大规模分布式存储系统中数据写入操作的性能往往远低于数据读取操作的性能.
本文研究了纠删码键值存储系统中负载均衡算法,通过测试存储节点数据读写操作性能,分析不同数据量对数据读写操作性能的影响.为高效获取存储节点的状态,提出一种逻辑控制和存储资源分离的软件架构.为充分利用节点之间的网络带宽资源,提出多切片数据编码传输方案来保证数据写入过程中各个节点网络传输负载均衡.通过副本存储机制和纠删码存储机制来处理小数据量读写操作和大数据量读写操作,设计了基于数据量的数据写入方案来兼顾各种数据量写入操作的性能需求.在此基础上,实现了原型纠删码键值存储系统来部署所提出的负载均衡方案.为验证纠删码存储负载均衡方案的有效性,通过实验测试了各种数据写入量和逻辑控制节点数据量情况下数据读写操作性能.
虽然本研究提出的负载均衡方案可将数据读写操作的负载均匀地分配到各个存储节点,但所设计的纠删码键值存储系统尚未被大规模信息化应用和部署.未来将继续考虑如何部署到实际信息化存储应用场景(如网络日志数据),并存储海量数据.
深圳大学学报理工版
JOURNAL OF SHENZHEN UNIVERSITY SCIENCE AND ENGINEERING
(1984年创刊 双月刊)
主 管 深圳大学
主 办 深圳大学
编辑出版 深圳大学学报理工版编辑部
主 编 李清泉
国内发行 深圳市邮电局
国外发行 中国国际图书贸易集团有限公司(北京399信箱)
地 址 北京东黄城根北街16号
邮 编 100717
电 话 0755-26732266
0755-26538306
Email journal@szu.edu.cn
标准刊号 ISSN 1000-2618
CN 44-1401/N