面向分离式内存系统的数据访问方法及数据访问控制器

摘要: 本发明属于键值存储与远程内存访问,更具体地,涉及一种面向分离式内存系统的数据访问方法及数据访问控制器。背景技术:1、分离内存是一种将计算资源与内存资源解耦部署的...
面向分离式内存系统的数据访问方法及数据访问控制器

本发明属于键值存储与远程内存访问,更具体地,涉及一种面向分离式内存系统的数据访问方法及数据访问控制器。

背景技术:

1、分离内存是一种将计算资源与内存资源解耦部署的系统架构。在该类架构中,计算节点与内存节点可通过远程直接内存访问(remote direct memory access,rdma)网络进行互连,从而实现计算资源与内存资源的独立扩展。

2、在面向分离内存的有序键值存储系统中,索引通常需要支持点查询、插入、更新、删除以及范围查询等操作。由于索引数据访问涉及计算节点与内存节点之间的远程交互,索引组织方式和访问路径会直接影响单次访问时延、计算节点侧缓存占用、内存节点侧维护压力以及rdma网络开销。

3、具体而言,现有面向分离内存的索引访问场景下,内存节点侧计算资源有限,若请求处理或索引维护过程中需要多次远程交互或同步处理,则会增加访问时延并加剧网络争用。尤其在热点范围访问场景下,多个请求往往集中访问相邻键范围或同一数据块。若每个请求均独立执行远程加锁、远程抓取和远程提交,则难以复用前序访问已经带回计算节点的数据块状态。在此类处理方式下,计算节点侧即使已经获得目标数据块的副本,也难以在同一热点窗口内为后续请求复用该副本,从而产生重复的网络往返和额外的锁竞争开销。因此,如何减少远程网络往返次数,是面向分离内存的数据访问需要解决的一个重要问题。

技术实现思路

1、针对现有技术的以上缺陷或改进需求,本发明提供了一种面向分离式内存系统的数据访问方法及数据访问控制器,由此解决远程网络往返次数高、网络开销和锁竞争开销大的技术问题。

2、为实现上述目的,按照本发明的第一方面,提供了一种面向分离式内存系统的数据访问方法,包括:

3、响应于针对所述分离式内存系统的数据访问请求;其中,所述分离式内存系统包括通过网络互连的计算节点和内存节点;

4、基于所述数据访问请求的目标键确定所述数据访问请求要访问的目标数据块;

5、当所述目标数据块为热点数据块时,确定所述数据访问请求是否满足本地读写条件;其中,所述本地读写条件为当前数据访问请求在所述目标数据块当前的所有者线程的块级所有权窗口内到达计算节点;所述所有者线程是计算节点为针对所述目标数据块的写请求分配的占有所述目标数据块本地锁的线程;

6、若所述数据访问请求满足本地读写条件,则将所述数据访问请求按照其数据访问操作类型分配至所述目标数据块的读队列或写队列;

7、其中,所述所有者线程用于在成功获取所述目标数据块的本地锁之后建立读队列和写队列,获取所述目标数据块的远程锁,并在获取所述远程锁之后从所述内存节点抓取所述目标数据块的块数据,以基于抓取的块数据完成所述所有者线程负责的写请求以及读队列和写队列中的数据访问请求的本地执行;在完成所述所有者线程负责的写请求的本地执行后,关闭所述读队列和写队列,并等待队列关闭前已加入所述读队列和写队列的数据访问请求完成本地执行。

8、根据上述任一面向分离式内存系统的数据访问方法,

9、基于抓取的块数据完成所述所有者线程负责的写请求以及读队列和写队列中的数据访问请求的本地执行,具体包括:

10、将抓取的块数据设置为只读块,并建立其对应的本地可写副本;

11、基于所述只读块和所述本地可写副本,按照以下方式完成所述所有者线程负责的写请求以及所述读队列和写队列中的数据访问请求的本地执行:

12、若当前数据访问请求为所述读队列中的读请求,预测相应读请求中的目标键的候选位置范围,基于所述只读块对应所述候选位置范围内的键值对定位相应读请求中的目标键对应的槽位并返回该槽位处保存的值数据;

