数据访问方法、装置、客户端及存储介质与流程

文档序号:26994693发布日期:2021-10-19 21:26阅读:90来源:国知局
数据访问方法、装置、客户端及存储介质与流程

1.本发明涉及分布式存储领域,具体而言,涉及一种数据访问方法、装置、客户端及存储介质。


背景技术:

2.分布式存储系统根据实际业务需求的不同,其对于数据一致性的要求也有区别,例如,数据一致性通常包括强一致性、弱一致性、最终一致性等多种不同程度的一致性。强一致性指在任何一次读都能读到最近一次写的数据,弱一致性指容许读数据时读到的数据可以是最近一次写的数据,也可以是最近一次之前写的数据,最终一致性是弱一致性的特殊形式,指在没有新的更新的条件下,最终所有读取的数据都是最后写入的值。
3.现有技术中,通常采用两阶段提交2pc(two

phase commit protocol,2pc),三阶段提交3pc(three

phase commit protocol,3pc)等方法来保证数据的强一致性,这些方法虽然可以保证数据的强一致性,但是需要牺牲一定的性能,因而,在适用于要求高性能的应用场景时具有一定的局限性。


技术实现要素:

4.本发明的提供了一种数据访问方法、装置、客户端及存储介质,其在向每一存储节点写待写数据时,每一存储节点中同时存储有上一次写入的旧数据,同时根据不同的写数据的返回结果进行不同的处理,既保证了数据写入的强一致性,又能保证高性能的要求。
5.为了实现上述目的,本发明采用的技术方案如下:
6.第一方面,本发明提供一种数据访问方法,应用于分布式存储系统中的客户端,所述客户端与分布式存储系统中的多个存储节点通信连接,所述方法包括:获取待写数据,其中,所述待写数据包括以纠删码组织而成的多个目标数据块,每一所述目标数据块需要写入所述每一所述存储节点,且每一所述存储节点包括上一次写入的旧数据;向每一所述存储节点发送写请求,以使每一所述存储节点基于各自接收的所述写请求写对应的目标数据块并向所述客户端反馈写响应消息;若反馈写成功的写响应消息的目标存储节点的个数大于预设个数,则根据所述目标存储节点的个数向所述目标存储节点发送删除命令,以使所述目标存储节点根据各自接收的所述删除命令将各自的旧数据删除。
7.第二方面,本发明提供一种数据访问装置,应用于分布式存储系统中的客户端,所述客户端与分布式存储系统中的多个存储节点通信连接,所述装置包括:获取模块,用于获取待写数据,其中,所述待写数据包括以纠删码组织而成的多个目标数据块,每一所述目标数据块需要写入所述每一所述存储节点,且每一所述存储节点包括上一次写入的旧数据;写处理模块,用于向每一所述存储节点发送写请求,以使每一所述存储节点基于各自接收的所述写请求写对应的目标数据块并向所述客户端反馈写响应消息;写处理模块,还用于若反馈写成功的写响应消息的目标存储节点的个数大于预设个数,则根据所述目标存储节点的个数向所述目标存储节点发送删除命令,以使所述目标存储节点根据各自接收的所述
删除命令将各自的旧数据删除。
8.第三方面,本发明提供一种客户端,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现如上述的数据访问方法。
9.第四方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述的数据访问方法。
10.相对于现有技术,本发明在向每一存储节点发送由待写数据按照纠删码组织而成的各目标数据块时,每一存储节点存储有上一次写入的旧数据,客户端根据多个存储节点反馈的写成功的写响应消息的个数确定删除命令,以便存储节点根据删除命令进行对应的处理,由此实现了根据不同的写数据的返回结果进行不同的处理,既保证了数据写入的强一致性,又能保证高性能的要求。
附图说明
11.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
12.图1为本发明实施例提供的应用场景的示例图。
13.图2为本发明实施例提供的客户端的方框示意图。
14.图3为本发明实施例提供的一种数据访问方法的流程示意图。
15.图4为本发明实施例提供的分布式系统中条带的示例图。
16.图5为本发明实施例提供的另一种数据访问方法的流程示意图。
17.图6为本发明实施例提供的另一种数据访问方法的流程示意图。
18.图7为本发明实施例提供的另一种数据访问方法的流程示意图。
19.图8为本发明实施例提供的另一种数据访问方法的流程示意图。
20.图9为本发明实施例提供的另一种数据访问方法的流程示意图。
21.图10为本发明实施例提供的数据访问装置的方框示意图。
22.图标:10

