远程直接内存访问方法、分布式存储系统及电子设备转让专利

申请号 : CN202311476743.1

文献号 : CN117215995B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 徐成智

申请人 : 苏州元脑智能科技有限公司

摘要 :

本说明书实施例提供了一种远程直接内存访问方法、分布式存储系统及电子设备,能够有效减少内存注册申请频次,优化系统性能。所述方法包括:所述客户端选定目标内存,生成客户端命令;所述服务端基于所述客户端命令针对所述目标内存进行数据访问,并反馈访问完成命令;所述客户端进行命令监测,以确定是否重复生成针对所述目标内存的客户端命令;响应于确定重复生成针对所述目标内存的客户端命令,所述客户端将所述目标内存标记为不可靠内存;针对不可靠的所述目标内存进行解注册,并重新注册申请新的内存设置在所述内存域中。

权利要求 :

1.一种远程直接内存访问方法,其特征在于,所述方法应用于分布式存储系统,所述分布式存储系统包括客户端以及服务端,在所述客户端内设置内存域,在所述内存域中设置有至少一块内存;所述方法,包括:所述客户端从所述内存域中选定目标内存,针对所述目标内存生成客户端命令并将所述客户端命令发送至所述服务端;

所述服务端基于所述客户端命令针对所述目标内存进行数据访问,并在数据访问后向所述客户端反馈访问完成命令;

所述客户端在接收到所述访问完成命令后,将所述目标内存返回给所述内存域;

其中,所述客户端在接收到所述访问完成命令之前进行命令监测,以确定是否重复生成针对所述目标内存的客户端命令;

响应于确定重复生成针对所述目标内存的客户端命令,所述客户端将所述目标内存标记为不可靠内存;

在所述客户端将所述目标内存返回给所述内存域后,所述内存域确定所述目标内存是否为不可靠内存;

响应于确定所述目标内存为不可靠内存,所述内存域针对所述目标内存进行解注册,并重新注册申请新的内存设置在所述内存域中。

2.根据权利要求1所述的方法,其特征在于,针对所述目标内存生成客户端命令,包括:所述客户端通过所述内存域获取所述目标内存的内存地址与相应的内存使用权限信息;

将所述内存地址与所述内存使用权限信息封装生成所述客户端命令;

所述客户端命令用于指示所述服务端对所述客户端中的数据进行远程直接访问。

3.根据权利要求2所述的方法,其特征在于,所述服务端基于所述客户端命令针对所述目标内存进行数据访问,包括:所述服务端对所述客户端命令进行解析,以获取所述客户端命令中的内存地址与内存使用权限信息;

所述服务端基于所述内存使用权限信息针对所述内存地址进行数据访问操作。

4.根据权利要求3所述的方法,其特征在于,所述客户端命令还包括访问操作指令,所述访问操作指令为数据写入访问指令或数据拉取访问指令,所述数据写入访问指令表示所述客户端向所述服务端写入数据,所述数据拉取访问指令表示所述客户端从所述服务端拉取数据。

5.根据权利要求1所述的方法,其特征在于,所述客户端在接收到所述访问完成命令之前进行命令监测,以确定是否重复生成针对所述目标内存的客户端命令,包括:所述客户端执行命令监测,以确定在接收到所述访问完成命令之前是否生成新的客户端命令;

响应于生成新的客户端命令,确定所述新的客户端命令所指定的数据访问对象是否为所述目标内存;

响应于所述新的客户端命令所指定的数据访问对象为所述目标内存,确定所述新的客户端命令时针对所述目标内存重复生成的客户端命令。

6.根据权利要求2所述的方法,其特征在于,所述内存域针对所述目标内存进行解注册,包括:将所述内存域中的所述目标内存释放,以使得所述目标内存相应的所述内存使用权限信息失效。

7.根据权利要求4所述的方法,其特征在于,响应于所述访问操作指令为所述数据写入访问指令,所述服务端基于所述内存使用权限信息针对所述内存地址进行数据访问操作,包括:所述服务端根据所述内存地址确定所述客户端中的所述目标内存;

获取所述目标内存中的数据作为目标数据,将所述目标数据存储在所述服务端相应的存储磁盘中。

8.根据权利要求7所述的方法,其特征在于,所述服务端获取所述目标内存中的数据作为目标数据后,所述服务端还针对所述目标数据进行数据验证;

所述服务端针对所述目标数据进行数据验证,包括:获取所述客户端所发送第一验证信息,所述第一验证信息由所述客户端根据所述目标内存中的数据计算确定;

所述服务端根据所述目标数据计算确定第二验证信息;

将所述第二验证信息与来自所述客户端的所述第一验证信息进行对比核验;

响应于所述第二验证信息与所述第一验证信息核验通过,确定所述目标数据正确传输;

响应于所述第二验证信息与所述第一验证信息核验未通过,确定所述目标数据传输错误。

9.根据权利要求8所述的方法,其特征在于,在确定所述目标数据传输错误后,还包括:所述服务端针对所述目标内存生成数据传输错误指令,并将所述数据传输错误指令发送至所述客户端;

所述客户端在接收到所述数据传输错误指令后,将所述目标内存标记为不可靠内存。

10.根据权利要求8所述的方法,其特征在于,在确定所述第二验证信息与所述第一验证信息核验未通过后,还包括:所述服务端根据所述内存地址与所述内存使用权限信息重新获取新的目标数据;

针对新的目标数据再次将相应的第二验证信息与所述第一验证信息进行对比核验;

响应于多次对比核验均未通过,确定所述目标数据传输错误。

11.根据权利要求8所述的方法,其特征在于,所述第一验证信息的计算方法包括:所述客户端针对所述目标内存中的数据计算其相应的循环冗余校验码作为所述第一验证信息;

所述服务端根据所述目标数据计算确定第二验证信息,包括:所述服务端针对所述目标数据计算其相应的循环冗余校验码作为所述第二验证信息;

将所述第二验证信息与来自所述客户端的所述第一验证信息进行对比核验,包括:确定所述第二验证信息与所述第一验证信息是否相同,二者相同的情况下确定对比核验通过。

12.根据权利要求8所述的方法,其特征在于,所述第一验证信息的计算方法包括:所述客户端针对所述目标内存中的数据采用哈希算法计算其相应的哈希编码作为所述第一验证信息;