13、若当前数据访问请求为所述所有者线程负责的写请求或所述写队列中的写请求,预测相应写请求中的目标键的候选位置范围,基于所述本地可写副本对应所述候选位置范围内的键值对定位相应写请求中的目标键对应的槽位,并在所述本地可写副本的相应槽位处执行相应写请求的写操作;

14、当队列关闭前已加入所述读队列和写队列的数据访问请求完成本地执行后,所述所有者线程将所述本地可写副本中的修改结果写回所述内存节点的所述目标数据块中,并释放所述目标数据块的远程锁和本地锁。

15、根据上述任一面向分离式内存系统的数据访问方法,当所述目标数据块不为热点数据块,或者,所述数据访问请求为读请求且不满足本地读写条件时,所述方法还包括:

16、预测所述数据访问请求中的目标键的候选位置范围;

17、所述计算节点通过网络向所述内存节点请求所述候选位置范围内的键值对,基于接收的所述候选位置范围内的键值对定位所述数据访问请求中的目标键对应的槽位,并在该槽位处执行所述数据访问请求的数据访问操作。

18、根据上述任一面向分离式内存系统的数据访问方法,预测任一数据访问请求中的目标键的候选位置范围,具体包括:

19、所述计算节点基于本地存储的学习型索引缓存获得所述任一数据访问请求中的目标键对应的数据节点模型,并基于所述数据节点模型确定相应目标键的原始预测位置和以所述原始预测位置为中心的候选预测窗口之后,基于本地存储的偏移缓存对该目标键的候选预测窗口进行裁剪,确定相应目标键的候选位置范围;其中,所述学习型索引缓存用于缓存所述内存节点中各个数据节点对应的数据节点模型,任一数据节点覆盖连续键范围且被划分为多个数据块,任一数据节点对应的数据节点模型用于预测键在该数据节点内的位置;所述偏移缓存用于缓存所述内存节点的数据节点中各数据块的局部预测校正信息。

20、根据上述任一面向分离式内存系统的数据访问方法,所述偏移缓存中的一个偏移缓存行对应一个数据块;所述偏移缓存行中保存了相应数据块内各槽位对应的偏移项;所述偏移项至少包括占用标志和偏移值,其中,占用标志用于表征对应槽位是否存储键值对,所述偏移值用于表征对应槽位所在的位置与存储于该槽位的键的预测基准位置之间的非负位置差值;任一键的预测基准位置为以该键对应的原始预测位置为中心的候选预测窗口的下界;

21、基于本地存储的偏移缓存对该目标键的候选预测窗口进行裁剪,确定相应目标键的候选位置范围,具体包括:

22、确定所述候选预测窗口所覆盖的若干个数据块,并分别基于所述候选预测窗口所覆盖的各数据块检索所述偏移缓存;

23、若所述候选预测窗口所覆盖的各数据块在所述偏移缓存中未命中,则确定所述候选位置范围为该目标键的候选预测窗口;

24、否则,基于该目标键的预测基准位置与命中的偏移缓存行中的各个偏移项进行匹配,基于匹配的偏移项对应的槽位对该目标键的候选预测窗口进行裁剪,确定所述候选位置范围,或者,在命中的偏移缓存行中各个偏移项均不匹配的情况下,若命中的偏移缓存行中存在未占用的偏移项,则基于所述未占用的偏移项对应的槽位对该目标键的候选预测窗口进行裁剪,确定所述候选位置范围;所述未占用的偏移项是指占用标志未被设置为表示对应槽位已占用的状态的偏移项;所述未占用的偏移项包括对应槽位未存储键值对的偏移项以及尚未完成初始化的偏移项;其中,当所述候选预测窗口所覆盖的部分数据块在所述偏移缓存中命中、部分数据块未命中时,所述候选位置范围包括基于命中的偏移缓存行裁剪得到的范围以及所述候选预测窗口与在所述偏移缓存中未命中的数据块重叠的范围。

25、根据上述任一面向分离式内存系统的数据访问方法,基于该目标键的预测基准位置与命中的偏移缓存行中的各个偏移项进行匹配,具体包括:

26、基于该目标键的预测基准位置与命中的偏移缓存行中的任一偏移项进行匹配时,若该偏移项的占用标志表示对应槽位已存储键值对,且该目标键的预测基准位置与该偏移项中的偏移值之和等于该偏移项对应槽位的位置,则确定该偏移项满足匹配条件。

