本技术涉及云,尤其涉及一种分布式存储方法以及相关装置。
背景技术:
1、远端直接内存访问(remote direct memory access,rdma)是一种直接进行远程内存存取的技术,即可以直接将数据从一个计算机快速迁移到另一个远端计算机的内存中,而无需双方操作系统的介入,减少了中央处理器(central processing unit,cpu)参与数据传输过程的消耗,解放了内存带宽和处理器周期,进而提升了系统处理业务的性能,具有高带宽、低时延及低cpu占用率的特点。其中,在远端计算机的内存中,数据被组织为键值对(key-value pair)的形式,通过建立哈希表来索引所存储的所有的键值对,并为与该远端计算机建立有rdma连接的若干个计算机提供键值对的插入、查询、删除、更新等服务。
2、rdma提供了两种分布式存储方案:1、服务器中心(server-centric)方案;2、客户端直连(client-direct)方案。server-centric方案可以避免客户端与存储节点之间的多次网络传输减小网络开销,但是需要占用存储节点一侧的计算资源。client-direct方案可完全绕开存储节点一侧的处理器,节省了存储节点的计算资源。但是,client-direct方案中出现哈希冲突或者指针访问等问题时,需要客户端与存储节点之间多次往返时延(round-trip time,rtt)才能完成一次读操作或写操作,导致延迟提升、增大网络带宽开销。
3、因此,如何实现在绕开存储节点的处理器的前提下,在一个rtt内完成读操作或写操作,成为一个亟待解决的问题。
技术实现思路
1、第一方面,本技术实施例提出一种分布式存储方法,所述方法应用于计算节点,所述方法包括:接收来自客户端的第一报文,所述第一报文请求读取第一数据,所述第一报文携带第一键key,所述第一key对应所述第一数据;向存储节点发送第二报文,所述第二报文请求读取所述第一数据,所述第二报文携带第一目的地址,所述第一目的地址与所述第一key对应,所述第一目的地址对应的存储区域存储有所述第一数据。
2、本技术实施例中,计算节点收到来自客户端的第一报文后,将第一报文携带的第一key修改为与第一key对应的第一目的地址。修改后的第一报文作为第二报文,将第二报文发送至存储节点。使得存储节点可根据第二报文携带的第一目的地址直接读取第一报文请求读取的第一数据。在绕开存储节点的处理器的前提下,在一次rtt内完成操作。减少网络传输带来的延迟,降低存储节点的计算资源的占用率。
3、结合第一方面,在第一方面的一种可能的实现方式中,所述方法还包括:根据所述第一报文,得到所述第二报文,其中,修改所述第一报文的第一字段得到所述第二报文,修改前所述第一字段包括所述第一key,修改后所述第一字段包括所述第一目的地址。
4、在另一种可能的实现方式中,计算节点根据第一报文携带的第一key,确定第一目的地址。然后,计算节点根据第一报文和第一目的地址,生成新的报文(即生成第二报文),第二报文请求读取第一数据。
5、本技术实施例中,计算节点可以采用多种方法生成第二报文,提升了方案的实现灵活性。
6、结合第一方面,在第一方面的一种可能的实现方式中,所述根据所述第一报文,得到所述第二报文,包括:根据所述第一报文携带的所述第一key,生成第一哈希值;根据所述第一哈希值,从第一哈希表中确定第一值value,其中,所述第一哈希表包括第一哈希表项,所述第一哈希表项包括所述第一value与所述第一哈希值;根据所述第一value,确定所述第一目的地址;将所述第一报文携带所述第一key替换为所述第一目的地址,得到所述第二报文。
7、具体的,计算节点根据第一报文携带的第一key,以及,相应的哈希函数,计算得到第一哈希值。关于哈希函数,在计算节点中每一张哈希表可以关联一个哈希函数,或者,同一个哈希表也可以关联多个哈希函数,计算节点根据实际需求调用哈希函数计算哈希值。需要说明的是,本技术实施例对哈希函数的类型不作限制。计算节点计算得到第一key对应的第一哈希值后,从第一哈希表中查找与第一哈希值对应的第一value。第一哈希表包括多个哈希表项,例如:哈希表项1、哈希表项2等。其中,以哈希表项1为例,哈希表项1包括hash1以及对应的value1。计算节点根据第一哈希值,从第一哈希表中查找对应的第一哈希表项,该第一哈希表项包括的哈希值为第一哈希值,该第一哈希表项包括的值为第一value。
8、可选的,计算节点也可以存储多个哈希表,例如:哈希表摘要(哈希表摘要包括部分的第一哈希表,例如第一哈希表中常用的哈希表项作为哈希表摘要),第二哈希表(第二哈希表与第一哈希表包括的哈希表项不同)或者其他哈希表。计算节点也可以从上述其他的哈希表中确定第一value,本技术实施例对此不作限制。
9、通过上述方法,在计算节点中可实现根据第一报文携带的key,查找到第一报文的目的地址。以确保第一报文请求读取的数据可以被成功读取。
10、结合第一方面,在第一方面的一种可能的实现方式中,所述第一value包括所述第一目的地址,或者,所述第一value为指向所述第一目的地址的指针。
11、具体的,value包括的内容存在两种实现方式:1、value直接包括目的地址。换言之value以内联inline方式存储在哈希表中,哈希表包括目的地址。2、value包括指向目的地址的指针,需要通过该指针找到目的地址。换言之,哈希表存储指向目的地址的指针。因此,根据第一value,确定第一目的地址包括两种可能的实现方式。
12、一种可能的实现方式中,value包括目的地址时,根据第一value,可直接确定第一目的地址。
13、另一种可能的实现方式中,value包括目的地址的指针时,根据第一value,可确定指向第一目的地址的指针。然后,通过该指针可确定第一目的地址。
14、通过上述方法,在计算节点中可以通过多种方式记录key对应的目的地址,提升了方案的实现灵活性。
15、结合第一方面,在第一方面的一种可能的实现方式中,所述第一报文携带第一标识位,所述第一报文的所述第一标识位指示根据所述第一报文生成所述第二报文。示例性的,第一标识位指示第一报文的虚拟地址字段,携带的是key还是地址。如果是key,则第一标识位设置为1,计算节点根据第一标识位的指示将第一报文生成第二报文;如果是地址,则第一标识位设置为0,计算节点根据第一标识位的指示将第一报文直接转发至存储节点。通过设置第一标识位,便于计算节点处理报文,可以将提升处理效率。
16、结合第一方面,在第一方面的一种可能的实现方式中,所述第一报文携带第二标识位,所述第二标识位指示所述第一value包括所述第一目的地址,或者,所述第一value为指向所述第一目的地址的指针。
17、具体的,第二标识位用于指示第一key对应的第一值(value)包括第一目的地址,或者,第一value包括指向第一目的地址的指针。具体的,在计算节点中以键值对(key-value)的形式关联key与value。在计算节点中存储哈希(hash)表,哈希表包括一个或多个哈希表项,每个哈希表项至少包括由key生成的哈希值,以及,与该哈希值对应的value。
18、关于value,value包括的内容存在两种实现方式:1、value直接包括目的地址。换言之value以inline方式存储在哈希表中,哈希表包括目的地址。2、value包括指向目的地址的指针,需要通过该指针找到目的地址。换言之,哈希表存储指向目的地址的指针。为了便于计算节点处理第一报文,在第一报文的第二标识位指示计算节点在获取第一value后,如何获取对应目的地址(称为第一目的地址)。
19、通过设置第二标识位,便于计算节点获取key对应的目的地址,提升处理效率。
20、结合第一方面,在第一方面的一种可能的实现方式中,所述计算节点包括第一计算节点,根据所述第一哈希值,从所述第一哈希表中确定所述第一值value,包括:所述第一计算节点根据所述第一哈希值,从哈希表摘要中确定是否存在对应的所述第一value,所述哈希表摘要包括部分的所述第一哈希表,所述第一计算节点存储所述哈希表摘要;若存在,则所述第一计算节点确定所述第一value。
21、然后,第一计算节点根据第一value确定第一目的地址。第一计算节点根据第一目的地址修改第一报文,得到第二报文,第二报文携带第一目的地址。最后,第一计算节点将第二报文发送至存储节点。
22、具体的,该哈希表摘要选取第一哈希表中常用的哈希表项,若第一报文携带的第一key属于常用的哈希表项包括的key时,可有效提升第一计算节点的处理效率。
23、结合第一方面,在第一方面的一种可能的实现方式中,所述计算节点还包括第二计算节点,所述第二计算节点存储所述第一哈希表;所述第一计算节点根据所述第一哈希值,从所述哈希表摘要中确定是否存在对应的所述第一value之后,所述方法还包括:若不存在,则所述第一计算节点将所述第一报文转发至所述第二计算节点;所述第二计算节点根据所述第一报文携带的所述第一key,生成所述第一哈希值;所述第二计算节点根据所述第一哈希值,从所述第二计算节点存储的所述第一哈希表中确定所述第一value。
24、本技术实施例中,计算节点可以通过多个硬件实体实现相关功能,例如,计算节点包括第一计算节点和第二计算节点,其中,第一计算节点包括哈希表摘要,该哈希表摘要包括部分的第一哈希表,第二计算节点包括第一哈希表。计算节点中的第一计算节点首先处理第一报文。当哈希表摘要中无法找到第一哈希值对应的第一value时,第一计算节点将第一报文转发至第二计算节点,由第二计算节点继续处理第一报文。第二计算节点根据第一报文的第一key,从第一哈希表中确定对应的第一value。最后,第二计算节点根据第一value对应的第一目的地址,对第一报文进行处理得到第二报文,第二计算节点将第二报文发送至存储节点。通过上述方法,可有效提升对第一报文的处理效率,降低读取的时延。
25、结合第一方面,在第一方面的一种可能的实现方式中,所述第一字段包括远程直接数据存取扩展传输报文头reth字段。
26、结合第一方面,在第一方面的一种可能的实现方式中,所述第一字段包括所述reth字段中的虚拟地址字段。
27、结合第一方面,在第一方面的一种可能的实现方式中,根据所述第一哈希值,从所述第一哈希表中确定所述第一值value,包括:根据所述第一哈希值和所述第一哈希表,确定所述第一哈希值发生哈希冲突或者内存溢出;根据所述第一哈希值,从第二哈希表中确定所述第一value,所述第二哈希表包括的哈希表项中哈希值为发生哈希冲突或内存溢出的哈希值。
28、通过上述方法,即使计算得到的哈希值发生了哈希冲突或者内存溢出,计算节点依然可以根据该哈希值找到对应的value,确保根据第一报文可以成功读取到第一数据。
29、第二方面,本技术实施例提出一种分布式存储方法,所述方法应用于计算节点,所述方法包括:接收第三报文,所述第三报文请求写入第二数据,所述第三报文携带第二键key,所述第二key对应所述第二数据;根据所述第三报文,将所述第二数据写入所述存储节点,所述第二数据在所述存储节点的存储地址为第二目的地址;根据所述第二目的地址和所述第三报文携带的所述第二key,更新所述计算节点保存的哈希表,更新后的所述哈希表包括第二哈希表项,所述第二哈希表项包括第二哈希值和第二value,其中,所述第二哈希值由所述第二key计算得到,所述第二value包括所述第二目的地址。
30、具体的,计算节点可以从客户端接收第三报文,计算节点可以从任意一个存储节点(或者服务器)接收第三报文。该第三报文请求写入第二数据,也就是说,第三报文为put请求对应的报文。第三报文携带第二key,具体的,第三报文包括第一字段,第三报文的第一字段包括第二key,该第二key指示第三报文请求写入的第二数据的目的地址,也就是第二数据在存储节点的存储地址。
31、计算节点根据第三报文携带的第二key,计算得到第二哈希值。具体的,计算节点根据哈希表关联的哈希函数(例如第一哈希表关联的哈希函数)计算第二key得到第二哈希值。然后,计算节点将第二目的地址作为该第二哈希值对应的值(value),生成第二哈希表项。该第二哈希表项包括第二哈希值和第二value,第二value包括第二目的地址,或者,第二value包括指向第二目的地址的指针。然后,计算节点根据第二哈希表项,更新本地的哈希表。
32、本技术实施例中,当发生put操作时,通过上述方法可及时更新计算节点存储的哈希表,以确保发生get操作时可成功读取对应的数据。
33、结合第二方面,在第二方面的一种可能的实现方式中,根据所述第三报文,将所述第二数据写入所述存储节点之前,所述方法还包括:接收第四报文,所述第四报文用于请求写入第三数据,所述第四报文携带所述第二key,所述第四报文的目的互联网协议ip地址为第一存储节点,所述第三报文的目的ip地址为所述第一存储节点,所述第四报文的目的ip地址与所述第三报文的目的ip地址相同;根据所述第三报文和所述第四报文,确定待写入的第四数据,所述第四数据由所述第二数据和所述第三数据聚合得到;根据所述第四数据,将所述第四数据写入所述第一存储节点,所述第四数据在所述存储节点的存储地址为所述第二目的地址。
34、具体的,计算节点接收来自客户端或者存储节点的第三报文,该第三报文请求写入第二数据,也就是说,第三报文为put请求对应的报文。第三报文携带第二key,具体的,第三报文包括第一字段,第三报文的第一字段包括第二key,该第二key指示第三报文请求写入的第二数据的目的地址,也就是第二数据在存储节点中的存储地址。
35、进一步的,计算节点确定第三报文的目的ip地址,该第三报文的目的ip地址指示第三报文请求写入的存储节点的地址。例如,第三报文的目的ip地址指示第三报文请求写入存储节点1。
36、计算节点接收来自客户端或者存储节点的第四报文,该第四报文请求写入第三数据,也就是说,第四报文为put请求对应的报文。第三报文携带第二key,具体的,第四报文包括第一字段,第四报文的第一字段包括第二key,该第二key指示第四报文请求写入的第三数据的目的地址,也就是第三数据在存储节点的存储地址。
37、进一步的,计算节点确定第四报文的目的ip地址,该第四报文的目的ip地址指示第四报文请求写入的存储节点的地址。例如,第四报文的目的ip地址指示第四报文请求写入存储节点1。
38、进一步的,计算节点确定第三报文的目的ip地址与第四报文的目的ip地址是否相同,即上述两个报文是否请求向同一个存储节点写入数据。若第三报文的目的ip地址与第四报文的目的ip地址相同,计算节点可以对第三报文和第四报文进行聚合处理。具体的,计算节点根据第三报文请求写入的第二数据和第四报文请求写入的第三数据,聚合得到待写入的第四数据。计算节点确定待写入的第四数据后,向存储节点写入第四数据,第四数据在存储节点的存储地址为第二目的地址,第二目的地址与第二key对应。
39、一种可能的示例中,计算节点根据第三报文和第四报文,生成第五报文。第五报文请求写入第四数据,第五报文包括第二key。首先,根据第五报文,计算节点将第五报文请求写入的第四数据存储到计算节点的存储器中,例如,存储到计算节点的内存中。然后,计算节点向存储节点写入第四数据,第四数据在存储节点的存储地址为第二目的地址,第二目的地址与第二key对应。具体的,计算节点运行有工作线程,例如是第一工作线程,该第一工作线程用于轮询计算节点的存储器,当发现计算节点的存储器中存在新存储的第四数据后,识别该第四数据与put请求对应。然后,响应于计算节点已存储的第四数据,计算节点向存储节点写入第四数据,第四数据在存储节点的存储地址为第二目的地址。
40、本技术实施例中,通过上述方法,可以对目的ip地址相同且携带相同key的多个写入请求进行聚合处理,减少网络传输,提升了网络吞吐量。
41、结合第二方面,在第二方面的一种可能的实现方式中,根据所述第三报文,将所述第二数据写入所述存储节点,包括:根据所述第三报文,在所述计算节点存储所述第二数据;响应于检测到所述计算节点已存储所述第二数据,所述计算节点将所述第二数据写入到所述存储节点。
42、具体的,计算节点运行有工作线程,例如是第一工作线程,该第一工作线程用于轮询计算节点的存储器,当发现计算节点的存储器中存在新存储的第二数据后,识别该第二数据与put请求对应。然后,响应于计算节点已存储的第二数据,计算节点向存储节点写入第二数据,第二数据在存储节点的存储地址为第二目的地址。
43、通过上述方法,计算节点可以降低与存储节点之间通信负担,减少网络流量。
44、结合第二方面,在第二方面的一种可能的实现方式中,根据所述第二目的地址和所述第三报文携带的所述第二key,更新所述计算节点保存的哈希表,包括:根据所述第二key,计算得到所述第二哈希值;根据第一哈希表,确定所述第二哈希值未发生哈希冲突或内存溢出时,更新所述计算节点保存的所述第一哈希表;根据所述第一哈希表,确定所述第二哈希值发生哈希冲突或内存溢出时,更新所述计算节点保存的第二哈希表,所述第二哈希表包括的哈希表项中哈希值为发生哈希冲突或内存溢出的哈希值,所述第二哈希表与所述第一哈希表不一致。
45、通过上述方法,计算得到的哈希值发生了哈希冲突或者内存溢出,计算节点依然可以根据将该哈希值和对应value以哈希表项形式保存在第二哈希表中,以便后续计算节点接收到请求读取数据的报文时,可应用该第二哈希表,有效提升读取数据的成功率。
46、第三方面,本技术实施例提出一种计算节点,包括:收发模块,和,处理模块;
47、收发模块,用于接收来自客户端的第一报文,所述第一报文请求读取第一数据,所述第一报文携带第一键key,所述第一key对应所述第一数据;
48、收发模块,还用于向存储节点发送第二报文,所述第二报文请求读取所述第一数据,所述第二报文携带第一目的地址,所述第一目的地址与所述第一key对应,所述第一目的地址对应的存储区域存储有所述第一数据。
49、在一种可能的实现方式中,
50、处理模块,用于根据所述第一报文,得到所述第二报文,其中,修改所述第一报文的第一字段得到所述第二报文,修改前所述第一字段包括所述第一key,修改后所述第一字段包括所述第一目的地址。
51、在一种可能的实现方式中,
52、处理模块,还用于根据所述第一报文携带的所述第一key,生成第一哈希值;
53、处理模块,还用于根据所述第一哈希值,从第一哈希表中确定第一值value,其中,所述第一哈希表包括第一哈希表项,所述第一哈希表项包括所述第一value与所述第一哈希值;
54、处理模块,还用于根据所述第一value,确定所述第一目的地址;
55、处理模块,还用于将所述第一报文携带所述第一key替换为所述第一目的地址,得到所述第二报文。
56、在一种可能的实现方式中,所述第一value包括所述第一目的地址,或者,所述第一value为指向所述第一目的地址的指针。
57、在一种可能的实现方式中,所述第一报文携带第一标识位,所述第一报文的所述第一标识位指示根据所述第一报文生成所述第二报文。
58、在一种可能的实现方式中,所述第一报文携带第二标识位,所述第二标识位指示所述第一value包括所述第一目的地址,或者,所述第一value为指向所述第一目的地址的指针。
59、在一种可能的实现方式中,所述计算节点包括第一计算节点,所述计算节点包括:
60、处理模块,还用于根据所述第一哈希值,从哈希表摘要中确定是否存在对应的所述第一value,所述哈希表摘要包括部分的所述第一哈希表,所述第一计算节点存储所述哈希表摘要;
61、处理模块,还用于若存在,则确定所述第一value。
62、在一种可能的实现方式中,所述计算节点还包括第二计算节点,所述第二计算节点存储所述第一哈希表,所述计算节点包括:
63、收发模块,还用于若不存在,则将所述第一报文从第一计算节点转发至所述第二计算节点;
64、处理模块,还用于根据所述第一报文携带的所述第一key,生成所述第一哈希值;
65、处理模块,还用于根据所述第一哈希值,从所述第二计算节点存储的所述第一哈希表中确定所述第一value。
66、在一种可能的实现方式中,所述第一字段包括远程直接数据存取扩展传输报文头reth字段。
67、在一种可能的实现方式中,所述第一字段包括所述reth字段中的虚拟地址字段。
68、在一种可能的实现方式中,处理模块,还用于根据所述第一哈希值和所述第一哈希表,确定所述第一哈希值发生哈希冲突或者内存溢出;
69、处理模块,还用于根据所述第一哈希值,从第二哈希表中确定所述第一value,所述第二哈希表包括的哈希表项中哈希值为发生哈希冲突或内存溢出的哈希值。
70、第四方面,本技术实施例提出一种计算节点,包括:收发模块,和,处理模块;
71、收发模块,用于接收第三报文,所述第三报文请求写入第二数据,所述第三报文携带第二键key,所述第二key对应所述第二数据;
72、处理模块,用于根据所述第三报文,将所述第二数据写入所述存储节点,所述第二数据在所述存储节点的存储地址为第二目的地址;
73、处理模块,还用于根据所述第二目的地址和所述第三报文携带的所述第二key,更新所述计算节点保存的哈希表,更新后的所述哈希表包括第二哈希表项,所述第二哈希表项包括第二哈希值和第二value,其中,所述第二哈希值由所述第二key计算得到,所述第二value包括所述第二目的地址。
74、在一种可能的实现方式中,收发模块,还用于接收第四报文,所述第四报文用于请求写入第三数据,所述第四报文携带所述第二key,所述第四报文的目的互联网协议ip地址为第一存储节点,所述第三报文的目的ip地址为所述第一存储节点,所述第四报文的目的ip地址与所述第三报文的目的ip地址相同;
75、处理模块,还用于根据所述第三报文和所述第四报文,确定待写入的第四数据,所述第四数据由所述第二数据和所述第三数据聚合得到;
76、处理模块,还用于根据所述第四数据,将所述第四数据写入所述第一存储节点,所述第四数据在所述存储节点的存储地址为所述第二目的地址。
77、在一种可能的实现方式中,处理模块,还用于根据所述第三报文,在所述计算节点存储所述第二数据;
78、处理模块,还用于响应于检测到所述计算节点已存储所述第二数据,所述计算节点将所述第二数据写入到所述存储节点。
79、在一种可能的实现方式中,处理模块,还用于根据所述第二key,计算得到所述第二哈希值;
80、处理模块,还用于根据第一哈希表,确定所述第二哈希值未发生哈希冲突或内存溢出时,更新所述计算节点保存的所述第一哈希表;
81、处理模块,还用于根据所述第一哈希表,确定所述第二哈希值发生哈希冲突或内存溢出时,更新所述计算节点保存的第二哈希表,所述第二哈希表包括的哈希表项中哈希值为发生哈希冲突或内存溢出的哈希值,所述第二哈希表与所述第一哈希表不一致。
82、第五方面,本技术实施例提出一种计算节点,包括:通信接口,和,处理器;
83、通信接口,用于接收来自客户端的第一报文,所述第一报文请求读取第一数据,所述第一报文携带第一键key,所述第一key对应所述第一数据;
84、通信接口,还用于向存储节点发送第二报文,所述第二报文请求读取所述第一数据,所述第二报文携带第一目的地址,所述第一目的地址与所述第一key对应,所述第一目的地址对应的存储区域存储有所述第一数据。
85、在一种可能的实现方式中,
86、处理器,用于根据所述第一报文,得到所述第二报文,其中,修改所述第一报文的第一字段得到所述第二报文,修改前所述第一字段包括所述第一key,修改后所述第一字段包括所述第一目的地址。
87、在一种可能的实现方式中,
88、处理器,还用于根据所述第一报文携带的所述第一key,生成第一哈希值;
89、处理器,还用于根据所述第一哈希值,从第一哈希表中确定第一值value,其中,所述第一哈希表包括第一哈希表项,所述第一哈希表项包括所述第一value与所述第一哈希值;
90、处理器,还用于根据所述第一value,确定所述第一目的地址;
91、处理器,还用于将所述第一报文携带所述第一key替换为所述第一目的地址,得到所述第二报文。
92、在一种可能的实现方式中,所述第一value包括所述第一目的地址,或者,所述第一value为指向所述第一目的地址的指针。
93、在一种可能的实现方式中,所述第一报文携带第一标识位,所述第一报文的所述第一标识位指示根据所述第一报文生成所述第二报文。
94、在一种可能的实现方式中,所述第一报文携带第二标识位,所述第二标识位指示所述第一value包括所述第一目的地址,或者,所述第一value为指向所述第一目的地址的指针。
95、在一种可能的实现方式中,所述计算节点包括第一计算节点,所述计算节点包括:
96、处理器,还用于根据所述第一哈希值,从哈希表摘要中确定是否存在对应的所述第一value,所述哈希表摘要包括部分的所述第一哈希表,所述第一计算节点存储所述哈希表摘要;
97、处理器,还用于若存在,则确定所述第一value。
98、在一种可能的实现方式中,所述计算节点还包括第二计算节点,所述第二计算节点存储所述第一哈希表,所述计算节点包括:
99、通信接口,还用于若不存在,则将所述第一报文从第一计算节点转发至所述第二计算节点;
100、处理器,还用于根据所述第一报文携带的所述第一key,生成所述第一哈希值;
101、处理器,还用于根据所述第一哈希值,从所述第二计算节点存储的所述第一哈希表中确定所述第一value。
102、在一种可能的实现方式中,所述第一字段包括远程直接数据存取扩展传输报文头reth字段。
103、在一种可能的实现方式中,所述第一字段包括所述reth字段中的虚拟地址字段。
104、在一种可能的实现方式中,处理器,还用于根据所述第一哈希值和所述第一哈希表,确定所述第一哈希值发生哈希冲突或者内存溢出;
105、处理器,还用于根据所述第一哈希值,从第二哈希表中确定所述第一value,所述第二哈希表包括的哈希表项中哈希值为发生哈希冲突或内存溢出的哈希值。
106、第六方面,本技术实施例提出一种计算节点,包括:通信接口,和,处理器;
107、通信接口,用于接收第三报文,所述第三报文请求写入第二数据,所述第三报文携带第二键key,所述第二key对应所述第二数据;
108、处理器,用于根据所述第三报文,将所述第二数据写入所述存储节点,所述第二数据在所述存储节点的存储地址为第二目的地址;
109、处理器,还用于根据所述第二目的地址和所述第三报文携带的所述第二key,更新所述计算节点保存的哈希表,更新后的所述哈希表包括第二哈希表项,所述第二哈希表项包括第二哈希值和第二value,其中,所述第二哈希值由所述第二key计算得到,所述第二value包括所述第二目的地址。
110、在一种可能的实现方式中,通信接口,还用于接收第四报文,所述第四报文用于请求写入第三数据,所述第四报文携带所述第二key,所述第四报文的目的互联网协议ip地址为第一存储节点,所述第三报文的目的ip地址为所述第一存储节点,所述第四报文的目的ip地址与所述第三报文的目的ip地址相同;
111、处理器,还用于根据所述第三报文和所述第四报文,确定待写入的第四数据,所述第四数据由所述第二数据和所述第三数据聚合得到;
112、处理器,还用于根据所述第四数据,将所述第四数据写入所述第一存储节点,所述第四数据在所述存储节点的存储地址为所述第二目的地址。
113、在一种可能的实现方式中,处理器,还用于根据所述第三报文,在所述计算节点存储所述第二数据;
114、处理器,还用于响应于检测到所述计算节点已存储所述第二数据,所述计算节点将所述第二数据写入到所述存储节点。
115、在一种可能的实现方式中,处理器,还用于根据所述第二key,计算得到所述第二哈希值;
116、处理器,还用于根据第一哈希表,确定所述第二哈希值未发生哈希冲突或内存溢出时,更新所述计算节点保存的所述第一哈希表;
117、处理器,还用于根据所述第一哈希表,确定所述第二哈希值发生哈希冲突或内存溢出时,更新所述计算节点保存的第二哈希表,所述第二哈希表包括的哈希表项中哈希值为发生哈希冲突或内存溢出的哈希值,所述第二哈希表与所述第一哈希表不一致。
118、第七方面,本技术实施例提供了一种存储一个或多个计算机执行指令的计算机可读存储介质,当该计算机执行指令被处理器执行时,该处理器执行如前述第一方面或第二方面或第二方面中任意一种可能的实现方式。
119、第八方面,本技术实施例提供一种存储一个或多个计算机执行指令的计算机程序产品(或称计算机程序),当该计算机执行指令被该处理器执行时,该处理器执行前述第一方面或第二方面任意一种可能的实现方式。
120、第九方面,本技术提供了一种芯片系统,该芯片系统包括处理器,用于支持计算机设备实现上述方面中所涉及的功能。在一种可能的设计中,该芯片系统还包括存储器,该存储器,用于保存计算机设备必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包括芯片和其他分立器件。
121、第十方面,本技术实施例提供了一种芯片系统,该芯片系统包括至少一个处理器和通信接口,通信接口和至少一个处理器通过线路互联,至少一个处理器用于运行计算机程序或指令,以进行第一方面或第二方面的方法。
122、其中,芯片系统中的通信接口可以为输入/输出接口、管脚或电路等。
1.一种分布式存储方法,其特征在于,所述方法应用于计算节点,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
3.根据权利要求1或2所述的方法,其特征在于,所述根据所述第一报文,得到所述第二报文,包括:
4.根据权利要求3所述的方法,其特征在于,所述第一value包括所述第一目的地址,或者,所述第一value为指向所述第一目的地址的指针。
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述第一报文携带第一标识位,所述第一报文的所述第一标识位指示根据所述第一报文生成所述第二报文。
6.根据权利要求4或5所述的方法,其特征在于,所述第一报文携带第二标识位,所述第二标识位指示所述第一value包括所述第一目的地址,或者,所述第一value为指向所述第一目的地址的指针。
7.根据权利要求3-6中任一项所述的方法,其特征在于,所述计算节点包括第一计算节点,
8.根据权利要求7所述的方法,其特征在于,所述计算节点还包括第二计算节点,所述第二计算节点存储所述第一哈希表;
9.根据权利要求2-8中任一项所述的方法,其特征在于,所述第一字段包括远程直接数据存取扩展传输报文头reth字段。
10.根据权利要求9所述的方法,其特征在于,所述第一字段包括所述reth字段中的虚拟地址字段。
11.根据权利要求1-10中任一项所述的方法,其特征在于,根据所述第一哈希值,从所述第一哈希表中确定所述第一值value,包括:
12.一种分布式存储方法,其特征在于,所述方法应用于计算节点,所述方法包括:
13.根据权利要求12所述的方法,其特征在于,根据所述第三报文,将所述第二数据写入所述存储节点之前,所述方法还包括:
14.根据权利要求12或13所述的方法,其特征在于,根据所述第三报文,将所述第二数据写入所述存储节点,包括:
15.根据权利要求12-14中任一项所述的方法,其特征在于,根据所述第二目的地址和所述第三报文携带的所述第二key,更新所述计算节点保存的哈希表,包括:
16.一种计算节点,其特征在于,包括通信接口和处理器:
17.一种计算节点,其特征在于,包括处理器和存储器,
18.一种计算机可读存储介质,包括指令,其特征在于,当所述指令被处理器执行时,实现权利要求1-11,或者,权利要求12-15任一项所述的方法。
19.一种计算机程序产品,包括程序,其特征在于,当所述程序被处理器执行时,实现权权利要求1-11,或者,权利要求12-15任一项所述的方法。
20.一种芯片系统,其特征在于,所述芯片系统包括至少一个处理器,当程序指令在所述至少一个处理器中执行时,使得如权利要求1-11,或者,权利要求12-15中任一所述的方法被实现。
