内存云***
技术领域
本发明涉及计算机信息存储技术领域,具体涉及一种内存云***。
背景技术
近年来,云存储已经成为炙手可热的课题,各大互联网运营商竞相推出不同特性的云存储产品与服务。过去十几年云存储基本采用硬盘存储的方式,即用硬盘作为存储的媒介。由于硬盘容量提升很快(自1980年代中期以来提高了超过1000倍),这种存储方式在市场应用上取得了很好的效果。但是,虽然硬盘的容量提升很快,但相比之下该存储方式在性能上却难尽人意,传输速率仅提高50倍,延迟更是提高了2倍。如果按容量/带宽(JimGray’s Rule)来衡量,硬盘的访问延迟实际上急剧恶化了。与此同时,软件的架构随着互联网技术的不断发展也不断改变,常见的web应用架构一般使存储与计算分离,即由应用服务器(专门负责应用的业务逻辑、前端呈现的数据中心)、存储服务器组成。其中,应用服务器是无状态的,只存储当前浏览器请求的状态。这种分离和无状态的方式使***能够很好地扩展成成百上千台服务器,这种架构导致数据访问的延迟加剧。
综上所述,硬盘访问速度成为了目前计算机***发展的主要瓶颈。为了解决数据访问延迟问题,业界提出了一种新的存储思路RAMCloud(内存云),其基本思想是通过大规模普通服务器的内存集群,将在线数据的主要存储中心从硬盘迁移到DRAM上,而硬盘只用来备份/归档。这种存储方案可以同时具有大规模和低延迟的I/O特点。但当前业界关于内存云的研究较少,亟需设计一种内存云***设计方案。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题之一是:如何提高存储介质I/O读写速度,解决该存储过程高延迟的问题;进一步要解决的技术问题是:如何优化内存管理效率。
(二)技术方案
为了解决上述技术问题,本发明提供了一种内存云***,包括多个客户端1、一台内存云存储管理服务器4和多台内存云服务器5;所有这三种组成部分接入互联网2,内存云存储管理服务器4和多台内存云服务器5再通过本地以太网3互联;
所述内存云存储管理服务器4上安装有内存云存储管理模块7,用于接收客户端1的客户读写请求、建立对象表、设计内存分配方式,管理所有内存云服务器5的内存、数据备份与恢复;
所述内存云服务器5上安装有内存管理模块8和数据备份管理模块9;所述内存管理模块8用于处理客户端1的客户读写请求,完成本内存云服务器5的内存管理,建立内存表,记录内存的使用、删除信息,完成本内存云服务器5与内存云存储管理服务器4之间的通信;所述数据备份管理模块9用于完成内存数据到本地磁盘的备份,时刻保持本地内存数据与磁盘数据的一致,按需恢复内存数据;
所述客户端1上安装有内存云存储客户端6,用于发送客户读写请求,接收内存云存储管理服务器4和内存云服务器5的数据。
优选地,内存云服务器5为存储划分一块独立存储空间,该独立存储空间由两部分组成:信息区和数据区,信息区用于记录数据区的信息:块大小、数据区的位图信息;将数据区划分为大小相等的块,称为mslice,mslice的块大小记录在信息区的块大小中。
优选地,内存云存储管理模块7通过对一系列表的维护实现内存分配、内存管理和数据恢复,内存云存储管理模块7维护的表包括:内存云服务器管理表、对象存储映射表、内存云服务器状态监控表;
所述内存云服务器管理表汇总所有内存云服务器5的内存信息,它以单个内存云服务器5内存信息为单元,最终形成一张汇总表,每个单元由内存云服务器ID、同步标识及其信息区组成;从所述汇总表显示内存云服务器5的内存分配情况,当有内存云服务器5内存使用情况发生变化时,内存云存储管理模块7将该变化同步记录至内存云服务器管理表;
所述对象存储映射表记录客户端1对象及其对应的存储区;
所述内存云服务器状态监控表记录内存云服务器5的个数,所有内存云服务器5的当前连接状态和数据备份状态;
优选地,所述内存云存储管理模块7用于执行以下处理流程:
(1)初始化:扫描所有内存云服务器5,从每个内存云服务器5上获取内存信息区信息,建立所述内存云服务器管理表;
(2)建立所述内存云服务器状态监控表;
(3)定期维护所述内存云服务器状态监控表,若有变化则更新所述内存云服务器管理表;
(4)等待客户端1的请求;当接收到客户端1的读请求时,检索存储对象ID,根据存储对象ID查找对应的存储空间,若未找到对应的存储对象ID,则返回未找到消息,否则,将该存储对象的存储空间分配信息发送至客户端1;当接收到客户端1的写请求时,为存储对象分配ID,获取所需存储空间大小;
(5)读取所述内存云服务器管理表,进行一致性检查,如果不一致,则进行同步;
(6)根据内存云服务器管理表分配空间,将已分配的位图标识为预分配,建立对象存储映射表,将该对象存储映射表分别发送至客户端1与内存云服务器5;
(7)等待内存云服务器5发送结束消息,将对应的位图标志为分配,检查备份状态;
当客户端1请求删除对象时,首先将存储对象ID发送至相关内存云服务器5,当接收到内存云服务器5发出的删除成功消息时,清除内存云服务器管理表对应位图的标识,删除对象存储映射表对应的记录,并将结果反馈给客户端1,若接收到删除失败的消息,则将删除失败的消息反馈至客户端1。
优选地,所述内存管理模块8包括内存分配回收模块、内存优化模块和数据读写模块;
所述内存分配回收模块用于进行内存的分配与回收。内存分配参考内存云存储管理服务器4发送的对象存储映射表进行处理,当有数据需要存储时,根据所属对象的对象存储映射表将数据写入对应的mslice,并标识对应的位图,待数据写入内存区后,需将对象存储映射表中对应的位图标识为已分配;内存回收时,根据存储对象ID查找该存储对象所使用的mslice,删除内容并清空位图标识;将结果反馈至内存云存储管理服务器4;
内存优化模块用于通过合并零碎的存储空间,创建连续的空闲区来优化整个存储过程,内存优化只在空闲时进行,内存优化前,将原对象存储映射表进行备份,内存优化后,更新信息区位图标识,对象存储映射表,并同步内存云存储管理服务器4上的表格;
数据读写模块用于接收与发送客户端1的数据,当内存云服务器5接收到来自客户端1的数据时,根据对象存储映射表进行处理。
优选地,所述数据备份管理模块9用于将本地内存数据备份至本地磁盘,首先选择一块大于内存存储区的存储区,然后进行首次同步,当客户端1存储或删除数据时,由内存管理模块8进行内存区的数据读写,由数据备份管理模块9进行磁盘区的数据读写;当内存云服务器5进行内存优化后,同步磁盘备份数据。
优选地,所述内存优化模块具体用于执行以下流程:
(1)寻找空闲mslice,如果未找到,结束,否则转入步骤(2);
(2)找到空闲mslice,记为A,编号为p1,若A为最后一块mslice,流程结束,否则转入步骤(3);
(3)如果A为第一个mslice,或者其向前紧邻的mslice为空闲mslice,则继续向后寻找下一个空闲mslice,返回步骤(1),否则,记录A的编号,并获取其前向紧邻的mslice所属对象X,并转入步骤(4);
(4)以p1为起点,向后逐个寻找属于对象X的mslice,如果未找到,则继续向后寻找下一个空闲mslice,返回步骤(1),否则,找到属于对象X的mslice,记为B,编号为p2,将A与B交换存储位置;
(5)以p2为起点,向后寻找下一个空闲mslice,返回步骤(1)。
(三)有益效果
本发明将客户、内存云存储管理服务器、内存云服务器通过以太网互联,通过部署内存云管理模块,搭建了一个内存云***,通过合理的内存云管理设计提高了存储介质I/O读写速度,解决了该存储过程高延迟的问题。其中还设计了一种内存优化策略--连续读写策略,优化了内存管理效率。
附图说明
图1为本发明实施例的内存云***总体架构图;
图2为本发明实施例的内存云***内部架构图;
图3是本发明实施例的***中数据存储区示意图;
图4是本发明实施例的***内存优化后效果示意图。
其中:
1客户端 2互联网
3以太网 4内存云存储管理服务器
5内存云服务器 6内存云存储客户端
7内存云存储管理模块 8内存管理模块
9数据备份管理模块 10数据流
11控制流 12数据存储区
13所属不同对象的mslice 14空闲mslice
具体实施方式
为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
如图1所示,本发明实施例提供了一种内存云***,该***使用DRAM替代传统磁盘,由多个客户端1、一台内存云存储管理服务器4、多台内存云服务器5组成,所有这三种组成部分接入互联网2,同时,内存云存储管理服务器4和多台内存云服务器5再通过本地以太网3互联。
为了实现用户快速、低延迟的访问,体系结构如图2所示,包括:安装在内存云存储管理服务器4的内存云存储管理模块7,安装在内存云服务器5的内存管理模块8和数据备份管理模块9,以及内存云存储客户端6。
所述内存云存储管理模块7,用于接收客户端1的客户读写请求、建立对象表、设计内存分配方式,管理所有内存云服务器5的内存、数据备份与恢复;
所述内存管理模块8用于处理客户端1的客户读写请求,完成本内存云服务器5的内存管理:分配、回收、优化,建立内存表,记录内存的使用、删除信息,完成本内存云服务器5与内存云存储管理服务器4之间的通信;所述数据备份管理模块9用于完成内存数据到本地磁盘的备份,时刻保持本地内存数据与磁盘数据的一致,按需恢复内存数据;
所述内存云存储客户端6用于发送客户读写请求,接收内存云存储管理服务器4和内存云服务器5的数据。
为了方面管理,内存云服务器5将为存储划分一块较大的独立存储空间,该空间由两部分组成:信息区和数据区。信息区用于记录数据区的一些具体信息:块大小、数据区的位图信息、其它保留信息。对于数据区,***将数据区划分为大小相等的块,称为mslice,mslice的块大小记录在信息区的块大小中。
1、内存云存储管理模块7的设计
内存云存储管理模块7通过对一系列表的维护实现内存分配、内存管理、数据恢复等功能。内存云存储管理模块7维护的表包括:内存云服务器管理表、对象存储映射表、内存云服务器状态监控表。
所述内存云服务器管理表汇总所有内存云服务器5的内存信息,它以单个内存云服务器5内存信息为单元,最终形成一张汇总表,每个单元由内存云服务器ID、同步标识及其信息区组成。从该汇总表可以直接得到某个内存云服务器5的内存分配情况,当某个内存云服务器5内存使用情况发生变化时,需要将该变化同步记录至内存云服务器管理表。通过建立该内存云服务器管理表,当有云存储客户端1的写请求时,无需逐个访问内存云服务器5而直接在本地进行预分配。
本***的对象定义为客户端1的一个存储单元,可以是一个文件、一个分区、一个磁盘等。所述对象存储映射表记录了客户端1对象及其对应的存储区。
所述内存云服务器状态监控表记录了内存云服务器5的个数,所有内存云服务器5的当前连接状态、数据备份状态等。
内存云存储管理模块7的基本处理流程为:
(1)初始化,扫描所有内存云服务器5,从每个内存云服务器5上获取该服务器的内存信息区信息,建立所述内存云服务器管理表;
(2)建立所述内存云服务器状态监控表;
(3)定期维护所述内存云服务器状态监控表,若有变化则更新所述内存云服务器管理表;
(4)等待客户端1的请求;
(5)当接收到客户端1的读请求时,检索存储对象ID,根据存储对象ID查找对应的存储空间,若未找到对应的存储对象ID,则返回未找到消息,否则,将该存储对象的存储空间分配信息发送至客户端1;
(6)当有客户端1的写请求时,为存储对象分配ID,获取所需存储空间大小;
(7)读取所述内存云服务器管理表,进行一致性检查,如果不一致,则进行同步;
(8)根据内存云服务器管理表分配空间,将已分配的位图标识为预分配,建立对象存储映射表,将该对象存储映射表分别发送至客户端1与内存云服务器5端;
(9)等待内存云服务器5端发送结束消息,将对应的位图标志为分配。检查备份状态;
当客户端1请求删除对象时,首先将存储对象ID发送至相关内存云服务器5,当接收到内存云服务器5发出的删除成功消息时,清除内存云服务器管理表对应位图的标识,删除对象存储映射表对应的记录,并将结果反馈给客户端1。若接收到删除失败的消息,则直接将删除失败的消息反馈至客户端1。
内存云存储管理模块7还有数据恢复功能,包括本地数据恢复与内存云服务器数据恢复。
本地数据恢复通过所连接的内存云服务器5上的数据重建内存云服务器管理表、对象存储映射表、内存云服务器状态监控表。
内存云服务器5数据恢复过程:当某个内存云服务器5内存数据丢失或者被破坏时,将备份数据从本地磁盘恢复到内存。
2、内存管理模块8的设计
内存管理模块8由内存分配回收模块、内存优化模块、数据读写模块组成。
内存分配回收模块完成内存的分配与回收。内存分配参考内存云存储管理服务器4发送的对象存储映射表进行处理。当有数据需要存储时,根据所属对象的对象存储映射表将数据写入对应的mslice,并标识对应的位图。待数据写入内存区后,需将对象存储映射表中对应的位图标识为已分配。内存回收时,根据存储对象ID查找该存储对象所使用的mslice,删除内容并清空位图标识。将结果反馈至内存云存储管理服务器4。
内存优化模块通过合并零碎的存储空间,创建连续的空闲区来优化整个存储过程。如果使用普通的读写过程,内存优化与否对性能的影响不大,但是本***采用了连续读写策略,故而能提高***性能。连续读写策略是指当读写的mslice是连续的,一组连续的mslice称为msegment,***将计算该msegment的起止位置,使得多次读写操作通过一次读写来完成。为了不影响***读写性能,内存优化只能在空闲时进行。
内存优化是一个非常复杂的过程,优化算法的不同其效率也不同。为了找到一个合适的算法,首先需分析本***数据存储的特点,图3是能表示本***数据存储特点的简单示例,数据存储区12包括存储三种不同对象的mslice 13和空闲mslice 14,从图3可以很直观得到,本存储***存储的数据具有以下特点:
(1)同一对象的数据是按顺序存储的;
(2)空闲区只存在不同对象的msegment之间。
本算法的目标是合并空闲mslice,同时尽可能保证同一对象集中存储,从而提高数据读写效率。为了实现上述目标,本***的算法如下:
(1)寻找空闲mslice,如果未找到,结束,否则,转入(2);
(2)找到空闲mslice,记为A,编号为p1,如果A为最后一块mslice,流程结束,否则,转入(3);
(3)如果A为第一块mslice,或者其向前紧邻的mslice为空闲mslice,则继续向后寻找下一个空闲mslice,转入(1),否则,记录A的编号并获取其前向紧邻的mslice所属对象X;
(4)以p1为起点,向后逐个寻找属于对象X的mslice,如果未找到,则继续向后寻找下个空闲mslice,转入(1),否则,找到属于对象X的mslice,记录B,编号为p2,A与B交换存储位置;
(5)以p2为起点,向后寻找下一个空闲mslice,转入(1)。
上述步骤通过一系列交换mslice实现同一对象mslice以及空闲mslice的连续存储。
以图3为例,按照上述算法,其数据交换过程为(其中mslice[i]表示算法开始前其编号为i的mslice):
(1)寻找当前第1块空闲mslice:mslice[4],记住向前紧邻mslice:mslice[3],其所属对象为A,故需寻找对象A的下一个mslice:mslice[8],找到后置换mslice[4]与mslice[8];
(2)继续向下寻找空闲mslcie:mslice[5],其向前紧邻mslice为mslice[8],故向后寻找到mslice[20],置换mslice[5]与mslice[20];
(3)重复步骤(1),找到mslice[4],此时,通过置换,mslice[4]位于编号为8的位置,找到向前紧邻mslice:mslice[7],其所属对象为B,向后寻找属于对象B的mslice:mslice[9],置换mslice[4]与mslice[9];
(4)按照上述算法,依次置换mslice[4]与mslice[10],置换mslice[4]与mslice[11],置换mslice[4]与mslcie[18],置换后,mslice[4]位于编号为18位置;
(5)继续寻找下一个空闲mslice:mslice[12],其向前紧邻mslice为mslice[11],其所属对象为B,向后寻找所属对象为B的mslice:mslice[19],置换mslice[12]与mslice[19];
(6)继续寻找下一个空闲mslice:mslice[17],其向前紧邻mslice为mslice[16],其所属对象为C,向后寻找所属对象为C的mslice:mslice[22],置换mslice[17]与mslice[22],依据该流程,此时已没有需要置换的mslice,流程结束,置换后的存储区如图4所示。
通过上述步骤,所有空白mslice都合并,并且,同一对象的数据也基本实现了集中存储。
内存优化前,需将原对象存储映射表进行备份。内存优化后,需更新信息区位图标识,对象存储映射表,并及时同步内存云存储管理服务器上的表格。
数据读写模块负责客户端数据的接收与发送。当内存云服务器5接收到来自客户端1的数据时,根据对象存储映射表进行处理。
4、数据备份管理模块9的设计
数据备份管理模块9负责将本地内存数据备份至本地磁盘。***首先选择一块大于内存存储区的存储区,然后进行首次同步,该过程主要是同步内存区信息区的数据。当客户端1存储或删除数据时,由内存管理模块8负责内存区的数据读写,由数据备份管理模块9负责磁盘区的数据读写。数据备份过程类似于内存管理模块8的数据读写过程,只是性能相对较低。当内存云服务器5进行内存优化后,需及时同步磁盘备份数据,具体方法是根据更新的对象存储映射表与原对象存储映射表进行比对,将数据调整为更新的对象存储映射表记录的顺序。
5、内存云存储客户端6的设计
内存云存储客户端6给用户提供可视化的操作界面,同时下发客户的使用需求。
通过以上模块的相互协作,基本实现了内存云***功能要求。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。