基于可编程数据平面的键值分布式均衡存储方法

文档序号:31780401发布日期:2022-10-12 09:58阅读:34来源:国知局
基于可编程数据平面的键值分布式均衡存储方法

1.本发明涉及计算机网络技术领域,特别是一种基于可编程数据平面的键值分布式均衡存储方法。


背景技术:

2.类似于web服务,搜索引擎等每天要处理几千万个请求,对延迟和吞吐量的要求很高。这些应用通常由分布式键值存储支持。分布式键值存储将键值对象划分到多个存储服务器中,以实现可伸缩性和负载分布。在理想情况下,一个由吞吐量高达t的n个节点组成的集群可以满足n*t的吞吐量要求。
3.然而,在真实世界的键值存储工作负载中,流行度分布遵循幂律分布,导致访问频率不均衡。对于那些包含流行对象的节点,它们的负载自然很高,因此,这些存储系统通常表现出高度不对称的访问模式。系统由于一些节点的性能过载而陷入瓶颈,而另一些节点没有被充分利用,未能完成达到预期的吞吐量。过载的节点不能及时处理客户端请求,因此未完成请求的队列变得很长。系统将具有高的尾部延迟,这违背了服务质量的要求。传统的一致性hash算法不能很好地处理此类情况。


技术实现要素:

4.有鉴于此,本发明的目的在于提供一种基于可编程数据平面的键值分布式均衡存储方法,能够在工作负载倾斜下,使得存储节点间的负载达到平衡。
5.为实现上述目的,本发明采用如下技术方案:一种基于可编程数据平面的键值分布式均衡存储方法,具体包括以下步骤:
6.在键值客户端向分布式键值存储提交请求后,p4交换机在数据平面上解析数据包中的键信息,并将键信息输入到键访问频率统计模块;
7.p4数据平面根据键的访问频率信息,依据配置的键访问频率阈值t,访问频率高于t的键及其频率信息上报给控制端;
8.控制端检测来自数据平面的热键上报信息,依据其统计到的频率数,计算所需副本存储节点个数,并向数据平面下发该热键以及复制因子到数据平面的热键匹配动作表中;
9.在客户端的键请求数据包中的键字段k命中数据平面的热键匹配动作表时,判别该键的操作类型,如果是读操作,则数据平面根据复制因子,通过节点计算函数计算出目的节点a,之后进行节点a对键k的存在性判断,若为真,则转发给a节点处理;否则转发给该键的主节点,之后在主节点向数据平面回复该请求的数据包时,数据平面克隆一份数据包给a节点,a节点存储该键值,并在数据平面标注a节点存在此热键;如果是写则转发给主节点;
10.对于不在热键匹配动作表中的键请求,则都转发到该键的主节点。
11.在一较佳的实施例中,键访问频率统计具体为:键访问频率表示在一个时间周期内一个键被访问的数目;考虑到可编程数据平面存储空间限制以及对统计精度的要求,数
据平面使用count-minsketch算法来对经过可编程交换机的键请求进行统计,其结构由k行每个桶大小为w的寄存器数组构成,每一行由一个两两独立的hash函数将键映射到对应行的寄存器数组上;则对于一个键在该结构体上的频率统计为:
12.frequency(key)=min(ki[hi(key)])#(1)
[0013]
其中,ki表示每一行寄存器数组,hi表示每一行寄存器数组对应的hash函数。
[0014]
在一较佳的实施例中,控制平面定时清空count-min sketch模块的计数信息,在对热键频率的计算上,考虑两个时期的热键频率,一个是最新的一个时期的频率统计信息,记为frequency(key)
cur
,另一个是前一个时期的频率统计信息,记为frequency(key)
pre
,则对应一个键的统计频率frequency(key)表示为:
[0015]
frequency(key)=frequency(key)
cur
+α*frequency(key)
pre
#(2)
[0016]
其中,α表示前一个阶段频率统计的权重,α∈[0,1],表示为
[0017][0018]
其中,t
now
表示当前的时间,t
curend
表示当前最新的一个阶段结束的时间,t表示每个阶段持续的时间。
[0019]
在一较佳的实施例中,热键复制数目即number of replication,nor表示每个热键所需的副本节点数目;对于一个热键key的副本个数,考虑与其访问频率相关联,访问频率越高的热键给予分配更多的副本节点;一个热键key的nor可以表示为:
[0020][0021]
其中,t为判定为热键的访问频率阈值常量。
[0022]
在一较佳的实施例中,多值hash表示同一个key通过hash运算的方式映射到有限集合的多个互不相同的值上;在hash函数运算中引入撒盐的方式;则对于一个热键的多值hash运算表示为:
[0023]
h(key,i)=hash(key,salt[i])%w#(5)
[0024]
其中,i为键key的第i个hash计算值,salt[i]为参与hash计算的第i个撒盐值。
[0025]
在一较佳的实施例中,热键路由表示可编程交换机根据键来将客户端的键值请求转发到相应的存储节点上;热键表属性含有key,nor,regiter index,key为存放已知的热键,nor存放对应热键的副本节点个数,register index存放对应热键的轮询寄存器和有效寄存器的索引值;
[0026]
轮询寄存器存放每个已知热键所使用的撒盐索引值每个热键获取对应值之后,对应的
[0027]
多值hash逻辑模块内部由多值hash算法实现,在根据key以及计算出目的节点的id;
[0028]
有效寄存器在于判别计算出的节点是否存有查询key的键值对象,其内部采用bitmap实现,bitmap[i]为1时代表node_id=i的节点存放有key的键值对象,为0则表示没有;
[0029]
节点地址表组成属性含有node_id和node_address,node_id为每个键值存储节点在数据平面上的索引值,node_address为每个node_id的键值存储节点的ip地址。
[0030]
在一较佳的实施例中,数据平面检测到客户端对键key的请求q,由于key命中热键表,因此执行多值hash模块计算出目的节点为node1,通过key的bitmap查询到node1为无效,也就是说node1不存有热键key的键值对,则数据平面将node1信息添加到请求q中的副本字段并转发给key的主节点,主节点处理后生成回复数据包r并转发给数据平面,数据平面检测到回复数据包r中含有副本字段,则执行数据平面内部的clone方法,将r克隆一份数据包c,原始的回复数据包转发给请求的客户端,之后数据平面修改数据包c的目的地址为node1的地址,之后转发给node1,node1完成对热键key的键值对的存储,数据平面在key的bitmap上标记node1为有效,之后node1就能为key的请求服务,从而为key的主节点分担负载;
[0031]
在执行过程中,存在传输时延,这一部分时延来自于数据平面转发给主节点的时延t
switch