所述服务端根据所述目标数据计算确定第二验证信息,包括:所述服务端针对所述目标数据采用哈希算法计算其相应的哈希编码作为所述第二验证信息;

将所述第二验证信息与来自所述客户端的所述第一验证信息进行对比核验,包括:确定所述第二验证信息与所述第一验证信息是否相同,二者相同的情况下确定对比核验通过。

13.根据权利要求4所述的方法,其特征在于,响应于所述访问操作指令为所述数据拉取访问指令,基于所述内存使用权限信息针对所述内存地址进行数据访问操作,包括:所述服务端从相应的存储磁盘中读取目标数据;

根据从所述客户端命令中解析确定的所述内存地址确定所述目标内存;

利用所述内存使用权限信息,将从所述存储磁盘中读取的所述目标数据传输至所述客户端;

所述客户端将所述目标数据写入所述目标内存。

14.根据权利要求13所述的方法,其特征在于,在所述服务端将从所述存储磁盘中读取的所述目标数据传输至所述客户端后,所述客户端还针对所述目标数据进行数据验证;

所述客户端针对所述目标数据进行数据验证,包括:获取所述服务端所发送第一验证信息,所述第一验证信息由所述服务端根据所述目标数据计算确定;

所述客户端根据所接收到的所述目标数据计算确定第二验证信息;

将所述第二验证信息与来自所述服务端的所述第一验证信息进行对比核验;

响应于所述第二验证信息与所述第一验证信息核验通过,确定所述目标数据正确传输;

响应于所述第二验证信息与所述第一验证信息核验未通过,确定所述目标数据传输错误。

15.根据权利要求14所述的方法,其特征在于,在确定所述目标数据传输错误后,还包括所述客户端将所述目标内存标记为不可靠内存。

16.根据权利要求14所述的方法,其特征在于,在确定所述第二验证信息与所述第一验证信息核验未通过后,还包括:所述服务端重新获取新的目标数据;

根据所述内存地址与所述内存使用权限信息将新的目标数据重新传输至所述客户端;

所述客户端针对新的目标数据再次将相应的第二验证信息与所述第一验证信息进行对比核验;

响应于多次对比核验均未通过,确定所述目标数据传输错误。

17.根据权利要求14所述的方法,其特征在于,所述第一验证信息的计算方法包括:所述服务端从相应的所述存储磁盘获取所述目标数据后,针对所述目标数据计算其相应的循环冗余校验码作为所述第一验证信息;

所述客户端根据所述目标数据计算确定第二验证信息,包括:所述客户端针对所述目标数据计算其相应的循环冗余校验码作为所述第二验证信息;

将所述第二验证信息与来自所述服务端的所述第一验证信息进行对比核验,包括:确定所述第二验证信息与所述第一验证信息是否相同,二者相同的情况下确定对比核验通过。

18.根据权利要求8所述的方法,其特征在于,所述第一验证信息的验证方法包括:所述服务端从相应的所述存储磁盘获取所述目标数据后,针对所述目标数据采用哈希算法计算其相应的哈希编码作为所述第一验证信息;

所述客户端根据所述目标数据计算确定第二验证信息,包括:所述客户端针对所述目标数据采用哈希算法计算其相应的哈希编码作为所述第二验证信息;

将所述第二验证信息与来自所述服务端的所述第一验证信息进行对比核验,包括:确定所述第二验证信息与所述第一验证信息是否相同,二者相同的情况下确定对比核验通过。

19.一种分布式存储系统,其特征在于,所述分布式存储系统包括客户端以及服务端,在所述客户端内设置内存管理模块,所述内存管理模块用于维护内存域,在所述内存域中设置有至少一块内存;

所述客户端,用于通过所述内存管理模块从所述内存域中选定目标内存,针对所述目标内存生成客户端命令并将所述客户端命令发送至所述服务端;

所述服务端,用于基于所述客户端命令针对所述目标内存进行数据访问,并在数据访问后向所述客户端反馈访问完成命令;

所述客户端在接收到所述访问完成命令后,还用于将所述目标内存返回给所述内存管理模块;

所述客户端在接收到所述访问完成命令之前,还用于进行命令监测,以确定是否重复生成针对所述目标内存的客户端命令,并在确定重复生成针对所述目标内存的客户端命令的情况下,将所述目标内存标记为不可靠内存;

所述内存管理模块在所述客户端将所述目标内存返回给所述内存管理模块后,还用于确定所述目标内存是否为不可靠内存,并在确定所述目标内存为不可靠内存的情况下,针对所述目标内存进行解注册,并重新注册申请新的内存设置在所述内存域中。

20.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至18任意一项所述的方法。

21.一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,其特征在于,所述计算机指令用于使计算机执行权利要求1至18任一所述方法。

说明书 :

远程直接内存访问方法、分布式存储系统及电子设备

技术领域

[0001] 本发明涉及分布式存储技术领域,具体涉及一种远程直接内存访问方法、分布式存储系统及电子设备。

背景技术

[0002] RDMA(Remote Direct Memory Access)意为远程直接内存访问,通过RDMA客户端节点可以“直接”访问服务端节点的内存。所谓直接,指的是可以像访问本地内存一样,绕过传统以太网复杂的TCP/IP网络协议栈,直接读写内存。如图1,应用RDMA技术,客户端数据绕过内核直接发送到服务端的用户态内存中。
[0003] RDMA技术具有零拷贝、内核旁路、CPU卸载等性能优势,同时也有一些弊端。在应用过程中,客户端内存可能被服务端意外修改,从而导致数据不一致、内存越界,甚至是系统异常和崩溃等。一些相关技术中,通常的处理方法是客户端不断使用新的注册内存,即客户端申请一块内存,把内存使用权限rkey发送给服务端,由服务端访问数据,当数据访问完成后,客户端解除注册内存,收回rkey权限。此时,服务端无法再次访问该内存。当客户端、服务端再次通讯时,重复上述循环。该方法不断注册内存,不断生成rkey,对系统整体运行性能造成很大影响。

发明内容

