一种基于云芯一号的OPenStack块存储加速方案
2019-02-07王界兵王文利董迪马
王界兵 王文利 董迪马
摘要:为了改善传统OpenStack平台在非对象存储上存储效率低下、存储方式单一等缺点,基于自主研发的云芯一号(cloud Core V1.0),在多节点分布式OpenStack云平台上研发基于云芯一号的块存储加速体系结构,并进行试验部署。研究结果表明,基于云芯一号的块存储加速方案,增加了OpenStack块存储的存储对象种类;在块存储前进行文件硬件压缩处理,极大提升了块存储的存储速度和安全可靠性;基于云芯一号的Open-Stack块存储加速方案不仅能快速有效地对非对象存储资源进行安全有效存储,而且为存储前的节点调度和资源监控夯实了基础。
关键词:OpenStack;块存储;云芯一号;硬件压缩
DOI:10.11907/rjd k.191258
中图分类号:TP301 文献标识码:A 文章编号:1672-7800(2019)012-0089-04
0引言
随着大数据、互联网云时代的来临,云平台规模不断扩大,处理的数据量也日益增多,各类应用和数据的处理时间更长,导致云存储对硬件设备和存储数据的预压缩要求也越来越高。现场可编程逻辑门阵列(FPGA)可以基于硬件资源实现数据的压缩和解压,处理速度也是传统压缩软件的数倍。
目前,业内主流的软件类无损压缩算法有算术编码、霍夫曼编码和字典式的Lz系列编码等。基于统计学模型开发的算术编码压缩比最高,但其基于现有硬件实现解压缩的方式却很复杂。与以上两种压缩方法不同,基于字典式的LZ系列算法的压缩和解压缩过程并不对称,解压缩过程比压缩过程简单很多,易于硬件实现,且该算法的实现不依赖特定FPGA结构。已有研究几乎都是基于字典式的Lz系列算法。文献[5]根据Xilinx公司Virtex系列器件的特定结构,采用改进的LZSS算法,取得的压缩比为4;文献[6]改进了经典LZW算法,取得了较好效果,但没有仔细考虑这种改进给硬件解压缩带来的难度;文献[7]用到的压缩算法利用了Xilinx公司XC6200器件的特殊结构,取得的压缩比为7,在几种算法中最高,但只适用于XC6200一种器件。另外,在主流FPGA厂商Xilinx公司的商业软件里也实现了一种基于LZ77的算法,用来压缩其配置文件。
针对已有研究的各种缺陷,本文首先研发一种拥有自主产权的FPGA加速芯片——云芯一号(cloud CoreVI.0),然后基于此芯片,结合OpenStack开源云平台,提出一种数据预压缩块存储加速方案。对文件在进入OpenStack进行块压缩前完成文件数据预压缩处理,有效提高了OpenStack中存储节点的存储效率,同时也为将来文件的分布式存储调度研究打下了坚实基础。通过实验对比,验证了基于云芯一号对各类文件处理的高效性以及基于该芯片提出的云平台块存储加速机制的实时性和高效性。
1云芯一号
云芯一号(cloud-Core VI.O)是一张拥有自主知识产权的硬件加速卡,其外观如图1所示。
云芯一号可以使用任何可用的12V PCIe插槽对芯片进行供电。硬件环境上,云芯一号支持8路双工收发器,可插入x8或更大的PCIe 3.0插槽。另外,服务器上所有能与云芯一号进行通信的硬件设备均通过PCIe接口进行。
在软件架构方面,云芯一号主要由5个部分组成,包括:服务助理基础设施(sAI)、API层、Frontsurf服务框架(FsF)、设备专用驱动程序(DSD)、软件库。具体软件架构如图2所示。
SAI模块主要为其它模块提供基础服务,主要由OS抽象层(0SAL)、日志和文件解析器3个组件组成。对于API层,云芯一号提供Raw加速(原始)API对用户的各类应用程序进行连接。Raw Acceleration API可以利用Cloud-Core VI.O上的所有功能,包括文件压缩、文件加密、身份认证、RNG和PK等各项操作。Frontsurf ServiceFramework(FsF)模块的功能是为云芯一号的API层提供算法加速。在Cloud-Core VI.O中,所有与芯片组无关的代码都位于Frontsurf服务框架中。与之相反,所有与芯片组相关的代码位于设备专用驱动程序中。另外,Frontsuff服务框架(FsF)模块还管理所有使用设备特定驱动程序注册的会话、密钥和设备,从而使得云芯一号可以实现硬件加速和软件库操作。具体流程为:FSF从API层检索操作请求,然后将这些操作转换为硬件命令并同时提交硬件命令给相应硬件,接下来检索完成的命令,并将完成的操作反馈信息返回给API层。此外,FSF还管理云芯一号整个芯片的负载平衡、会话上下文和密钥池。如果部署云芯一号的硬件不可用于数据操作,则FSF与软件库一起工作以提供软件上的各种支持,例如文件软压缩、软件认证、文件软加密和PK,以完成相关软件操作,最大程度保证服务的正常运行。
设备专用驱动程序(DSD)是一个与芯片组相关的功能模块,其主要功能是为Frontsuff服务框架(FsF)提供统一的硬件接口,并且将每个设备的特定结构格式转换为与FSF相同的统一结构。而软件库则执行软件中的压缩、认证、加密和公钥操作等,如果云芯一号芯片发生硬件错误或处于正在从错误中恢复的状态,或者在系统中没有可操作的Frontsurf设备,则软件库将作为设备特定的驱动程序實现相关请求操作,以模拟硬件完成用户请求。云芯一号中的软件库类似一个容灾模块,为硬件设备和运行软件部署的运行环境提供最大限度的服务保障。
2openStack上的块存储机制——Cinder
操作系统获得存储空间的方式一般有两种:①通过某种协议(sAS、SCSI、SAN、iSCSI等)直接挂接硬件存储资源(裸硬盘),然后对Mount上的硬盘进行分区和格式化,最后创建文件系统,或者直接使用裸硬盘对数据进行存储(例如大多数数据库);②通过NFS、CIFS等协议,挂载远程的文件系统到本地进行数据存储。第一方式也称为BlockStorage(块存储),每个硬件资源硬盘(即裸硬盘)通常被称为Volume(卷);第二种叫作文件系统存储。NAS和NFS服务器以及各种分布式文件系统提供的都是这类存储机制。
在开源云平台openstack中,提供Block storageService的是组件Cinder,其具体功能包括:①提供对vol-ume从创建到删除整个生命周期的管理;②提供原生的REST API给用户,使其可以在平台上对已有的Volume、Volume Snapchat和Volume Type进行查询和管理;③提供Cinder Scheduler调度Volume创建请求,合理优化存储资源分配;④通过Cinder Driver架构支持多种Back-end(后端)的存储方式,包括LVM、NFS、CEPH和其它诸如EMC、IBM等商业存储商品和方案,其具体架构如图3所示。
Cinder主要包含:①Cinder-api负责接收OpenStack的API请求,然后调用Cinder-volume执行操作;②Cin-der-volume负责管理Colume的各类服务,并与ColumeProvider协调工作以管理Colume资源的生命周期,在OpenStack平台中运行Cinder-volume服务的节点被通常称作为存储节点(storage Node);③Cinder-scheduler的主要功能是通过调度算法(可以选择OpenStack自带的默认调度机制或者自己编写适合的调度算法)选择最合适的存储节点创建Colume;④Colume Provider则是存储数据的存储设备,为Colume的存储提供空间。OpenStack中的Cin-der组件支持多种Colume Provider,每种Colume Provider都可以通过Driver与Cinder-volume协调工作。
在开源OpenStack平台中,各节点之间的通信主要通过Message Queue解决。Cinder中的各子服务通过Mes-sage Queue实现进程间的通信和相互协作。有了消息队列,子服务之间才实现了解耦,这种松散的结构也是分布式系统的重要特征。另外,在Cinder组件中,一些配置数据和资源元数据需要存放到数据库中,一般使用MySQL。而通常情况下,数据库安装在控制节点(control Node)上。
3基于云芯一号的块存储加速方案
分析开源云平台OpenStack中Cinder组件的价格和功能可知,在OpenStack平台中,对于非对象存储数据主要提供存储空间及其管理和优化,而对数据本身进入存储空间前并没有过多处理和要求。这样容易造成在数据存储过程中过于被动,以及在硬件架构上对原生数据没有任何优化从而导致存储资源使用率过低。鉴于此,本文提出一种基于自主产权的云芯一号芯片的块存储加速方案,利用芯片对存储前的数据进行预存储,从而达到存储时间缩短、存储效率提升、存储资源利用率大幅度提高的目的。块存储加速方案具体架构如图4所示。
该架构主要有3类节点:控制节点、计算节点和块存储节点。3类节点由1台交换机通过各自的ethO网卡连接在一起。此外,计算节点和块存储节点也通过各自的ethl连接在另外一个网络上(0penStack中通常所说的内网)。
在该架构中,控制器节点主要负责资源管理和调度等任务,此外还包括身份服务、映像服务、网络管理及各种网络虚拟功能和仪表板(Horizon)等服务。控制节点还支持SQL数据库、消息队列和NTP等消息通信等服务。如果仅用测试,可以将计算节点和存储节点上的相关服务都部署在控制节点中,形成单节点的OpenStack架构进行相关功能测试。与之相对应的计算节点则主要运行与VM资源相关的Compute服务,用于部署操作实例的运行环境和相关功能。默认情况下,Compute Node使用KVM的Hy-pervisor。另外,計算节点还运行网络服务代理,将实例连接到虚拟网络,并通过安全组为实例提供防火墙服务等安全服务。
该架构中,在存储节点上加入了自主研发的云芯一号加速芯片,块存储数据通过节点调度来到块存储节点实现存储。与传统无预先处理不同的是,在块存储加速架构中,数据需要先进行硬件加速处理,极大降低自身数据大小和存储所需空间。另外,云芯一号独特的软硬件加速特性,也使得数据在加速过程中如遇到硬件资源的非工作情景,也可通过软件库中的驱动程序实现相关请求操作,以模拟硬件完成用户请求,从而达到软硬件加速双重保险的低风险数据压缩机制。
4实验测试
完成基于云芯一号在开源云平台OpenStack上部署的块存储加速方案后,通过实验对提出的方案进行测试:①文件压缩解压速度对比实验;②该方案与传统块存储数据存储速度对比实验。集群中的各类节点硬件环境均为:CPU:Intel(R)Core(TM)i5-4590CPU@3.30GHz;MEM:DDR3-1333MHz 64GB。
4.1压缩解压速度测试
纯压缩测试是为了对比传统基于CPU的各类HDFS软压缩特性和基于云芯一号芯片的硬件压缩能力。为此测试了一组随机大小(从最小数据大小7.27MB到最大数据大小100MB),总共88132MB数据集的压缩速度。结果显示云芯一号芯片文件压缩的进程压缩速度在1508.7MB/s(>1500MB/s)左右。同时,将该数据集在传统HDFS上的各类软压缩软件(GZIP、BZIP2、LAOBEST、LZO)上进行了相同实验,得到压缩性能对比如表1所示。
由数据对比可以看出,在处理同样大小的原始文件时,云芯一号芯片对文件的压缩大小最小,压缩和解压速度比其它软件压缩算法平均高近10倍。同时也发现,其它软件算法在文件压缩大小、压缩速度、解压速度3方面都会出现某一指标表现不尽如人意的情况,而云芯一号芯片却没有这种问题,较其它软件算法,其3个性能参数指标均最优。
4.2存储速度对比测试
完成云芯一号芯片的纯压缩解压测试后,对块存储加速方案和传统块存储加速方案的存储效率进行对比。采用4组不同大小的数据集,分别为1G、10G、20G、50G,每组分别测试3次,取平均值,测试结果如图5所示。
可以看出,不同大小的数据集存储速度上,存储前通过云芯一号芯片进行加速后均体现出明显高的存储效率,随着数据集的增大,存储时间的差异性越来越大。可以预见,面对大额存储数据时,云芯一号芯片的加入会极大缩短数据存储到Block Storage Node中的时间,为后期数据挖掘、分析等节约大量时间。
为了更直观地体现压缩速度对比,将测试的随机大小文件集群的压缩速度进行了同一坐标对比,如图6所示。可以直观地看出,基于硬件加速的云芯一号芯片的压缩速度平均在l 500MB/s左右,而其它软件压缩文件速度平均在50MB/s以内。
5结语
本文着重研究传统OpenStack云平台中块存储的存储效率和性能,再从存储空间、存储调度上进行优化,并从数据处理平台架构和硬件环境加以探索和创新。本文提出基于云芯一号硬件加速卡的块存储加速方案,在传统的OpenStack Block Storage Node上进行硬件扩充和优化,对存储数据进入节点前进行压缩预处理。通过不同环境下的实验结果对比可知,无论是纯文件压缩还是与传统OpenStack平台Block Storage Node中数据的存储速度进行对比,本文提出的加速方案均远优于传统块存储方式。