homenode
,主节点回复给数据平面的时延t
homenode

switch
,数据平面将克隆数据包转发给副本节点的时延t
switch

replicatenode
,这三部分相等,因此总时延delay=3t,因此会有一部分数据包会标记上副本字段,使得数据平面会多次执行重复的克隆,浪费带宽及存储节点处理开销;将key与存有副本节点信息的克隆字段暂时存储,并设置过期时长为delay;当主节点受到含有克隆字段的key请求时,若之前有克隆过了,则在回复时清除掉克隆字段。
[0032]
与现有技术相比,本发明具有以下有益效果:
附图说明
[0033]
图1为本发明优选实施例的键访问频率统计示意图;
[0034]
图2为本发明优选实施例的键路由示意图;
[0035]
图3为本发明优选实施例的热键对象复制示意图。
具体实施方式
[0036]
下面结合附图及实施例对本发明做进一步说明。
[0037]
应该指出,以下详细说明都是例示性的,旨在对本技术提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本技术所属技术领域的普通技术人员通常理解的相同含义。
[0038]
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本技术的示例性实施方式;如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
[0039]
一种基于可编程数据平面的键值分布式均衡存储方法,参考图1至3,具体包括以下步骤:
[0040]
在键值客户端向分布式键值存储提交请求后,p4交换机在数据平面上解析数据包中的键信息,并将键信息输入到键访问频率统计模块;
[0041]
p4数据平面根据键的访问频率信息,依据配置的键访问频率阈值t,访问频率高于t的键及其频率信息上报给控制端;
[0042]
控制端检测来自数据平面的热键上报信息,依据其统计到的频率数,计算所需副本存储节点个数,并向数据平面下发该热键以及复制因子到数据平面的热键匹配动作表中;
[0043]
在客户端的键请求数据包中的键字段k命中数据平面的热键匹配动作表时,判别该键的操作类型,如果是读操作,则数据平面根据复制因子,通过节点计算函数计算出目的节点a,之后进行节点a对键k的存在性判断,若为真,则转发给a节点处理;否则转发给该键的主节点,之后在主节点向数据平面回复该请求的数据包时,数据平面克隆一份数据包给a节点,a节点存储该键值,并在数据平面标注a节点存在此热键;如果是写则转发给主节点;
[0044]
对于不在热键匹配动作表中的键请求,则都转发到该键的主节点。
[0045]
具体来说,键访问频率统计:键访问频率表示在一个时间周期内一个键被访问的数目。考虑到可编程数据平面存储空间限制以及对统计精度的要求,数据平面使用count-min sketch算法来对经过可编程交换机的键请求进行统计,如图1所示,其结构由k行每个桶大小为w的寄存器数组构成,每一行由一个两两独立的hash函数将键映射到对应行的寄存器数组上。则对于一个键在该结构体上的频率统计为:
[0046]
frequency(key)=min(ki[hi(key)])#(1)
[0047]
其中,ki表示每一行寄存器数组,hi表示每一行寄存器数组对应的hash函数。
[0048]
具体来说,键访问频率统计时效性保证:一个热键具有产生、维持、衰弱,具有有一定的生命周期,在键访问频率统计时,需要考虑统计内部数据的时效性问题,过时的统计数据会对新的热键的统计与判别造成干扰。为了保证统计数据信息的时效性,控制平面定时清空count-min sketch模块的计数信息,在对热键频率的计算上,考虑两个时期的热键频率,一个是最新的一个时期的频率统计信息,记为frequency(key)
cur
,另一个是前一个时期的频率统计信息,记为frequency(key)
pre
,则对应一个键的统计频率frequency(key)可以表示为:
[0049]
frequency(key)=frequency(key)
cur
+α*frequency(key)
pre
#(2)
[0050]
其中,α表示前一个阶段频率统计的权重,α∈[0,1],可以表示为
[0051][0052]
其中,t
now
表示当前的时间,表示当前最新的一个阶段结束的时间,t表示每个阶段持续的时间。
[0053]
具体来说,热键复制数目:热键复制数目(number of replication,nor)表示每个热键所需的副本节点数目。存储节点间的负载不平衡来源于存有热键的节点受到客户端的访问量比较高,而不存有热键的节点负载则比较空闲,因此节点间负载平衡方式在于将热键的请求分摊到尽可能多的节点上,不过这个过程需要将热对象拷贝到这些副本节点上,需要额外的带宽开销以及存储开销,因此对于一个热键key的副本个数,考虑与其访问频率相关联,访问频率越高的热键给予分配更多的副本节点。一个热键key的nor可以表示为:
[0054][0055]
其中,t为判定为热键的访问频率阈值常量。
[0056]
具体来说,多值hash:多值hash表示同一个key能够通过hash运算的方式映射到有限集合的多个互不相同的值上。原先相同的key在hash函数计算下只能得到一个值,因此本发明在hash函数运算中引入撒盐的方式。则对于一个热键的多值hash运算可以表示为:
[0057]
h(key,i)=hash(key,salt[i])%w#(5)
[0058]
其中,i为键key的第i个hash计算值,salt[i]为参与hash计算的第i个撒盐值。
[0059]
具体来说,键路由:热键路由表示可编程交换机根据键来将客户端的键值请求转发到相应的存储节点上。如图2的(a)和(b)所示,热键路由实现在数据平面上,由热键表,轮询寄存器,多值hash逻辑模块,有效寄存器和节点地址表组成。
[0060]
热键表属性含有key,nor,regiter index,key为存放已知的热键,nor存放对应热键的副本节点个数,register index存放对应热键的轮询寄存器和有效寄存器的索引值。
[0061]
轮询寄存器存放每个已知热键所使用的撒盐索引值每个热键获取对应值之后,对应的
[0062]
多值hash逻辑模块内部由多值hash算法实现,在根据key以及能够计算出目的节点的id。
[0063]
有效寄存器在于判别计算出的节点是否存有查询key的键值对象,其内部采用bitmap实现,bitmap[i]为1时代表node_id=i的节点存放有key的键值对象,为0则表示没有。
[0064]
节点地址表组成属性含有node_id和node_address,node_id为每个键值存储节点在数据平面上的索引值,node_address为每个node_id的键值存储节点的ip地址。
[0065]
具体来说,热键对象复制:当控制平面将一个新的热键key及其配置下发到数据平面后,数据平面可以通过多值hash模块来计算出目的节点,这个目的节点可以是key的主节点,也可以是key的副本节点。开始的时候,这些副本节点并没有key的键值对,需要将key的键值对复制到这些副本节点上。本发明提出一种获取后复制的方法。如图3(a)所示,数据平面检测到客户端对键key的请求q,由于key命中热键表,因此执行多值hash模块计算出目的节点为node1,通过key的bitmap查询到node1为无效,也就是说node1不存有热键key的键值对,则数据平面将node1信息添加到请求q中的副本字段并转发给key的主节点,主节点处理后生成回复数据包r并转发给数据平面,如图3(b)所示,数据平面检测到回复数据包r中含有副本字段,则执行数据平面内部的clone方法,将r克隆一份数据包c,原始的回复数据包转发给请求的客户端,之后数据平面修改数据包c的目的地址为node1的地址,之后转发给node1,node1完成对热键key的键值对的存储,数据平面在key的bitmap上标记node1为有效,之后node1就能为key的请求服务,从而为key的主节点分担负载,实现存储节点间的负载均衡。
[0066]
在执行过程中,存在传输时延,这一部分时延来自于数据平面转发给主节点的时延t
switch

homenode
,主节点回复给数据平面的时延t
homenode

switch
,数据平面将克隆数据包转发给副本节点的时延t
switch

replicatenode
,这三部分大致相等,因此总时延delay=3t,因此会有一部分数据包会标记上副本字段,使得数据平面会多次执行重复的克隆,浪费带宽及存储节点处理开销。因此设计主节点检测到含有克隆字段的数据包时,将key与存有副本节点信息的克隆字段暂时存储,并设置过期时长为delay。当主节点受到含有克隆字段的key请求
时,若之前有克隆过了,则在回复时清除掉克隆字段。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1