27、根据上述任一面向分离式内存系统的数据访问方法,基于匹配的偏移项对应的槽位对该目标键的候选预测窗口进行裁剪,确定所述候选位置范围,具体包括:

28、若存在唯一满足匹配条件的偏移项,则将所述候选位置范围确定为覆盖该匹配的偏移项对应槽位的区域;

29、若存在多个满足匹配条件的偏移项,则将所述候选位置范围确定为覆盖多个匹配的偏移项对应槽位的最小连续区域。

30、根据上述任一面向分离式内存系统的数据访问方法,在命中的偏移缓存行中各个偏移项均不匹配的情况下,若命中的偏移缓存行中存在未占用的偏移项,则基于所述未占用的偏移项对应的槽位对该目标键的候选预测窗口进行裁剪,确定所述候选位置范围,具体包括:

31、若命中的偏移缓存行中存在未占用的偏移项,则将所述候选位置范围确定为覆盖未占用的偏移项对应槽位的最小连续区域;

32、若命中的偏移缓存行中的偏移项的占用标志均表示对应槽位已存储键值对,则判定命中的偏移缓存行所对应的数据块内不存在该目标键。

33、根据上述任一面向分离式内存系统的数据访问方法,所述方法还包括:

34、所述内存节点侧基于性能提示和/或节点填充率确定待重训练的数据节点,并分配重训练线程;

35、所述重训练线程基于所述待重训练的数据节点中有效的键值对进行模型重建,得到该数据节点对应的新的数据节点模型,将该数据节点当前对应的数据块记为旧节点数据块,并基于新的数据节点模型为该数据节点分配新的数据块以存储其中有效的键值对,基于新的数据节点模型和新的数据块生成该数据节点对应的新节点元数据;

36、将所述新节点元数据写入所述内存节点的同步区域;

37、所述重训练线程发布与所述新节点元数据对应的发布信息;所述发布信息用于指示新节点元数据在同步区域中的起始位置和新节点元数据数量;

38、在发布新节点元数据后,重训练线程将旧节点数据块设置为同步状态,并依次扫描各个旧节点数据块,将能够成功加锁的数据块中的键值对按照新的数据节点模型预测的原始预测位置插入至新的数据块中;其中,任一旧节点数据块中的键值对全部迁移至新的数据块中之后,该旧节点数据块被标记为无效;任一旧节点数据块被标记为无效之前仍能被数据访问请求访问。

39、按照本发明的第二方面,提供了一种面向分离内存的数据访问控制器,包括:计算机可读存储介质和处理器;

40、所述计算机可读存储介质用于存储可执行指令;

41、所述处理器用于读取所述计算机可读存储介质中存储的可执行指令,执行如第一方面所述的方法。

42、总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:

43、通过在计算节点侧建立块级所有权窗口,并将同一数据块上的后续读写请求委托给所有者线程处理,能够复用已经抓取到计算节点侧的数据块状态和本地可写副本,使读请求在本地返回、写请求在本地合并后再写回,减少热点块访问中的重复远程加锁、重复网络数据读取以及额外网络往返,降低热点范围访问时的锁竞争和网络资源占用。

44、进一步地,在定位目标键时,通过在计算节点侧缓存数据块各槽位的局部预测校正信息,并利用偏移项对模型预测误差形成的候选预测窗口进行裁剪,能够将远程抓取范围由完整预测窗口缩小为覆盖目标候选槽位的记录区域,减少无关记录随同抓取的情况,降低学习型索引在分离内存场景下的读取放大,从而节省网络带宽并降低点查询等访问操作的远程读取开销。

45、进一步地,在对数据节点进行重训练时,将新节点元数据的发布与旧节点数据迁移相分离,使计算节点能够在同步区域中获得新节点定位信息,旧数据块在被标记为无效前仍可作为前台访问对象;旧数据块被标记为无效后,计算节点根据已发布的新节点元数据重定向至新节点,由此能够避免必须等待旧节点全部记录完成迁移后才使重训练结果生效,从而减少动态负载下等待完整迁移造成的维护阻塞,并降低模型更新滞后对前台访问路径的影响。