一种基于热度感知的内存纠删码分布方法与流程

文档序号:14518924阅读:240来源:国知局
一种基于热度感知的内存纠删码分布方法与流程

本发明属于计算机存储技术领域,更具体地,涉及一种基于热度感知的内存纠删码分布方法。



背景技术:

数据量暴增的信息时代,内存存储已经成为许多数据密集型应用程序的关键组件,如oltp和olap。内存容量和带宽每三年大约翻一倍,而其价格每五年降低十倍,从而,越来越多商业应用,能负担得起dram产品的开销,内存存储系统已逐步尝试将主要数据存放于内存中,用来支持可伸缩和低延迟的数据访问。

由于dram的易失性,内存存储系统在断电和系统崩溃的情况下,会引起内存数据的临时性丢失。针对此现象,通常采用冗余策略来提高内存数据的可用性。现有冗余解决方案主要包括副本和纠删码两类。副本方式既可以保证数据冗余,也能够在一定程度上可以提高访问并行性性能,但副本方式具有空间开销大的缺点,例如,三副本方式会占用数据三倍的内存空间。相较于副本,纠删码方式可以以更少内存空间来达到同等水平的容错。然而,纠删码在数据更新和故障恢复方面会带来较高的带宽开销,同时访问并行性较差。通过冗余编码计算后的数据分块组分布,可以通过随机选择节点分发,或者根据系统当前各节点的负载选择负载较低的节点分发等手段,但是整体是静态分布,即存储在节点中的数据分块以后不会在移动。

现有的内存纠删码分布方法主要存在以下问题,内存利用率和访问并发性作为衡量内存存储冗余方案的重要指标,二者不可同时兼顾;磁盘文件和内存数据的访问频次存在严重倾斜,并且数据分块的访问频次随着时间变化将引起节点负载的变化,由于访问倾斜的存在,导致节点负载不均衡,造成硬件资源的浪费以及访问性能退化和吞吐量降低。



技术实现要素:

针对现有技术的以上缺陷或改进需求,本发明提供了一种基于热度感知的内存纠删码分布方法,其目的在于对内存中的数据分块进行热度等级的划分,访问频次越高的数据分块热度等级越高;其次,对热度等级由低变高的数据分块进行副本备份,提高访问的并行性;之后,针对热度等级由高变低的数据分块进行副本删除或者替换,节约内存空间,提高利用率,同时兼顾内存利用率和访问并发性,达到平衡,并解决随着时间变化磁盘文件和内存数据的访问频次严重倾斜所导致的节点负载不均衡问题。

为实现上述目的,本发明提供了一种基于热度感知的内存纠删码分布方法,所述方法采用纠删码数据冗余技术存储内存中的数据;同时对内存中的数据分块按访问热度进行动态划分,具体分为3个等级:0、1和2,热度等级更新为2的数据分块采用副本数据冗余技术,热度等级更新为1的数据分块采用纠删码数据冗余技术,热度等级更新为0的数据分块从内存中替换出去。

进一步地,所述热度等级更新为2的数据分块采用副本数据冗余技术具体为:当数据分块的热度等级由1升为2时,选择负载最低的节点增加该数据分块的副本数据分块。

进一步地,所述热度等级更新为1的数据分块采用纠删码数据冗余技术具体为:当数据分块的热度等级由2降为1时,选择负载最重的节点删除该数据分块的副本数据分块。

进一步地,所述热度等级更新为0的数据分块从内存中替换出去具体为:当数据分块的热度等级由1或2降为0时,将该数据分块替换出内存,替换进内存的新数据分块从负载最重的节点中选取。

进一步地,所述新数据分块的热度等级为1。

进一步地,所述数据分块的热度等级由2降为0时,删除该数据分块的所有副本数据分块。

进一步地,所述方法具体包括以下步骤:

(1)设置一个时间阈值tw以及计时器t;

(2)接收用户请求,处理请求指令;

(3)判断计时器t是否已经达到tw,若是,则转入步骤(4),否则转入步骤(7);

(4)根据时间阈值内请求指令串的访问,更新内存里每一个数据分块的访问热度等级,然后更新系统内每一个参与的节点服务器的负载;

(5)根据访问热度和节点负载,对冗余组中数据分块进行三类调整,包括增加副本,删除副本和数据分块替换;

(6)重置计时器t=0;

(7)判断请求访问的数据分块是否已经在内存中或者存放在新数据分块的队列中,若是,则转入步骤(8),否则转入步骤(9);

(8)更新请求访问的数据分块的访问频率,从内存中获取请求访问的数据分块的副本,将目标数据分块传送给代理服务器,之后转入步骤(10);

(9)从磁盘上读取目标数据分块传送给代理服务器,将数据分块插入存放新数据分块的队列中,之后转入步骤(10);

(10)判断请求指令是否已经处理完毕,若是,则流程结束,否则转入步骤(2)。

进一步地,所述步骤(5)具体包括以下子步骤:

(51)判断是否数据分块的热度等级由2更新为1,若是,则转入步骤(52),否则转入步骤(53);