[0004] 有鉴于此,本说明书实施例提供了一种远程直接内存访问方法、分布式存储系统、电子设备及存储介质,能够有效减少内存注册申请频次,优化系统性能。
[0005] 在第一方面,本说明书实施例提供了一种远程直接内存访问方法,所述方法应用于分布式存储系统,所述分布式存储系统包括客户端、服务端以及设置在客户端内的内存域,在所述内存域中设置有至少一个内存。所述方法,包括:
[0006] 所述客户端通过所述内存域从所述内存域中选定目标内存,针对所述目标内存生成客户端命令并将所述客户端命令发送至所述服务端;
[0007] 所述服务端基于所述客户端命令针对所述目标内存进行数据访问,并在数据访问后向所述客户端反馈访问完成命令;
[0008] 所述客户端在接收到所述访问完成命令后,将所述目标内存返回给所述内存域;
[0009] 其中,所述客户端在接收到所述访问完成命令之前进行命令监测,以确定是否重复生成针对所述目标内存的客户端命令;
[0010] 响应于确定重复生成针对所述目标内存的客户端命令,所述客户端将所述目标内存标记为不可靠内存;
[0011] 在所述客户端将所述目标内存返回给所述内存域后,所述内存域确定所述目标内存是否为不可靠内存;
[0012] 响应于确定所述目标内存为不可靠内存,所述内存域针对所述目标内存进行解注册,并重新注册申请新的内存设置在所述内存域中。
[0013] 本说明书实施例还提供了一种分布式存储系统。所述分布式存储系统包括客户端、服务端以及设置在客户端的内存管理模块,所述内存管理模块用于维护内存域,并在所述内存域中设置有至少一个内存。
[0014] 所述客户端,用于通过所述内存管理模块从所述内存域中选定目标内存,针对所述目标内存生成客户端命令并将所述客户端命令发送至所述服务端;
[0015] 所述服务端,用于基于所述客户端命令针对所述目标内存进行数据访问,并在数据访问后向所述客户端反馈访问完成命令;
[0016] 所述客户端在接收到所述访问完成命令后,还用于将所述目标内存返回给所述内存管理模块;
[0017] 所述客户端在接收到所述访问完成命令之前,还用于进行命令监测,以确定是否重复生成针对所述目标内存的客户端命令,并在确定重复生成针对所述目标内存的客户端命令的情况下,将所述目标内存标记为不可靠内存;
[0018] 所述内存管理模块在所述客户端将所述目标内存返回给所述内存管理模块后,还用于确定所述目标内存是否为不可靠内存,并在确定所述目标内存为不可靠内存的情况下,针对所述目标内存进行解注册,并重新注册申请新的内存设置在所述内存域中。
[0019] 本说明书实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所述的远程直接内存访问方法。
[0020] 从上面可以看出,本说明书实施例所提供的一种远程直接内存访问方法、分布式系统及电子设备,具有如下有益技术效果:
[0021] 客户端在与服务端交互过程中对服务端所访问内存的可靠性进行判定,将可能存在异常修改风险的内存判定为不可靠,内存管理模块仅对不可靠的内存进行解注册并重新申请注册新的内存,而可靠内存可以多次重复响应数据访问操作,这样的方式大大降低客户端中内存申请注册与解注册的工作量,能够优化系统运行性能。

附图说明

[0022] 通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
[0023] 图1示出了RDMA技术中客户端数据绕过内核直接发送到服务端的用户态内存的示意图;
[0024] 图2示出了客户端注册内存与服务端交互并注销内存的流程示意图;
[0025] 图3示出了本说明书一个或多个可选实施例所提供的一种远程内存直接访问方法示意图;
[0026] 图4示出了本说明书一个或多个可选实施例所提供的一种远程内存直接访问方法中所述内存管理模块所维护内存域示意图;
[0027] 图5示出了本说明书一个或多个可选实施例所提供的一种远程内存直接访问方法中客户端确定是否重复生成针对所述目标内存的客户端命令的方法示意图;
[0028] 图6示出了本说明书一个或多个可选实施例所提供的一种远程内存直接访问方法中针对所述数据写入访问指令服务端执行数据访问的示意图;
[0029] 图7示出了本说明书一个或多个可选实施例所提供的一种远程内存直接访问方法中服务端针对所述目标数据进行数据验证的方法示意图;
[0030] 图8示出了本说明书一个或多个可选实施例所提供的一种远程内存直接访问方法中针对所述数据拉取访问指令服务端执行数据访问的示意图;
[0031] 图9示出了本说明书一个或多个可选实施例所提供的一种远程内存直接访问方法中客户端针对所述目标数据进行数据验证的方法示意图;
[0032] 图10示出了本说明书一个或多个可选实施例所提供的一种分布式存储系统结构示意图;
[0033] 图11示出了本说明书一个或多个可选实施例所提供的一种远程内存直接访问电子设备结构示意图。

具体实施方式

