功消息,其中,第二存储节点在存储的第一数据被第一计算节点更新为第一版本的前一版本的数据之后,响应第二计算节点发送的数据更新请求,并在第一数据被更新为第二更新数据后向第一计算节点返回数据更新成功消息。
[0169]具体的,第二存储节点在接收到跨版本的数据更新请求后,将向第二计算节点返回报错信息,以使第二计算节点获知当前的数据更新请求跨版本错误。
[0170]第二计算节点等待第二存储节点中的第一数据被更新为第一版本的前一版本的数据,其实现方式可以为:
[0171]其一,第二计算节点根据设定周期,周期性的向第二存储节点重发数据更新请求,当第二存储节点中的第一数据的版本被更新为第一版本的前一版本的数据后,第二计算节点重发的数据更新请求将被受理,第二存储节点将在第一数据被更新为版本为第一版本的数据后向第二计算节点返回数据更新成功消息。
[0172]其二,第二存储节点将主动在第一数据被第一计算节点更新为版本为第一版本的前一版本的数据后,向第二计算节点返回第一数据已被更新为第一版本的前一版本的数据的消息,第二计算节点将再次向第二存储节点发送数据更新请求,第二存储节点将受理该请求,执行数据更新。
[0173]通过上述两种方式,第二计算节点可以及时在第二存储节点存储的第一数据被更新为第一版本的前一版本的数据后,对第二存储节点中的第一数据进行更新操作,减少业务处理时间。
[0174]实际情况中,数据更新请求出现上述跨版本错误的情形,包括:
[0175]情形1,在新增存储节点来存储第一数据时,管理模块将指示第一计算节点采用后台拷贝的方式,将第一数据的历史版本拷贝在新增的存储节点中,在这种情况下,数据更新请求可能出现跨版本错误,下面予以具体说明。
[0176]不妨设第一分区视图中存储第一数据的节点为节点A(即为第一存储节点)、节点C,其中,节点A为主存储节点,节点C为尾节点。根据用户请求或者管理节点自动分配,新增节点D作为存储第一数据的节点,其中,将节点D作为节点A的子节点,以及节点C的父节点。
[0177]参照图7,管理节点分配第一计算节点进行后台拷贝,将节点C的历史版本数据拷贝至节点D。不妨设,新增节点D之前,数据的状态为{A[4],C[4]},则第一计算节点要将第一个版本的数据C[l]至第4个版本的数据C[4]拷贝至节点D(由于副本的一致性,A[i]=C[i],i 取 1、2、3、4)。
[0178]另外,在第一计算节点进行后台拷贝时,由于节点A、节点D、节点C上的数据尚未一致,管理节点不会生成第二分区视图,计算节点仍然按照第一分区视图进行数据处理。不妨设,第三计算节点在第一计算节点进行后台拷贝时,对数据进行了更新,数据的状态变为{A[5],C[5] |D[3]},其中,D[3]表明第一计算节点已经将数据的第三个版本数据C[3]拷贝至节点D。
[0179]当第一计算节点将将数据的第五个版本数据C[5]拷贝至节点D后,数据的状态变为{A[5],C[5]|D[5]},管理节点确定节点D的数据版本与节点C的数据版本一致后,生成第二分区视图,并将第二分区视图发送给包括第二计算节点在内的所有计算节点。
[0180]但是,不同计算节点接收到第二分区视图的时间有差异,例如,在?\时刻,第二计算节点接收到第二分区视图;在?\时刻之后的Τ 2时刻,第三计算节点尚未接收到第二分区视图,却接收到客户端的对数据的更新请求,第三计算节点将根据保存的第一分区视图对接点Α以及节点C中的数据进行更新。在T2时刻之后的T3时刻,第三计算节点根据第一分区视图将数据更新为{A[6],C[6]|D[5]}。
[0181]T3时刻之后的T4时刻,第二计算节点接收到客户端的对数据进行更新的请求,第二计算节点读取主存储节点Α的数据的版本为6,则向节点A发送写入数据的版本7的数据,写入成功后,根据第二分区视图数据的状态为{A[7],D[5],C[6]}。在1~4时刻之后的时刻,第二计算节点继续向节点D发送写入数据的版本7的数据,然而,节点D中数据的版本为5,将不接受跨版本的写请求,向第二计算节点返回报错信息,告知第二计算节点的写操作存在跨版本错误。
[0182]实际情况中,在之前的Τ3时刻,第三计算节点将数据更新为{A[6],C[6] |D[5]}之后,管理节点将指派第一计算节点根据第一分区视图再次进行后台拷贝,将C[6]拷贝节点Do而在T5时刻,第一计算节点的后台拷贝尚未完成,所以才出现第二计算节点的写操作跨版本的错误。第二计算节点可以周期性向节点D重发数据更新请求(即为写入数据的版本7的数据的请求),在Τ5时刻之后的Τ 6时刻,第一计算节点成功将C[6]拷贝节点D,第二计算节点的数据更新请求将变为合法,第二计算节点将继续在节点D以及节点D中进行数据更新,更新后数据的状态为{A[7],D[7],C[7]}。
[0183]在情形1中,采用本发明提供的技术方案,第二计算节点能够在第一计算节点根据第一分区视图进行的数据后台拷贝完成之前,根据第二分区视图对数据进行更新操作,减少了业务等待时间,减少业务处理耗时,提高系统效率。
[0184]情形2,删除存储节点节点的情形。
[0185]不妨设第一分区视图中存储数据的节点为节点A(即为第一存储节点)、节点B、节点C(即为第二存储节点),根据用户指示或管理节点自动调度,从中删除节点B,即不再将节点B作为数据的存储节点,管理节点将生成第二分区视图,并将第二分区视图发送至各计算节点。
[0186]但是,不同计算节点接收到第二分区视图的时间有差异,例如,在?\时刻,第二计算节点接收到第二分区视图;在?\时刻之后的Τ 2时刻,第一计算节点尚未接收到第二分区视图,却接收到客户端的对数据的更新请求,第一计算节点将根据保存的第一分区视图对接点Α以及节点C中的数据进行更新。不妨设,在1~2时刻之前,数据的状态为{A[2],B[2],C[2]},则第一计算节点的数据更新为写入数据的版本3的数据。
[0187]在T3时刻,节点Α中数据成功被第一计算节点更新为A[3],而节点C中数据更新尚未开始(或者尚未完成),第二计算节点接收客户端的对数据的更新请求,本发明实施例中,第二计算节点不用等待第一计算节点基于第一分区视图的数据更新操作结束,直接基于第二分区视图进行数据更新操作。
[0188]首先,第二计算节点读取主存储节点A中的数据的版本为版本3,则请求向节点A发送写入数据的版本4的数据的请求,写入成功后,根据第二分区视图继续在节点C中进行数据更新。然而,在第二计算节点向节点C发送写入数据的版本4的数据的请求时,第一计算节点在节点C中的数据更新操作尚未结束,因此,根据第二分区视图,数据的状态为{A[4],C[2]},第二计算节点的数据更新请求出现跨版本错误,第二计算节点将等待第一计算节点将节点C中的数据更新为C[3]后,继续在节点C中将数据更新为C[4]。
[0189]在情形2中,采用本发明提供的技术方案,第二计算节点能够在第一计算节点根据第一分区视图进行的数据更新完成之前,根据第二分区视图对数据进行更新操作,减少了业务等待时间,减少业务处理耗时,提高系统效率。
[0190]基于相同的技术构思,本发明实施例还提供了一种分布式系统中数据处理装置200,分布式系统包括管理节点、第一计算节点、数据处理装置200和多个存储节点,管理节点、第一计算节点、数据处理装置200和多个存储节点间通信,参照图8,数据处理装置200包括:
[0191]接收模块201,用于在第一计算节点根据第一分区视图使用第一更新数据对第一数据进行更新操作时,接收第二分区视图;
[0192]更新模块202,用于根据第二分区视图使用第二更新数据对第一数据进行更新操作;
[0193]其中,第一分区视图和第二分区视图是由管理节点生成的;第一分区视图用于指示第一时刻存储第一数据的至少两个存储节点;第二分区视图用于指示第二时刻存储第一数据的至少两个存储节点;其中,第一时刻与第二时刻不同;第一时刻存储第一数据的至少两个存储节点与第二时刻存储第一数据的至少两个存储节点不完全相同。
[0194]可选的,本发明实施例中,第一分区视图指示的存储第一数据的至少两个存储节点和第二分区视图指示的存储第一数据的至少两个存储节点中均包含第一存储节点;
[0195]更新模块202,具体用于:
[0196]与第一计算节点竞争第一存储节点的写权限;
[0197]在获得第一存储节点的写权限后,使用第二更新数据对第一存储节点中的第一数据进行更新操作。
[0198]可选的,本发明实施例中,第一存储节点为第一分区视图指示的存储第一数据的至少两个存储节点中除主存储节点之外的存储节点,且第一存储节点为第二分区视图指示的存储第一数据的至少两个存储节点中的主存储节点;
[0199]更新模块202具体用于:
[0200]根据第二分区视图确定存储第一数据的主存储节点为第一存储节点;
[0201]向第一存储节点发送对第一数据进行更新操作的请求;
[0202]其中,第一计算节点在对第一分区视图指示的存储第一数据的主存储节点中的第一数据进行更新操作之后,第一计算节点向第一存储节点发送对第一数据进行更新操作的请求;第一存储节点将对第一数据进行更新操作的写权限授予先接收到的对第一数据进行更新操作的请求对应的计算节点。
[0203]可选的,本发明实施例中,第二分区视图指示的存储第一数据的至少两个存储节点包括第一存储节点以及第二存储节点;
[0204]更新模块202具体用于:
[0205]使用第二更新数据对第一存储节点存储的第一数据进行更新,形成第一存储节点中的第一版本的数据;
[0206]确定第二存储节点保存的第一数据对应的版本低于第一版本的前一版本;
[0207]在第二存储节点保存的第一数据被更新为第一版本的前一版本的数据之后,使用第二更新数据对第二存储节点中的第一版本的前一版本的数据进行更新,形成第二存储节点中的第一版本的数据。
[0208]可选的,本发明实施例中,更新模块202具体用于:
[0209]向第二存储节点发送数据更新请求,数据更新请求用于请求以第二更新数据作为第一版本的数据对第一数据进行更新;
[0210]接收第二存储节点返回的报错信息,报错信息表明第二存储节点中的第一数据对应的版本低于第一版本的前一版本;
[0211]在接收报错信息后设定时长后,再次向第二存储节点发送数据更新请求;
[0212]接收第二存储节点返回的数据更新成功消息,其中,第二存储节点在存储的第一数据被第一计算节点更新为第一版本的前一版本的数据之后,响应数据处理装置发送的数据更新请求,并在第一数据被更新为第二更新数据后向第一计算节点返回数据更新成功消息。
[0213]本实施例中的数据处理装置200与图3对应的数据处理方法是基于同一发明构思下的两个方面,在前面已经对方法的实施过程作了详细的描述,所以本领域技术人员可根据前述描述清楚地了解本实施例中的数据处理装置200的结构及实施过程,为了说明书的简洁,在此就不再赘述了。
[0214]基于相同的发明构思,本发明实施例还提供一种分布式系统中计算节点300,应用于分布式系统中,分布式系统包括管理节点、第一计算节点、计算节点300和多个存储节点,管理节点、第一计算节点、计算节点300和多个存储节点间通信,参照图9,计算节点300包括:处理器301以及输入输出接口 302。
[0215]其中,处理器301,与输入输出接口 302通信,用于在第一计算节点根据第一分区视图使用第一更新数据对第一数据进行更新操作时,指示输入输出接口 302接收第二分区视图;
[0216]输入输出接口 302用于根据处理器301指示接收第二分区视图;
[0217]输入输出接口 302还用于接收第二更新数据;
[0218]处理器301还用于根据第二分区视图使用第二更新数据对第一数据进行更新操作;
[0219]其中,第一分区视图和第二分区视图是由管理节点生成的;第一分区视图用于指示第一时刻存储第一数据的至少两个存储节点;第二分区视图用于指示第二时刻存储第一数据的至少两个存储节点;其中,第一时刻与第二时刻不同;第一时刻存储第一数据的至少两个存储节点与第二时刻存储第一