(52)确定系统中存储该数据分块的节点,添加到listsrc列表中,从listsrc中选择负载最重的节点sn,从当前数据数据分块组移除sn中的数据分块,然后转入步骤(510);

(53)判断是否数据分块的热度等级由1更新为2,若是,则转入步骤(54),否则转入步骤(55);

(54)确定系统中除当前数据分块组节点之外的目标节点,添加到listtgt列表中,从listtgt中选择负载最轻的节点sn,传送该数据分块的副本给节点sn,之后转入步骤(510);

(55)判断是否数据分块的热度等级更新为0并且旧数据分块属于内存中将要被替代的数据分块集合setold,若是则转入步骤(56),否则转入步骤(510);

(56)setnew为将要取代旧数据分块的候选新数据分块集合,确定系统中存储setnew中数据分块的节点,添加到listpdr列表中,确定系统中目标节点,添加到listtgt中,从listtgt中选择负载最轻的节点sntgt,若sntgt属于listpdr,则转入步骤(57),否则转入步骤(58);

(57)提供数据分块的节点snpdr=sntgt,之后转入步骤(59);

(58)从listpdrl选择负载最重的节点作为snpdr;

(59)从snpdr移动新数据分块到sntgt,更新组中的冗余数据,新数据分块热度等级初始为1,移除所有旧数据分块的副本;

(510)判断数据分块组中所有数据分块是否处理完毕,是则转入步骤(511);否则返回步骤(51);

(511)更新数据分块组的数据分块列表,更新新数据分块及其副本元数据的时间戳信息。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下技术特征及有益效果:

(1)据数据分块的访问频率定义热度等级,通过热度感知来调整源数据的分布和冗余策略,包括纠删码编码以及副本个数,即提高内存利用率,又保证高热度数据的并发访问性能,达到在当前数据存储访问状况下,存储利用率与访问并行性之间平衡;

(2)在选择目标节点时,根据节点负载,往负载较低的节点中添加数据,从负载较高的节点中删除数据,同时根据热度等级变化,在内存与磁盘之间进行数据交换,实现良好负载均衡同时,防止随着时间变化出现磁盘文件和内存数据的访问频次严重倾斜问题,提高整体存储性能。

附图说明

图1是本发明内存纠删码分布方法的流程图;

图2是本发明方法中数据分块移动的流程图;

图3是本发明方法中一个数据分块组的实例图;

图4是本发明方法中不同情况下数据分块移动的实例图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

以下首先就本发明的相关术语进行解释和说明:

纠删码分布:副本冗余方式,存储利用率低,用纠删码代替副本作为冗余策略,而副本用来提高并发访问性能,根据各节点负载,确定编码后的数据分块存储的节点,随着时间变化,进行副本数据分块增加或移除以及数据分块在内存与磁盘之间的转移,称是纠删码分布。

热度等级:统计一段时间窗口内数据分块的访问频次,然后依据访问频次高低将数据分块划分为热度等级2,热度等级1,热度等级0三个集合,数据分块初始化热度等级都为1。

数据分块组:为了支持条带化以及副本机制,我们将原始数据分块以及冗余数据分块构成数据分块组,并且我们为了定位同一各数据分块组中的数据分块,提出数据分块id由数据组id以及组内偏移pos组成。

目标节点:当出现副本数据分块增加或者减少以及新数据分块替代旧数据分块的情况时,需要选择用于执行的数据分块,这些数据分块所在的节点称为目标节点。

供给节点:当数据分块热度等级降为0,需要选择新数据分块替代,内存队列中存储即将取代旧数据分块的节点,称为供给节点,通常选择其中负载最重的节点作为当前新数据分块的供给节点。

本发明提供了一种基于热度感知的内存纠删码分布方法,为了方便说明,本实施例按照数据分块访问频率由低到高划分为3个热度等级:pl-0、pl-1和pl-2。对于pl-2和pl-1热度等级数据分块分别采取容错为2和1的冗余策略,pl-0数据分块即将被回收或替代,所以不采用冗余策略。本实施例采用的是rs(k+r,k)编码以及副本冗余策略,rs(k+r,k)的条带由k个源数据分块和r个校验数据分块构成,k个源数据分块记为{d1,d2,…,dk},r个校验分块记为{p1,p2,…,pr},副本数据分块采用源数据分块的名称标记。

本实施例采用纠删码rs(4,3)编码,同时采用副本作为冗余手段并提高并发访问性能,如图3所示,原始数据通过rs编码为d1,d2,d3三个源数据分块以及p1冗余数据分块,d1,d2热度等级为1所以实现容错1即可,d3热度等级为2,所以再通过副本方式实现容错2,名称为d3的数据分块为副本,并且满足其访问频率高带来的并发访问性能需求。

如图1所示,本发明提供了一种热度感知的纠删码分布方法,具体包括如下步骤:

(1)设置一个时间阈值tw以及计时器t;

(2)接收用户请求,处理请求指令;

(3)判断计时器t是否已经达到tw,如果是,则转入步骤(4),否则转入步骤(7);

(4)根据阈值内请求指令串的访问,更新内存里每一个数据分块的访问热度等级,然后更新系统内每一个参与的节点服务器的负载;