[0034] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0035] RDMA(Remote Direct Memory Access)意为远程直接内存访问,通过RDMA客户端节点可以“直接”访问服务端节点的内存。所谓直接,指的是可以像访问本地内存一样,绕过传统以太网复杂的TCP/IP网络协议栈,直接读写内存。如图1所示,应用RDMA技术,客户端数据绕过内核直接发送到服务端的用户态内存中。
[0036] RDMA技术具有零拷贝、内核旁路、CPU卸载等性能优势,同时也有一些弊端。在应用过程中,客户端内存可能被服务端意外修改,从而导致数据不一致、内存越界,甚至是系统异常和崩溃等。如图2所示,通常的处理方法是客户端不断使用新的注册内存,即客户端申请一块内存,把内存使用权限rkey发送给服务端,服务端推送数据到客户端,当数据接收完成后,客户端解除注册内存,收回rkey权限。此时,服务端无法再次推送数据给该内存了。当客户端、服务端再次通讯时,重复上述循环。该方法不断注册内存,不断生成rkey,对系统整体运行性能造成很大影响。
[0037] 针对上述问题,本说明书实施例的目的在于提出一种远程直接内存访问方法,在分布式存储系统的软件通讯层中设置内存管理模块,由该模块负责客户端中内存的申请、注册和管理,客户端在与服务端交互过程中对服务端所访问内存的可靠性进行判定,将可能存在异常修改风险的内存判定为不可靠,内存管理模块仅对不可靠的内存进行解注册并重新申请注册新的内存,而可靠内存可以多次重复响应数据访问操作,这样的方式大大降低客户端中内存申请注册与解注册的工作量,能够优化系统运行性能。
[0038] 基于上述目的,本说明书实施例提供了一种远程直接内存访问方法。
[0039] 如图3所示,本说明书一个或多个可选实施例所提供的一种远程内存直接访问方法,所述方法应用于分布式存储系统,所述分布式存储系统包括客户端、服务端以及设置在客户端内的内存域,在所述内存域中设置有至少一个内存。所述方法,包括:
[0040] S1:所述客户端从所述内存域中选定目标内存,针对所述目标内存生成客户端命令并将所述客户端命令发送至所述服务端。
[0041] 所述内存域用于负责所述客户端中内存的申请、注册和管理。如图4所示,针对远程内存直接访问业务,所述内存域中由多个内存组成,例如128M空间的内存域,可以分为8个16M内存块分别注册,并获取8个对应的内存使用权限信息rkey。
[0042] 针对具体的访问业务,所述客户端可以在所述内存域中选定一块内存作为所述目标内存,之后针对所述目标内存生成客户端命令,并将所述客户端命令发送至所述服务端。所述客户端命令中可以包括所述目标内存的内存地址以及相应的所述内存使用权限信息rkey,用于指示所述服务端对所述客户端中的数据进行远程直接访问。
[0043] 在一些可选实施例中,针对所述目标内存生成客户端命令,可以采用以下方法:所述客户端通过内存域获取所述目标内存的内存地址与相应的内存使用权限信息;将所述内存地址与所述内存使用权限信息封装生成所述客户端命令。
[0044] S2:所述服务端基于所述客户端命令针对所述目标内存进行数据访问,并在数据访问后向所述客户端反馈访问完成命令。
[0045] 所述客户端命令中可以包括具体所设定的访问操作指令,所述访问操作指令可以为数据写入访问指令或数据拉取访问指令。其中,所述数据写入访问指令表示所述客户端向所述服务端写入数据,所述数据拉取访问指令表示所述客户端从所述服务端拉取数据。
[0046] 所述服务端接收到所述客户端命令后,可以根据所述客户端命令中具体的所述访问操作指令对所述目标内存进行数据访问操作。一些可选实施方式中,所述服务端基于所述客户端命令针对所述目标内存进行数据访问可以采用以下方法:所述服务端对所述客户端命令进行解析,以获取所述客户端命令中的内存地址与内存使用权限信息;所述服务端基于所述内存使用权限信息针对所述内存地址进行数据访问操作。
[0047] S3:所述客户端在接收到所述访问完成命令后,将所述目标内存返回给所述内存域。
[0048] 所述访问完成命令表示所述服务端已经完成对所述目标内存的数据访问,此时所述客户端可以将所述目标内存返回给所述内存域以便所述内存域对所述目标内存执行后续管理。
[0049] S4:其中,所述客户端在接收到所述访问完成命令之前进行命令监测,以确定是否重复生成针对所述目标内存的客户端命令。
[0050] 考虑到在实际业务执行过程中,所述客户端与所述服务端之间的网络通信可能出现异常情况造成消息丢失,因此所述客户端发出所述客户端命令后可能不会得到答复,这种情况下所述客户端一般会重新发送命令给所述服务端。这种情况下所述服务端可能存在三种应答情况(1)服务端只答复第二次命令;(2)服务端先答复第一次命令,再答复第二次命令;(3)服务端先答复第二次命令,再答复第一次命令。
[0051] 因此可以理解的是,在所述客户端重新发送命令时,所述服务端有可能对所述目标内存执行一次以上的数据访问操作,也就是说所述服务端可能利用所述目标内存的所述内存使用权限信息对所述目标内存执行一次以上的操作,这种情况下客户端内存可能被服务端意外修改,从而导致数据不一致、内存越界,甚至是系统异常和崩溃。
[0052] 因此,在所述服务端执行数据访问操作直到操作完成向所述客户端发送相应的所述访问完成命令之前,所述客户端可以针对所述客户端命令执行命令监测,以确定针对所述目标内存是否重复生成客户端命令。如果确定重复生成所述客户端命令,则说明业务执行过程中存在内存被以外修改的安全隐患。
[0053] 如图5所示,在本说明书一个或多个可选实施例所提供的一种远程内存直接访问方法中,所述客户端在接收到所述访问完成命令之前进行命令监测,以确定是否重复生成针对所述目标内存的客户端命令,包括:
[0054] S201:所述客户端执行命令监测,以确定在接收到所述访问完成命令之前是否生成新的客户端命令。
[0055] S202:响应于生成新的客户端命令,确定所述新的客户端命令所指定的数据访问对象是否为所述目标内存。
[0056] 本领域技术人员可以理解的是,所述客户端可能同时执行针对多个不同内存的远程内存访问业务,针对不同业务所述客户端持续发送不同的客户端命令,不同客户端命令所针对的内存不同。在确定生成新的客户端命令之后,进一步的需要确定新的客户端命令,其对应指定的数据访问对象是否为所述目标内存,如果新生成的客户端命令也指向所述目标内存,则说明此命令是对针对所述目标内存重新操作的命令。
[0057] S203:响应于所述新的客户端命令所指定的数据访问对象为所述目标内存,确定所述新的客户端命令时针对所述目标内存重复生成的客户端命令。
[0058] S5:响应于确定重复生成针对所述目标内存的客户端命令,所述客户端将所述目标内存标记为不可靠内存。
[0059] 根据上述对实际业务执行过程的分析,可知在确定重复生成针对所述目标内存的客户端命令时,所述目标内存存在被意外修改的风险,因此所述客户端可以将所述目标内存标记为不可靠内存。
[0060] 所述客户端可以通过向所述目标内存添加标记,并将标记内容设置为不可靠,从而将其标记为不可靠内存。
[0061] S6:在所述客户端将所述目标内存返回给所述内存域后,所述内存域确定所述目标内存是否为不可靠内存。
[0062] 所述内存域用于对所述内存域中的至少一个内存进行管理,当所述客户端将已完成数据访问业务的所述目标内存返回给所述内存域时,所述内存域对其进行后续管理。
[0063] 为确保远程内存直接方位系统稳定运行,所述内存域需要针对所述客户端所返回的所述目标内存进行监测判断,确定是否为不可靠内存。
[0064] 所述内存域在收到所述客户端返回的所述目标内存后,可以对所述目标内存进行检测,确定所述目标内存是否关联有不可靠的标记信息,如果有则说明所述目标内存为不可靠内存。如图4所示,所述内存域针对不同远程内存直接访问业务所对应的多个内存,都会在客户端返回内存后确定其是否可靠。
[0065] S7:响应于确定所述目标内存为不可靠内存,所述内存域针对所述目标内存进行解注册,并重新注册申请新的内存设置在所述内存域中。
[0066] 对不可靠内存而言,存在被服务端意外修改的风险。所述服务端针对所述不可靠内存进行意外修改是基于不可靠内存对应的所述内存使用权限信息rkey。为了规避这种风险,所述内存域可以针对所述目标内存进行解注册。如图4所示,一些可选实施方式中,对于不可靠内存,所述内存域针对不可靠的所述目标内存进行解注册,可以采用以下方法:将所述内存域中的所述目标内存释放,以使得所述目标内存相应的所述内存使用权限信息失效。所述服务端无法再利用rkey执行操作。之后,可以注册申请新的内存设置在所述内存域中,以使内存域保持一定的规模,满足远程内存直接方位的业务需求。
[0067] 相对于不可靠内存,若所述目标内存不存在重复发送客户端命令的情况,可以确定所述目标内存为可靠内存。对于可靠内存,可以采用内存复用方式,被反复使用。这样的方式可以降低客户端中内存申请注册与解注册的工作量,从而优化系统运行性能。
[0068] 所述远程内存直接访问方法中,客户端在与服务端交互过程中对服务端所访问内存的可靠性进行判定,将可能存在异常修改风险的内存判定为不可靠,内存域仅对不可靠的内存进行解注册并重新申请注册新的内存,而可靠内存可以多次重复响应数据访问操作,这样的方式大大降低客户端中内存申请注册与解注册的工作量,能够优化系统运行性能。
[0069] 所述客户端命令中可以包括具体所设定的访问操作指令,其中所述数据写入访问指令表示所述客户端向所述服务端写入数据。如图6所示,本说明书一些可选实施例中,针对所述数据写入访问指令,所述服务端基于所述内存使用权限信息针对所述内存地址进行数据访问操作,可以采用以下方法:所述服务端根据所述内存地址确定所述客户端中的所述目标内存;获取所述目标内存中的数据作为目标数据,将所述目标数据存储在所述服务端相应的存储磁盘中。
[0070] 如图7所示,在本说明书一个或多个可选实施例所提供的一种远程内存直接访问方法中,所述服务端获取所述目标内存中的数据作为目标数据后,所述服务端还针对所述目标数据进行数据验证;
[0071] 所述服务端针对所述目标数据进行数据验证,包括:
[0072] S301:获取所述客户端所发送第一验证信息,所述第一验证信息由所述客户端根据所述目标内存中的数据计算确定。
[0073] S302:所述服务端根据所述目标数据计算确定第二验证信息。
[0074] S303:将所述第二验证信息与来自所述客户端的所述第一验证信息进行对比核验,以确定是否核验通过。
[0075] 一些可选实施方式中,可以采用循环冗余校验码CRC作为所述第一验证信息。所述客户端针对所述目标内存中的数据计算其相应的循环冗余校验码作为所述第一验证信息。
[0076] 针对以所述循环冗余校验码CRC作为所述第一验证信息的情况,所述服务端可以针对所述目标数据计算其相应的循环冗余校验码CRC作为所述第二验证信息。
[0077] 将所述第二验证信息与来自所述客户端的所述第一验证信息进行对比核验,包括确定所述第二验证信息与所述第一验证信息是否相同,二者相同的情况下确定对比核验通过。
[0078] 一些可选实施方式中,可以采用哈希编码作为所述第一验证信息。所述客户端针对所述目标内存中的数据采用哈希算法计算其相应的哈希编码作为所述第一验证信息。
[0079] 针对以所述哈希编码作为所述第一验证信息的情况,所述服务端针对所述目标数据可以采用哈希算法计算其相应的哈希编码作为所述第二验证信息。将所述第二验证信息与来自所述客户端的所述第一验证信息进行对比核验,包括确定所述第二验证信息与所述第一验证信息是否相同,二者相同的情况下确定对比核验通过。
[0080] S304:响应于所述第二验证信息与所述第一验证信息核验通过,确定所述目标数据正确传输。
[0081] S305:响应于所述第二验证信息与所述第一验证信息核验未通过,确定所述目标数据传输错误。
[0082] 在一些可选实施例中,所述服务端在确定所述目标数据传输错误后,还针对所述目标内存生成数据传输错误指令,并将所述数据传输错误指令发送至所述客户端;所述客户端在接收到所述数据传输错误指令后,将所述目标内存标记为不可靠内存。所述客户端可以在接收到所述数据传输错误指令后,为所述目标内存添加标记,并将所述标记信息设定为不可靠。
[0083] 在一些可选实施例中,所述服务端可以对从所述目标内存中读取的数据进行多次校验。在确定所述第二验证信息与所述第一验证信息核验未通过后,所述服务端根据所述内存地址与所述内存使用权限信息重新获取新的目标数据;针对新的目标数据再次将相应的第二验证信息与所述第一验证信息进行对比核验;如果多次对比核验均未通过,确定所述目标数据传输错误。
[0084] 可以理解的是,多次校验的次数上限可以根据实际情况进行灵活设定,例如可以将校验次数上限设置为三次,如果三次校验均未通过,说明所述服务端所接收到的数据内容与所述客户端中所述目标内存中的数据内容不一致,可能是因为网络传输异常造成的,这种情况下所述目标内存也可能存在数据被非法操作修改的风险。因此所述服务端可以向所述客户端发送目标数据传输错误指令,以使所述客户端将所述目标内存标记为不可靠内存。
[0085] 以选用CRC作为所述第一验证信息为例,一些可选实施例中,所述客户端向所述服务端写入数据的数据访问操作,具体步骤可以表述如下:
[0086] 准备阶段:所述内存域在所述客户端的存储磁盘中申请注册多个内存并确定相应的内存使用权限信息,由多个内存构成内存域。
[0087] 步骤(1):所述客户端根据所述内存管理服务器从所述内存域中选取确定目标内存,针对所述目标内存生成客户端命令,并将所述客户端命令发送给所述服务端。
[0088] 所述客户端命令的内容包括所述目标内存的内存地址、相应的内存使用权限信息rkey以及所述目标内存中所存储的目标数据的CRC信息。
[0089] 步骤(2):所述服务端收到所述客户端命令后,从中提取确定所述目标内存的内存地址,以及所述目标数据的CRC信息。
[0090] 步骤(3):所述服务端根据所述内存地址,直接从所述客户端中把所述目标数据拉取到所述服务端。
[0091] 步骤(4):所述服务端计算所拉取到数据的CRC,将所计算确定的CRC与从所述客户端命令中提取到的CRC信息进行对比。
[0092] 步骤(5):如果和所述客户端命令中的CRC相同,表示拉取成功。所述服务端向所述客户端,返回写操作成功消息。
[0093] 步骤(6):如果和所述客户端命令中的CRC不同,表示拉取失败,所述服务端重新拉取数据并进行计算CRC对比验证。
[0094] 步骤(7):重试3次拉取失败后,所述服务端向所述客户端返回写操作失败消息。
[0095] 步骤(8):所述客户端在接收到所述服务端的返回消息之前进行消息监控,确定是否重复生成针对所述目标内存的客户端命令。
[0096] 步骤(9):如果所述客户端重复生成针对所述目标内存的客户端命令,将所述目标内存标记为不可靠内存。
[0097] 步骤(10):所述客户端在接收到所述服务端的返回消息之后,确定返回消息的具体内容,如果所述服务端返回的是写操作失败消息,所述客户端将所述目标内存标记为不可靠内存。
[0098] 步骤(11):所述客户端将所述目标内存返回至所述内存域。
[0099] 步骤(12):所述内存域针对所返回的所述目标内存进行判断,确定所述目标内存是否为不可靠内存。
[0100] 步骤(13):如果所述目标内存为可靠内存,将所述目标内存设置在所述内存域中,保存记录所述目标内存原有的内存使用权限信息rkey。
[0101] 步骤(14):如果所述目标内存为不可靠内存,所述内存域针对所述目标内存解除内存注册,注销相应的内存使用权限信息。
[0102] 步骤(15):从所述客户端的存储磁盘中重新注册申请新的内存块,设置在所述内存域中。
[0103] 所述对内存域中的多个内存进行管理,对于所述客户端所返回的每个内存都确定是否可靠。对于可靠内存直接设置在所述内存域中,可靠内存可以反复使用。这样的方式可以降低客户端中内存申请注册与解注册的工作量,从而优化系统运行性能。所述内存域仅对不可靠的内存进行解注册并重新申请注册新的内存,能够有效避免服务端对客户端中内存进行意外修改,保证客户端中内存数据可靠安全性。
[0104] 所述客户端命令中可以包括具体所设定的访问操作指令,所述访问操作指令可以为数据拉取访问指令,所述数据拉取访问指令表示所述客户端从所述服务端拉取数据。如图8所示,本说明书一些可选实施例中,针对所述数据拉取访问指令,基于所述内存使用权限信息针对所述内存地址进行数据访问操作,可以采用以下方法:所述服务端从相应的存储磁盘中读取目标数据;根据从所述客户端命令中解析确定的所述内存地址确定所述目标内存;利用所述内存使用权限信息,将从所述存储磁盘中读取的所述目标数据传输至所述客户端;所述客户端将所述目标数据写入所述目标内存。
[0105] 如图9所示,在本说明书一个或多个可选实施例所提供的一种远程内存直接访问方法中,在所述服务端将从所述存储磁盘中读取的所述目标数据传输至所述客户端后,所述客户端还针对所述目标数据进行数据验证。
[0106] 所述客户端针对所述目标数据进行数据验证,包括:
[0107] S401:获取所述服务端所发送第一验证信息,所述第一验证信息由所述服务端根据所述目标数据计算确定。
[0108] S402:所述客户端根据所接收到的所述目标数据计算确定第二验证信息。
[0109] S403:将所述第二验证信息与来自所述服务端的所述第一验证信息进行对比核验,以确定核验是否通过。
[0110] 在一些可选实施例中,可以采用循环冗余校验码CRC作为所述第一验证信息。所述服务端从相应的所述存储磁盘获取所述目标数据后,针对所述目标数据计算其相应的循环冗余校验码作为所述第一验证信息。
[0111] 针对采用所述循环冗余校验码CRC作为所述第一验证信息的情况,所述客户端可以针对所述目标数据计算其相应的循环冗余校验码作为所述第二验证信息。将所述第二验证信息与来自所述服务端的所述第一验证信息进行对比核验,包括确定所述第二验证信息与所述第一验证信息是否相同,二者相同的情况下确定对比核验通过。
[0112] 在一些可选实施例中,可以选取哈希编码作为所述第一验证信息。所述服务端从相应的所述存储磁盘获取所述目标数据后,可以针对所述目标数据采用哈希算法计算其相应的哈希编码作为所述第一验证信息。
[0113] 针对采用所述焊锡编码作为所述第一验证信息的情况,所述客户端针对所述目标数据采用哈希算法计算其相应的哈希编码作为所述第二验证信息。将所述第二验证信息与来自所述服务端的所述第一验证信息进行对比核验,包括确定所述第二验证信息与所述第一验证信息是否相同,二者相同的情况下确定对比核验通过。
[0114] S404:响应于所述第二验证信息与所述第一验证信息核验通过,确定所述目标数据正确传输。
[0115] S405:响应于所述第二验证信息与所述第一验证信息核验未通过,确定所述目标数据传输错误。
[0116] 在一些可选实施例中,所述客户端在确定所述目标数据传输错误后,可以将所述目标内存标记为不可靠内存。所述客户端可以在确定所述目标数据传输错误后,为所述目标内存添加标记,并将所述标记信息设定为不可靠。
[0117] 在一些可选实施例中,所述客户端可以对所述服务端发送的数据进行多次校验。在确定所述第二验证信息与所述第一验证信息核验未通过后,所述服务端重新获取新的目标数据;根据所述内存地址与所述内存使用权限信息将新的目标数据重新传输至所述客户端;所述客户端针对新的目标数据再次将相应的第二验证信息与所述第一验证信息进行对比核验;如果多次对比核验均未通过,确定所述目标数据传输错误。
[0118] 可以理解的是,多次校验的次数上限可以根据实际情况进行灵活设定,例如可以将校验次数上限设置为三次,如果三次校验均为通过,说明所述客户端接收到的数据内容与所述服务端从相应磁盘获取的目标数据内容不一致,可能是因为网络传输异常造成的,这种情况下所述目标内存也可能存在数据被非法操作修改的风险。因此所述客户端可以将所述目标内存标记为不可靠内存。
[0119] 以选用CRC作为所述第一验证信息为例,一些可选实施例中,所述客户端从所述服务端拉取数据的数据访问操作,具体步骤可以表述如下:
[0120] 准备阶段:所述内存域在所述客户端的存储磁盘中申请注册多个内存并确定相应的内存使用权限信息,由多个内存构成内存域。
[0121] 步骤(1):所述客户端根据所述内存管理服务器从所述内存域中选取确定目标内存,针对所述目标内存生成客户端命令,并将所述客户端命令发送给所述服务端。
[0122] 所述客户端命令的内容包括所述目标内存的内存地址、相应的内存使用权限信息rey。
[0123] 步骤(2):所述服务端收到后,从所述服务端相应的存储磁盘读取目标数据。
[0124] 步骤(3):所述服务端针对所述目标数据计算相应的CRC信息,将所述目标数据与相应的CRC信息推送给所述客户端。
[0125] 步骤(4):所述客户端接收到来自所述服务端所推送的信息后,从中提取出所述目标数据与相应的CRC信息。
[0126] 步骤(5):所述客户端针对所提取的数据计算CRC,并将所计算的CRC与从推送消息中提取的CRC信息进行对比。
[0127] 步骤(6):如果与推送消息中的CRC相同,表示数据接收成功。
[0128] 步骤(7):如果与推送消息中的CRC不同,表示数据接收失败。所述客户端向所述服务端重新发起数据读取流程,获取目标数据并计算CRC对比验证。
[0129] 步骤(8):重试3次读取失败后,确定目标数据读取失败,所述客户端不再读取。
[0130] 步骤(9):所述客户端在接收到所述服务端的返回消息之前进行消息监控,确定是否重复生成针对所述目标内存的客户端命令。
[0131] 步骤(10):如果所述客户端重复生成针对所述目标内存的客户端命令,将所述目标内存标记为不可靠内存。
[0132] 步骤(11):所述客户端在接收到来自所述服务端的返回信息后,确定是否读取成功。如果目标数据读取失败,所述客户端将所述目标内存标记为不可靠。
[0133] 步骤(12):所述客户端将所述目标内存返回至所述内存域。
[0134] 步骤(13):所述内存域针对所返回的所述目标内存进行判断,确定所述目标内存是否为不可靠内存。
[0135] 步骤(14):如果所述目标内存为可靠内存,将所述目标内存设置在所述内存域中,保存记录所述目标内存原有的内存使用权限信息rkey。
[0136] 步骤(15):如果所述目标内存为不可靠内存,针对所述目标内存解除内存注册,注销相应的内存使用权限信息。
[0137] 步骤(16):从所述客户端的存储磁盘中重新注册申请新的内存块,设置在所述内存域中。
[0138] 所述对内存域中的多个内存进行管理,对于所述客户端所返回的每个内存都确定是否可靠。对于可靠内存直接设置在所述内存域中,可靠内存可以反复使用。这样的方式可以降低客户端中内存申请注册与解注册的工作量,从而优化系统运行性能。所述内存域仅对不可靠的内存进行解注册并重新申请注册新的内存,能够有效避免服务端对客户端中内存进行意外修改,保证客户端中内存数据可靠安全性。
[0139] 需要说明的是,本说明书一个或多个实施例的方法可以由单个设备执行,例如一台计算机或服务端等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本说明书一个或多个实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
[0140] 需要说明的是,上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0141] 基于同一面,与上述任意实施例方法相对应的,本说明书实施例还提供了一种分布式存储系统。
[0142] 参考图10,所述分布式存储系统,包括客户端、服务端以及设置在客户端的内存管理模块,所述内存管理模块用于维护内存域,并在所述内存域中设置有至少一个内存。
[0143] 所述客户端,用于通过所述内存管理模块从所述内存域中选定目标内存,针对所述目标内存生成客户端命令并将所述客户端命令发送至所述服务端;
[0144] 所述服务端,用于基于所述客户端命令针对所述目标内存进行数据访问,并在数据访问后向所述客户端反馈访问完成命令;
[0145] 所述客户端在接收到所述访问完成命令后,还用于将所述目标内存返回给所述内存管理模块;
[0146] 所述客户端在接收到所述访问完成命令之前,还用于进行命令监测,以确定是否重复生成针对所述目标内存的客户端命令,并在确定重复生成针对所述目标内存的客户端命令的情况下,将所述目标内存标记为不可靠内存;
[0147] 所述内存管理模块在所述客户端将所述目标内存返回给所述内存管理模块后,还用于确定所述目标内存是否为不可靠内存,并在确定所述目标内存为不可靠内存的情况下,针对所述目标内存进行解注册,并重新注册申请新的内存设置在所述内存域中。
[0148] 在本说明书一个或多个可选实施例所提供的一种分布式存储系统中,所述客户端,还用于通过所述内存管理模块获取所述目标内存的内存地址与相应的内存使用权限信息;将所述内存地址与所述内存使用权限信息封装生成所述客户端命令;所述客户端命令用于指示所述服务端对所述客户端中的数据进行远程直接访问。
[0149] 在本说明书一个或多个可选实施例所提供的一种分布式存储系统中,所述服务端,还用于对所述客户端命令进行解析,以获取所述客户端命令中的内存地址与内存使用权限信息;基于所述内存使用权限信息针对所述内存地址进行数据访问操作。
[0150] 在本说明书一个或多个可选实施例所提供的一种分布式存储系统中,所述客户端命令还包括访问操作指令,所述访问操作指令为数据写入访问指令或数据拉取访问指令,所述数据写入访问指令表示所述客户端向所述服务端写入数据,所述数据拉取访问指令表示所述客户端从所述服务端拉取数据。
[0151] 在本说明书一个或多个可选实施例所提供的一种分布式存储系统中,所述客户端,还用于执行命令监测,以确定在接收到所述访问完成命令之前是否生成新的客户端命令;在生成新的客户端命令情况下,确定所述新的客户端命令所指定的数据访问对象是否为所述目标内存;在所述新的客户端命令所指定的数据访问对象为所述目标内存,确定所述新的客户端命令时针对所述目标内存重复生成的客户端命令。
[0152] 在本说明书一个或多个可选实施例所提供的一种分布式存储系统中,所述内存管理模块,还用于将所述内存域中的所述目标内存释放,以使得所述目标内存相应的所述内存使用权限信息失效。
[0153] 在本说明书一个或多个可选实施例所提供的一种分布式存储系统中,所述服务端,还用于根据所述内存地址确定所述客户端中的所述目标内存;获取所述目标内存中的数据作为目标数据,将所述目标数据存储在所述服务端相应的存储磁盘中。
[0154] 在本说明书一个或多个可选实施例所提供的一种分布式存储系统中,所述服务端在获取所述目标内存中的数据作为目标数据后,还用于针对所述目标数据进行数据验证;获取所述客户端所发送第一验证信息,所述第一验证信息由所述客户端根据所述目标内存中的数据计算确定;根据所述目标数据计算确定第二验证信息;将所述第二验证信息与来自所述客户端的所述第一验证信息进行对比核验;在所述第二验证信息与所述第一验证信息核验通过时,确定所述目标数据正确传输;在所述第二验证信息与所述第一验证信息核验未通过时,确定所述目标数据传输错误。
[0155] 在本说明书一个或多个可选实施例所提供的一种分布式存储系统中,所述服务端在确定所述目标数据传输错误后,还用于针对所述目标内存生成数据传输错误指令,并将所述数据传输错误指令发送至所述客户端。所述客户端在接收到所述数据传输错误指令后,还用于将所述目标内存标记为不可靠内存。
[0156] 在本说明书一个或多个可选实施例所提供的一种分布式存储系统中,所述服务端在确定所述第二验证信息与所述第一验证信息核验未通过后,还用于根据所述内存地址与所述内存使用权限信息重新获取新的目标数据;针对新的目标数据再次将相应的第二验证信息与所述第一验证信息进行对比核验;在多次对比核验均未通过的情况下,确定所述目标数据传输错误。
[0157] 在本说明书一个或多个可选实施例所提供的一种分布式存储系统中,所述客户端,还用于针对所述目标内存中的数据计算其相应的循环冗余校验码作为所述第一验证信息。所述服务端,还用于针对所述目标数据计算其相应的循环冗余校验码作为所述第二验证信息; 确定所述第二验证信息与所述第一验证信息是否相同,二者相同的情况下确定对比核验通过。
[0158] 在本说明书一个或多个可选实施例所提供的一种分布式存储系统中,所述客户端,还用于针对所述目标内存中的数据采用哈希算法计算其相应的哈希编码作为所述第一验证信息。所述服务端,还用于针对所述目标数据采用哈希算法计算其相应的哈希编码作为所述第二验证信息;确定所述第二验证信息与所述第一验证信息是否相同,二者相同的情况下确定对比核验通过。
[0159] 在本说明书一个或多个可选实施例所提供的一种分布式存储系统中,所述服务端,还用于从相应的存储磁盘中读取目标数据;根据从所述客户端命令中解析确定的所述内存地址确定所述目标内存;利用所述内存使用权限信息,将从所述存储磁盘中读取的所述目标数据传输至所述客户端。所述客户端,还用于将所述目标数据写入所述目标内存。
[0160] 在本说明书一个或多个可选实施例所提供的一种分布式存储系统中,所述客户端在所述服务端将从所述存储磁盘中读取的所述目标数据传输至所述客户端后,还用于针对所述目标数据进行数据验证。所述客户端,还用于获取所述服务端所发送第一验证信息,所述第一验证信息由所述服务端根据所述目标数据计算确定;根据所接收到的所述目标数据计算确定第二验证信息;将所述第二验证信息与来自所述服务端的所述第一验证信息进行对比核验;在所述第二验证信息与所述第一验证信息核验通过时,确定所述目标数据正确传输;在所述第二验证信息与所述第一验证信息核验未通过,确定所述目标数据传输错误。
[0161] 在本说明书一个或多个可选实施例所提供的一种分布式存储系统中,所述客户端在确定所述目标数据传输错误后,还用于所述客户端将所述目标内存标记为不可靠内存。
[0162] 在本说明书一个或多个可选实施例所提供的一种分布式存储系统中,在所述客户端确定所述第二验证信息与所述第一验证信息核验未通过后,所述服务端,还用于重新获取新的目标数据;根据所述内存地址与所述内存使用权限信息将新的目标数据重新传输至所述客户端。所述客户端,还用于针对新的目标数据再次将相应的第二验证信息与所述第一验证信息进行对比核验;在多次对比核验均未通过的情况下,确定所述目标数据传输错误。
[0163] 在本说明书一个或多个可选实施例所提供的一种分布式存储系统中,所述服务端,还用于从相应的所述存储磁盘获取所述目标数据后,针对所述目标数据计算其相应的循环冗余校验码作为所述第一验证信息。所述客户端,还用于针对所述目标数据计算其相应的循环冗余校验码作为所述第二验证信息;确定所述第二验证信息与所述第一验证信息是否相同,二者相同的情况下确定对比核验通过。
[0164] 在本说明书一个或多个可选实施例所提供的一种分布式存储系统中,所述服务端,还用于从相应的所述存储磁盘获取所述目标数据后,针对所述目标数据采用哈希算法计算其相应的哈希编码作为所述第一验证信息。所述客户端,还用于针对所述目标数据采用哈希算法计算其相应的哈希编码作为所述第二验证信息;确定所述第二验证信息与所述第一验证信息是否相同,二者相同的情况下确定对比核验通过。
[0165] 为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
[0166] 上述实施例的装置用于实现前述实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
[0167] 图11示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图, 该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线 1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
[0168] 处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
[0169] 存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
[0170] 输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/ 模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
[0171] 通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式 (例如移动网络、WIFI、蓝牙等)实现通信。
[0172] 总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
[0173] 需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
[0174] 上述实施例的电子设备用于实现前述实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
[0175] 基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的远程内存直接访问方法。
[0176] 本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD‑ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带式磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
[0177] 上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上任一实施例所述的远程内存直接访问方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
[0178] 本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(Read‑Only Memory,ROM)、随机存储记忆体(Random Access Memory,RAM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,缩写:HDD)或固态硬盘(Solid‑State Drive,SSD)等;所述存储介质还可以包括上述种类的存储器的组合。
[0179] 上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
[0180] 为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
[0181] 本领域内的技术人员应明白,本说明书的实施例可提供为方法、系统、或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产品的形式。
[0182] 还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0183] 本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
[0184] 本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0185] 所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本说明书一个或多个实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
[0186] 尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
[0187] 本说明书一个或多个实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。