客户端;11

处理器;12

存储器;13

总线;14

通信接口;20

存储节点;30

用户请求端;100

数据访问装置;110

获取模块;120

写处理模块;130

读处理模块。
具体实施方式
23.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
24.因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
25.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一
个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
26.在本发明的描述中,需要说明的是,若出现术语“上”、“下”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
27.此外,若出现术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
28.需要说明的是,在不冲突的情况下,本发明的实施例中的特征可以相互结合。
29.请参考图1,图1为本发明实施例提供的应用场景的示例图,图1中,分布式存储系统包括客户端10和多个存储节点20,客户端10与用户请求端30通信,用户请求端30发送数据访问请求至客户端10,数据访问请求包括写数据和读数据,当用户请求端30向客户端10发送写数据请求时,客户端10将接收的写数据利用纠删码的方式组织,形成对应的多个数据块,然后将每一数据块发送至每一存储节点20,纠删码是一种数据保护方法,它将数据分割成片段,把冗余数据块扩展、编码,并将其存储在不同的存储节点,纠删码提供的保护可以用下面这个简单的公式来表示:n=k+m。变量“k”代表原始数据或符号的值。变量“m”代表故障后添加的提供保护的额外或冗余符号的值。变量“n”代表纠删码过程后创建的符号的总值。以4+2的纠删策略为例,客户端10将待写数据分成4个原始数据块,会有2个额外的数据块(变量m)被添加到4个原始数据块(变量k)中。这6个数据块(变量n)会遍布6个存储节点20中。而待写数据写入6个存储节点20后,可以根据6个存储节点20中的对应的6个数据块中任意的4个数据块重建。
30.对于每一数据块对应的存储地址,存储节点20均存储了上一次写入的旧数据,若每一存储节点20写入各自的数据块均写成功,则客户端10向每一存储节点20发送删除命令,以使每一存储节点20将其存储的旧数据删除,每一存储节点20无需向客户端10反馈删除结果,此时客户端10向用户请求端30反馈数据写入成功;若只有部分存储节点20写入各自的数据块写入成功,若写入成功的存储节点20的个数小于预设个数(此处的预设个数与采用的纠删码的策略有关,是可以恢复原始数据的纠删码的数据块的最小个数,例如对于4+2纠删策略而言,预设个数为4),则客户端10判定本次写入数据失败,并向用户请求端30反馈数据写入失败,若写入成功的存储节点20的个数大于或者等于预设个数,则客户端10向写入成功的存储节点20的存储节点发送删除命令,并等待删除结果,若反馈删除结果为删除成功的存储节点20的个数小于预设个数,则客户端10判定本次写入数据失败,并向用户请求端30反馈数据写入失败,若反馈删除结果为删除成功的存储节点20的个数大于或者等于预设个数,则客户端10判定本次写入数据成功,并向用户请求端30反馈数据写入成功。
31.客户端10可以是一个单独的计算机设备,也可以是运行于任一存储节点的软件模块。
32.存储节点20用于提供存储访问服务的存储设备,可以是、但不限于存储服务器、存储阵列或者二者的组合。
33.用户请求端30是用户访问分布式存储系统的请求发起端,用户请求端30可以是、但不限于主机、笔记本电脑、平板电脑、移动终端、服务器等计算机设备。
34.本发明实施例还给出了当客户端10为一个单独的计算机设备时的方框示意图,请
参照图2,图2为本发明实施例提供的客户端10的方框示意图,客户端10包括处理器11、存储器12、总线13、通信接口14。处理器11、存储器12通过总线13连接,处理器11通过通信接口14与外部设备通信。
35.处理器11可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器11中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器11可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
36.存储器12用于存储程序,例如本发明实施例中的数据访问装置100,数据访问装置100均包括至少一个可以软件或固件(firmware)的形式存储于存储器12中的软件功能模块,处理器11在接收到执行指令后,执行所述程序以实现本发明实施例中的数据访问方法。
37.存储器12可能包括高速随机存取存储器(ram:random access memory),也可能还包括非易失存储器(non

volatile memory)。可选地,存储器12可以是内置于处理器11中的存储装置,也可以是独立于处理器11的存储装置。
38.总线13可以是isa总线、pci总线或eisa总线等。图2仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
39.在图1和图2的基础上,本发明实施例还提供了一种应用于图1和图2中客户端10的数据访问方法,请参照图3,图3为本发明实施例提供的一种数据访问方法的流程示意图,该方法包括以下步骤:
40.步骤s100,获取待写数据,其中,待写数据包括以纠删码组织而成的多个目标数据块,每一目标数据块需要写入每一存储节点,且每一存储节点包括上一次写入的旧数据。
41.在本实施例中,用户请求端30将需要写的原始数据发送至客户端10,客户端10将原始数据按照纠删码进行组织,得到多个目标数据块,每一目标数据块写入一个存储节点。
42.在本实施例中,分布式存储系统中的多个存储节点的个数满足纠删策略且正常的存储节点的个数。例如,纠删策略为4+2,则分布式存储系统中正常的存储节点的个数至少是4,最多是6,若正常的存储节点的个数小于4,则此时分布式存储系统无法正常提供存储功能,当然也无法对分布式存储系统中的数据进行访问。
43.作为一种具体实施方式,每一个存储节点20中的存储空间可以划分为多个存储单元,分布式存储系统包括多个条带,每一条带包括多个来自不同存储节点20的存储单元,每一个条带存储同一个纠删码分组的多个目标数据块,请参照图4,图4为分布式系统中条带的示例图。图4中,一共有6个存储节点a~f,每一存储节点包括4个存储单元:1#存储单元~4#存储单元,每一个存储节点的2#存储单元组成2#条带,每一个存储单元最多可以存储两份数据,这两份数据可以分别是本次写入的数据和上一次写入的数据,例如,存储节点a的2#存储单元上一次写入的数据为a1,本次写入的数据为a2,则此时2#存储单元中包括两份数据:旧数据a1和新数据a2,其他存储节点的存储单元也与之类似。
44.步骤s110,向每一存储节点发送写请求,以使每一存储节点基于各自接收的写请求写对应的目标数据块并向客户端反馈写响应消息。
45.在本实施例中,作为一种具体实施方式,客户端10向每一存储节点发送写请求,该
写请求中可以携带需要写入每一存储节点的目标数据块及对应的地址,例如,客户端10向存储节点a发送写请求,该写请求包括待写数据a及写地址addr1,客户端10向存储节点b发送写请求,该写请求包括待写数据b及写地址addr2,当然,数据a和数据b是属于同一个纠删码分组中的两个目标数据块。
46.步骤s120,若反馈写成功的写响应消息的目标存储节点的个数大于预设个数,则根据目标存储节点的个数向目标存储节点发送删除命令,以使目标存储节点根据各自接收的删除命令将各自的旧数据删除。
47.在本实施例中,写响应消息为存储节点基于写请求写入目标数据块、并向客户端反馈的写响应消息,该写响应消息包括两种中的一种:写成功和写失败,其中,写成功表征存储节点写入目标数据块成功,写失败可以是存储节点写入目标数据块失败,或者是反馈写响应消息超时等异常情况。目标存储节点为针对写请求反馈了写成功的写响应消息的存储节点。
48.在本实施例中,预设个数与采用的纠删码的策略有关,是可以恢复原始数据的纠删码的数据块的最小个数,例如,对于4+2纠删策略而言,预设个数为4。
49.在本实施例中,在目标存储节点的个数大于预设个数的前提下,根据目标存储节点的个数的不同,对应的删除命令也不一样,作为一种具体实施方式,删除命令至少包括两种:(1)需要反馈删除命令执行结果的第一删除命令;(2)不需要反馈删除命令执行结果的第二删除命令。删除命令用于将旧数据删除,即将旧数据占用的存储空间释放,由此提高了存储空间的利用率。
50.需要说明的是,当待写数据写入的存储节点的存储空间时,该存储空间从未写入过数据或者当前旧数据删除成功时,在此情况下,存储节点中并不存在旧数据,也就不需要删除旧数据,当下一次再次向该存储空间写入数据时,本次写入的待写数据就变成了旧数据。
51.本发明实施例提供的上述方法,在向每一存储节点发送由待写数据按照纠删码组织而成的各目标数据块时,每一存储节点存储有上一次写入的旧数据,客户端根据多个存储节点反馈的写成功的写响应消息的个数确定删除命令,以便存储节点根据删除命令进行对应的处理,由此实现了根据不同的写数据的返回结果进行不同的处理,既保证了数据写入的强一致性,又能保证高性能的要求。
52.在图3的基础上,本发明实施例还提供了一种删除旧数据的具体处理方法,请参照图5,图5为本发明实施例提供的另一种数据访问方法的流程示意图,步骤s120包括以下子步骤:
53.子步骤s1201,若目标存储节点的个数等于多个存储节点的个数,则向目标存储节点发送第一删除命令,以使目标存储节点基于第一删除命令将本地的旧数据删除,其中,第一删除命令用于指示目标存储节点不需要返回删除结果。
54.在本实施例中,在实际的应用场景中,根据第一删除命令进行删除处理的流程也可以称为release流程,该流程中,目标存储节点不需要返回删除结果,即该流程为异步流程,客户端可以直接向用户请求端返回写数据成功,由于正常写数据的过程,数据写入正常为常态,也就是说大部分都是release流程,因而可以加快响应速度,提高分布式存储系统的写入性能。
55.子步骤s1202,若目标存储节点的个数小于多个存储节点的个数,则向目标存储节点发送第二删除命令,以使目标存储节点基于第二删除命令将本地的旧数据删除,其中,第二删除命令用于指示目标存储节点需要返回删除结果。
56.在本实施例中,根据第二删除命令进行删除处理的流程也可以称为commit流程,该流程中,目标存储节点需要返回删除结果,即该流程为同步流程,客户端必须等待删除结果,根据删除结果判断写数据是否成功,最终再返回用户请求端30,由于写数据的过程中,commit流程出现的比较少,因而对于分布式存储系统性能的影响是有限的。
57.在本实施例中,删除结果包括删除成功和删除失败中的一种,删除成功表征对应的存储节点中的旧数据删除成功,删除失败表征对应的存储节点中的旧数据删除失败。
58.本发明实施例提供的上述方法,对目标存储节点的个数等于多个存储节点的个数的情况和目标存储节点的个数小于多个存储节点的个数的情况分别进行删除处理,避免了不必要的删除结果的反馈,减少了不必要的交互,减少了对系统性能的影响。
59.在本实施例中,客户端10向目标存储节点发送第二删除命令后,为了使客户端10在不同情况下给予用户请求端30及时的数据写入是否成功的反馈,本发明实施例还提供了一种具体判断数据是否写入成功的实现方式,请参照图6,图6为本发明实施例提供的另一种数据访问方法的流程示意图,该方法包括以下步骤:
60.步骤s1203,若返回的删除结果为删除成功的存储节点的个数大于或者等于预设个数,则判定待写数据写入成功。
61.在本实施例中,返回的删除结果为删除成功的存储节点的个数大于或者等于预设个数则表征旧数据删除成功,由于待写数据写入成功,此时,待写数据即为正确的、一致性的数据,如果此时读待写数据所在的存储单元中的数据,则读取的是当前最新写入的待写数据。
62.步骤s1204,若返回的删除结果为删除成功的存储节点的个数小于预设个数,则判定待写数据写入失败。
63.在本实施例中,返回的删除结果为删除成功的存储节点的个数小于预设个数时,则可能会出现如下状况:存储新数据的存储节点的个数等于存储节点个数,存储旧数据的存储节点的个数等于存储节点个数,且二者均大于预设个数,此时,如果客户端10收到读命令,则客户端10不能正确辨识此处新数据为正确数据还是旧数据为正确数据,为了避免出现该情况的发生,保证读取到的数据的一致性,则该情况下客户端10判定待写数据写入失败。
64.在图4的基础上,若目标存储节点的个数等于多个存储节点的个数,本发明实施例还给出了一种对此情况下数据写入成功的判定方式,请参照图7,图7为本发明实施例提供的另一种数据访问方法的流程示意图,步骤s120还包括以下子步骤:
65.步骤s1205,若目标存储节点的个数等于存储节点的个数,则判定待写数据写入成功。
66.在本实施例中,若每一存储节点的均写入待写数据成功,则此时客户端10可以直接向用户请求端30返回写入待写数据成功,删除结果是否成功不影响客户端结果,在将来某个时刻,再次向该条带写入数据时,会发生覆盖写,旧数据也会被删除,一旦判断待写数据写入成功,就可以向用户请求端30返回写入成功,提高了分布式存储系统写响应的性能。
67.为了将存储至分布式存储系统中的数据正确读出,并保证读取的数据始终是正确和一致的,本发明实施例还提供了一种读数据的处理方法,请参照图8,图8为本发明实施例提供的另一种数据访问方法的流程示意图,该方法包括以下步骤:
68.步骤s200,接收读取待读数据的待读命令,待读命令与至少一个存储节点对应,其中,每一存储节点中存在新数据和旧数据,新数据为最近一次写入的数据,旧数据为与最近一次相邻的上一次写入的数据。
69.在本实施例中,作为一种具体实施方式,待读命令可以包括待读地址,客户端10根据待读地址确定待读数据对应的待读条带,在根据待读条带确定与待读命令对应的存储节点及存储节点内的待读偏移地址。
70.在本实施例中,与待读命令对应的存储节点的个数可以与存储节点的个数相同,也可以小于存储节点的个数、且大于或者等于预设个数,例如,以4+2纠删方案为例,与待读命令对应的存储节点的个数可以是6个、也可以是5个,但至少是4个。
71.在本实施例中,与待读命令对应的存储节点中可以同时存在新数据和旧数据、也可以只存在新数据或者只存在旧数据。例如,与待读命令对应的存储节点有6个:a~f,其中,a~d存储新数据和旧数据,e和f存储有新数据,旧数据已被删除,或者a~f中均存在新数据和旧数据。
72.需要说明的是,作为一种具体实施方式,也可以为新旧数据分别设置不同版本号进行表示,例如,旧数据的版本号为0,新数据的版本号为1,或者旧数据的版本号为1,新数据的版本号为2,对于任意条带,各存储节点中版本号相同的数据块为同一组纠删码。
73.步骤s210,若至少一个存储节点中存储新数据的待读存储节点的个数大于或者等于预设个数,则根据从待读存储节点中读取的新数据生成待读数据。
74.在本实施例中,若存储新数据的存储节点的个数大于或者等于预设个数,则意味着可以根据新数据通过纠删码的解码对待读数据进行还原,由于新数据为最近一次写入的数据,此时应根据新数据生成待读数据,并返回用户请求端30。
75.步骤s220,若至少一个存储节点中存储新数据的待读存储节点的个数小于预设个数、且至少一个存储节点中存储旧数据的待读存储节点的个数大于或者等于预设个数,则根据从待读存储节点中读取的旧数据生成待读数据。
76.在本实施例中,若存储新数据的存储节点的个数小于预设个数,则意味着不能根据新数据通过纠删码的解码对待读数据进行还原,很可能是新数据写入失败,或者存储新数据的存储节点出现异常,此时,若至少一个存储节点中存储旧数据的待读存储节点的个数大于或者等于预设个数,则可以根据旧数据通过纠删码的解码对待读数据进行还原,在新数据写入失败或者存储新数据的存储节点出现异常时,此时旧数据即为当前正确且一致的数据,故根据旧数据生成待读数据,并返回用户请求端30。
77.本发明实施例提供的上述方法,在可以根据新数据生成待读数据时,读取的待读数据为最新写入的数据,在无法根据新数据生成待读数据时,若可以根据旧数据生成待读数据,则读取的待读数据为最新写入的正确的数据,由此保证读取的待读数据成功时待读数据总是正确的和一致的。
78.需要说明的是,对于同一个存储单元,存储节点除了同时存在新数据和旧数据这一种情形之外,还可能存在至少另外两种情形:(1)只存在新数据的情形(新数据写入成功,
且旧数据删除成功时),当存储节点只有新数据时,若至少一个存储节点中存储新数据的待读存储节点的个数大于或者等于预设个数,则根据从待读存储节点中读取的新数据生成待读数据;否则读取待读数据失败;(2)只存在旧数据的情形(旧数据是存储单元初次写入的数据,本次新数据写入失败),当存储节点只有旧数据时,若至少一个存储节点中存储旧数据的待读存储节点的个数大于或者等于预设个数,则根据从待读存储节点中读取的旧数据生成待读数据;否则读取待读数据失败。
79.在图8的基础上,本发明实施例还给出了一种读取待读数据失败的判定方式,请参照图9,图9为本发明实施例提供的另一种数据访问方法的流程示意图,该方法还包括步骤s230:
80.步骤s230,若至少一个存储节点中存储新数据的待读存储节点的个数小于预设个数、且至少一个存储节点中存储旧数据的待读存储节点的个数小于预设个数,则判定读取待读数据失败。
81.为了更清楚地说明访问数据的各种情况,本发明实施例提供以4+2的纠删策略、存储节点有6个,分别为:node1,node2,node3,node4,node5,node6为例进行分别说明。
82.场景1:
83.node1,node2已经异常,node3,node4,node5,node6正常,此时,分布式存储系统可以正常读写。
84.第一次写待写条带,node3,node4,node5,node6写入数据的版本号为1,1,1,1。
85.第二次写该条带,node5,node6发生异常,此时,不满足纠删条件(此处的纠删条件为正常存储节点的个数大于或者等于预设个数),即正常存储节点的个数为2,小于预设个数4,写失败。
86.此时node3,node4该条带版本号有两组,旧1,1,新2,2。node5,node6没有数据更新,该条带版本号依旧是1,1。node5,node6恢复正常后,由于2版本号数据不满足纠删条件,即版本号2的存储就节点的个数为2,小于预设个数4,客户端10应该读取旧版本号为1数据。6个节点的数据分布版本号可能如下表1:
87.表1
88.node1node2node3node4node5node6xx1111xx22??
89.其中,x:表示未写入;?:表示未知版本号(后续描述中的x和?含义与之相同,不再赘述)。
90.场景2:
91.node1,node2,node3,node4,node5,node6正常,此时分布式存储系统能读写。
92.第一次写某个条带,node1,node2,node3,node4,node5,node6版本号为1,1,1,1,1,1。
93.第二次写该条带,node5,node6发生异常,写数据成功的只有node1,node2,node3,node4,写成功的存储节点的个数3大于预设个数4,则此时至少存在以下三种情况:
94.(1)如果客户端10发送的存储节点数和返回成功的存储节点数一致,则客户端10写成功,同时向每个存储节点发送一个第一删除命令,每个存储节点收到该第一删除命令
后,通过bsm(bsm称为块存储管理系统,用于管理文件、条带及数据分配等,每一个存储节点均运行有bsm,负责本存储节点的文件、条带的管理及数据分配等)将旧版本数据删除,释放旧版本数据占用的存储空间。该过程为异步,是否释放成功不影响客户端结果,在将来某个时刻,该条带发生覆写时,旧版本数据也会释放。此时,6个节点的数据分布版本号可能如下表2:
95.表2
96.node1node2node3node4node5node6222222xxxxxx
97.(2)如果客户端10发送的存储节点数大于返回成功的存储节点数,且满足纠删条件,即返回成功的存储节点数大于预设个数,则客户端10向每个存储节点发送一个删除成功的确认消息,每个存储节点收到该确认消息后,bsm模块将旧版本数据删除,释放空间。该过程为同步过程,客户端需要响应每个节点消息。此时可能存在两种情况:
98.(2.a)如果客户端收到的确认消息不满足纠删条件,即删除成功的存储节点的个数小于预设个数,则客户端判定写数据失败。
99.(2.b)如果客户端收到的确认消息满足纠删条件,即删除成功的存储节点的个数大于或者等于预设个数,则客户端判定写数据成功。
100.6个节点的数据分布版本号可能如下表3:
101.表3
102.node1node2node3node4node5node6222211xxxx??
103.(3)如果客户端返回写入成功的存储节点数不满足纠删条件,即返回写入成功的存储节点数小于预设个数,则客户端判定写数据失败。
104.6个节点的数据分布版本号可能如下表4:
105.表4
106.node1node2node3node4node5node61212112x2x??
107.需要说明的是,若写数据失败,客户端10进入异常处理流程。node5,node6恢复正常后,无论读取哪个版本号,都不影响后续流程。数据恢复时,读取全部版本号数据,选取满足纠删条件的最新版本号数据,将异常存储节点的数据恢复到一致。
108.为了执行上述实施例及各个可能的实施方式中数据访问方法的相应步骤,下面给出一种数据访问装置100的实现方式。请参照图10,图10示出了本发明实施例提供的数据访问装置100的方框示意图。需要说明的是,本实施例所提供的数据访问装置100,其基本原理及产生的技术效果和上述实施例相同,为简要描述,本实施例部分未提及指出。
109.数据访问装置100包括获取模块110、写处理模块120及读处理模块130。
110.获取模块110,用于获取待写数据,其中,待写数据包括以纠删码组织而成的多个
目标数据块,每一目标数据块需要写入每一存储节点,且每一存储节点包括上一次写入的旧数据。
111.写处理模块120,用于向每一存储节点发送写请求,以使每一存储节点基于各自接收的写请求写对应的目标数据块并向客户端反馈写响应消息。
112.写处理模块120,还用于若反馈写成功的写响应消息的目标存储节点的个数大于预设个数,则根据目标存储节点的个数向目标存储节点发送删除命令,以使目标存储节点根据各自接收的删除命令将各自的旧数据删除。
113.作为一种具体实施方式,写处理模块120具体用于:若目标存储节点的个数等于多个存储节点的个数,则向目标存储节点发送第一删除命令,以使目标存储节点基于第一删除命令将本地的旧数据删除,其中,第一删除命令用于指示目标存储节点不需要返回删除结果;若目标存储节点的个数小于多个存储节点的个数,则向目标存储节点发送第二删除命令,以使目标存储节点基于第二删除命令将本地的旧数据删除,其中,第二删除命令用于指示目标存储节点需要返回删除结果。
114.作为一种具体实施方式,写处理模块120具体还用于:若返回的删除结果为删除成功的存储节点的个数大于或者等于预设个数,则判定待写数据写入成功;若返回的删除结果为删除成功存储节点的个数小于预设个数,则判定待写数据写入失败。
115.作为一种具体实施方式,写处理模块120具体还用于:若目标存储节点的个数等于存储节点的个数,则判定待写数据写入成功。
116.读处理模块130,用于:接收读取待读数据的待读命令,待读命令与至少一个存储节点对应,其中,每一存储节点中存在新数据和旧数据,新数据为最近一次写入的数据,旧数据为与最近一次相邻的上一次写入的数据;若至少一个存储节点中存储新数据的待读存储节点的个数大于或者等于预设个数,则根据从待读存储节点中读取的新数据生成待读数据;若至少一个存储节点中存储新数据的待读存储节点的个数小于预设个数、且至少一个存储节点中存储旧数据的待读存储节点的个数大于或者等于预设个数,则根据从待读存储节点中读取的旧数据生成待读数据。
117.作为一种具体实施方式,读处理模块130还用于:若至少一个存储节点中存储新数据的待读存储节点的个数小于预设个数、且至少一个存储节点中存储旧数据的待读存储节点的个数小于预设个数,则判定读取待读数据失败。
118.本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述的数据访问方法。
119.综上所述,本发明实施例提供了一种数据访问方法、装置、客户端及存储介质,应用于分布式存储系统中的客户端,客户端与分布式存储系统中的多个存储节点通信连接,所述方法包括:获取待写数据,其中,待写数据包括以纠删码组织而成的多个目标数据块,每一目标数据块需要写入每一存储节点,且每一存储节点包括上一次写入的旧数据;向每一存储节点发送写请求,以使每一存储节点基于各自接收的写请求写对应的目标数据块并向客户端反馈写响应消息;若反馈写成功的写响应消息的目标存储节点的个数大于预设个数,则根据目标存储节点的个数向目标存储节点发送删除命令,以使目标存储节点根据各自接收的删除命令将各自的旧数据删除。相对于现有技术,本发明实施例在向每一存储节点发送由待写数据按照纠删码组织而成的各目标数据块时,每一存储节点存储有上一次写
入的旧数据,客户端根据多个存储节点反馈的写成功的写响应消息的个数确定删除命令,以便存储节点根据删除命令进行对应的处理,由此实现了根据不同的写数据的返回结果进行不同的处理,既保证了数据写入的强一致性,又能保证高性能的要求。
120.以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1