(5)根据访问热度和节点负载,对冗余组中数据分块进行三类调整,包括增加副本,删除副本,数据分块替换,如图2所示,本步骤具体包含以下子步骤。

(5-1)判断是否旧数据分块热度等级opl为2并且新数据分块热度等级npl为1,如果是,则转入步骤(5-2),否则转入步骤(5-3);

(5-2)确定系统中存储该数据分块的节点,添加到listsrc列表中,从listsrc中选择负载最重的节点sn,从当前数据数据分块组移除sn中的数据分块,然后转入步骤(5-10);

(5-3)判断是否旧数据分块热度等级opl为1并且新数据分块热度等级npl为2,如果是,则转入步骤(5-4),否则转入步骤(5-5);

(5-4)确定系统中除当前数据分块组节点之外的目标节点,添加到listtgt列表中,从listtgt中选择负载最轻的节点sn,传送该数据分块的副本给节点sn,然后转入步骤(5-10);

(5-5)判断是否新数据分块热度等级npl为0并且数据分块属于内存中将要被替代的数据分块集合setold,如果是,则转入步骤(5-6),否则转入步骤(5-10);

(5-6)setnew为将要取代旧数据分块的候选新数据分块集合,确定系统中存储setnew中数据分块的供给节点,添加到listpdr列表中,确定系统中目标节点,添加到listtgt中,从listtgt中选择负载最轻的节点sntgt,如果sntgt属于listpdr,则转入步骤(5-7),否则转入步骤(5-8);

(5-7)提供数据分块的节点snpdr=sntgt,然后转入步骤(5-9);

(5-8)从listpdr选择负载最重的节点作为snpdr;

(5-9)从snpdr移动新数据分块到sntgt,更新组中的冗余数据,新数据分块热度等级初始为1,移除所有旧数据分块及其副本;

(5-10)重复步骤(5-1)到步骤(5-9),直到数据分块组中所有数据分块处理完毕,则转入步骤(5-11);

(5-11)更新数据分块组的数据分块列表,更新新数据分块及其副本元数据的时间戳信息。

(6)重置计时器t=0;

(7)判断请求访问的数据分块是否已经在内存中或者存放在新数据分块的队列中,如果是,则转入步骤(8),否则转入步骤(9);

(8)更新请求访问的数据分块的访问频率。从内存中获取请求访问的数据分块的副本,将目标数据分块传送给代理服务器。然后转入步骤(10);

(9)从磁盘上读取目标数据分块传送给代理服务器,将数据分块插入存放新数据分块的队列中。然后转入步骤(10);

(10)判断是否请求串已经处理完毕,如果是,则流程结束,否则转入步骤(2);

如图4所示,包含了每一种热度等级变化之后数据分块组相应的变化,包括热度等级从pl2降为pl1,热度等级从pl1升为pl2,热度等级从pl2或者pl1降为pl0的情况。

(5-1)判断是否旧数据分块热度等级opl为2并且新数据分块热度等级npl为1,如果是,则转入步骤(5-2),否则转入步骤(5-3);

(5-2)如图4中c步所示,一段时间窗口后,数据分块d3的热度等级由2变为1,那么,存放有副本数据分块且负载较大的节点上的副本数据将被删除首先确定系统中存储该数据分块的节点,添加到listsrc列表中,从listsrc中选择负载最重的节点sn,从当前数据数据分块组移除sn中的数据分块,d3副本被移除,然后转入步骤(5-10);

(5-3)判断是否旧数据分块热度等级opl为1并且新数据分块热度等级npl为2,如果是,则转入步骤(5-4),否则转入步骤(5-5);

(5-4)如图4中b步所示,一段时间窗口后,数据分块d3的热度等级由1变为2,需要增加数据分块的副本个数,首先确定系统中除当前数据分块组节点之外的目标节点,添加到listtgt列表中,从listtgt中选择负载最轻的节点sn,传送该数据分块d3的副本给节点sn,然后转入步骤(5-10);

(5-5)判断是否新数据分块热度等级npl为0并且数据分块属于内存中将要被替代的数据分块集合setold,如果是,则转入步骤(5-6),否则转入步骤(5-10);

(5-6)如图4中d和e步所示,数据分块d3热度等级由2变为1和0,在队列中将要替代setold中数据分块的候选数据分块集合setnew,确定系统中存储setnew中数据分块的供给节点,添加到listpdr列表中,确定系统中目标节点,添加到listtgt中,从listtgt中选择负载最轻的节点sntgt,如果sntgt属于listpdr,则转入步骤(5-7),否则转入步骤(5-8);

(5-7)提供数据分块的节点snpdr=sntgt,然后转入步骤(5-9);

(5-8)从listpdr选择负载最重的节点作为snpdr;

(5-9)从snpdr移动新数据分块d3’到sntgt,更新组中的冗余数据p1’,新数据分块d3’热度等级初始为1,移除所有旧数据分块d3及其副本;

(5-10)重复步骤(5-1)到步骤(5-9),直到数据分块组中所有数据分块处理完毕,则转入步骤(5-11);

(5-11)更新数据分块组的数据分块列表,更新新数据分块及其副本元数据的时间戳信息。

以上内容本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1