一种分布式存储系统中的数据更新方法及装置与流程

文档序号:15081238发布日期:2018-08-04 10:31阅读:131来源:国知局

本发明涉及分布式系统领域,更具体的说,是涉及一种分布式存储系统中的数据更新方法及装置。



背景技术:

分布式存储系统,就是将数据分散存储在多台独立的设备上。更具体的可以包括分布式文件系统、分布式数据库、分布式半结构化存储系统、分布式块存储系统等等,这些系统面向不同的存储应用,各自有不同的访问模式,在很多场合并不能相互替换使用。同时这些系统也存在很多相同或相似的地方,例如:副本的分布信息定位,副本的更新维护,服务器节点的信息维护与管理等等。这里的副本指的是数据在不同服务器节点上的拷贝数据。

现有技术中,常见的分布式系统对于多副本的数据进行更新一般可以采用强一致方式,即是等某个数据对应的所有副本都更新成功才算数据更新成功,当有副本更新失败,立即在其它服务器节点上新建副本并完成更新。或者也可以采用超过半数的多写多读方式,即对于数据写入,要求超过半数的副本都写入成功才能向客户端返回成功消息,相应的数据读取也需要同时对多个副本进行读取,然后将超过半数且一致的数据作为最终结果。

然而,现有技术中的上述方法,在分布式存储系统异常的情况下,就也要求数据必须切分的足够细,即是每一个副本都比较小才能随时新建一个副本,这对于分布式存储系统来讲不具有通用性,而如果采用超过半数的多写多读方式,又会增加数据更新的开销,不能保证数据多个副本之间的一致性,会降低分布式存储系统的性能。



技术实现要素:

有鉴于此,本发明提供了一种分布式存储系统中的数据更新方法及装置,以克服现有技术中在进行数据更新时会增加开销且不能保证多个副本之间的数据一致性的问题。

为实现上述目的,本发明提供如下技术方案:

一种分布式存储系统中的数据更新方法,其特征在于,包括:

当前服务器节点接收客户端发送的待更新数据;当前服务器节点为所述待更新数据递增分配唯一的版本号,并从元数据信息存储库中获取所述待更新数据的多个副本所在的多个副本服务器节点标识;所述元数据信息存储库保存有所述分布式存储系统中的各个服务器节点标识,副本在服务器节点中的分布信息及副本的状态;

当前服务器节点将待更新数据及其分配的版本号发送给所述多个副本服务器节点标识对应的副本服务器节点,以便所述多个副本服务器节点依据所述待更新数据分别对各自保存的副本及对应的版本号进行更新;所述版本号表示所述副本的更新次数;

当前服务器节点判断是否至少超过一半的所述多个副本服务器节点更新数据成功,如果是,则向客户端返回数据更新成功消息及更新后的版本号。

优选的,还包括:

当前服务器节点缓存所述待更新数据,并在所述多个副本服务器节点全部更新完毕后,删除所述待更新数据。

优选的,还包括:

副本服务器节点接收所述客户端在读取数据时携带的版本号;

副本服务器节点判断所述携带的版本号是否比自身存储的副本的版本号更新,如果是,则拒绝本次数据读取操作。

优选的,还包括:

当前服务器节点重启时,向所述多个副本服务器节点发送请求以获取所述副本服务器节点对应的最新的版本号。

优选的,还包括:

当前服务器节点将副本的初始版本号更新为所述最新的版本号,以便后续以最近更新的版本号为起始版本号分配待更新数据。

优选的,还包括:

比较所述多个副本服务器节点所保存的多个副本的多个版本号,如果存在版本号比其他副本服务器节点的版本号小的副本服务器节点,则触发版本号较小的副本服务器节点向版本号较大的副本服务器节点请求较大的版本号对应的副本。

一种分布式存储系统中的数据更新装置,包括:

元数据信息存储库,用于存储所述分布式存储系统中的各个服务器节点标识,副本在服务器节点中的分布信息及副本的状态;

接收待更新数据模块,用于接收客户端发送的待更新数据;

分配模块,用于为所述待更新数据递增分配唯一的版本号;

获取模块,用于从所述元数据信息存储库中获取所述待更新数据的多个副本所在的多个副本服务器节点标识;

发送模块,用于将待更新数据及其分配的版本号发送给所述多个副本服务器节点标识对应的副本服务器节点,以便所述多个副本服务器节点依据所述待更新数据分别对各自保存的副本及对应的版本号进行更新;所述版本号表示所述副本的更新次数;

判断更新模块,用于判断是否至少超过一半的所述多个副本服务器节点更新数据成功,如果是,则触发返回模块;

所述返回模块用于向客户端返回数据更新成功消息及更新后的版本号。

优选的,还包括:

缓存模块,用于缓存所述待更新数据;

删除模块,用于在所述多个副本服务器节点全部更新完毕后,删除所述待更新数据。

优选的,还包括:

接收版本号模块,用于接收所述客户端在读取数据时携带的版本号;

判断版本号模块,用于判断所述携带的版本号是否比自身存储的副本的版本号更新,如果是,则拒绝本次数据读取操作。

优选的,还包括:

发送请求模块,用于在当前服务器节点重启时,向所述多个副本服务器节点发送请求以获取所述多个副本服务器节点对应的最新的版本号。

优选的,还包括:

更新版本号模块,用于将副本的初始版本号更新为所述最新的版本号,以便后续以最近更新的版本号为起始版本号分配待更新数据。

优选的,还包括:

比较模块,用于比较所述多个副本服务器节点所保存的多个副本的多个版本号;

触发模块,用于如果存在版本号比其他副本服务器节点的版本号小的副本服务器节点,则触发版本号较小的副本服务器节点向版本号较大的副本服务器节点请求较大的版本号对应的副本。

经由上述的技术方案可知,与现有技术相比,本发明公开的分布式存储系统中的数据更新方法及装置,通过对数据进行更新时在至少超过一半副本服务器节点更新成功时就认为更新成功,这样就可以提高更新数据的效率。同时,还采用数据的版本号与更新次数对应的方案,这样后续在读取时带有已写成功的版本号向服务器节点请求数据时,如果服务器节点的版本号表示自身存的副本不是最新的,就可以拒绝本次读取操作,这样就能保证客户端可以向其它服务器节点重试,以保证客户端能读到最新的数据,即是实现读写一致性。因此,本实施例更为完善的解决多副本之间数据一致性的问题,并保证后续的读取性能,并且本发明实施例提供的解决方案可直接应用于多种存储系统中。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例公开的分布式存储系统中的数据更新方法实施例1的流程图;

图2为本发明实施例公开的分布式存储系统中的数据更新方法实施例2的流程图;

图3为本发明实施例公开的分布式存储系统中的数据更新装置实施例1的结构示意图;

图4为本发明实施例公开的分布式存储系统中的数据更新装置实施例2的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一

参见图1所示,图1为本发明实施例公开的分布式存储系统中的数据更新方法实施例1的流程图,在本实施例中,所述方法可以包括:

步骤101:当前服务器节点接收客户端发送的待更新数据。

客户端首先向分布式存储系统中的某个服务器节点发送待更新数据,例如,在分布式存储系统中的各个服务器节点上都存储有用户信息,而如果该用户信息需要变更,则由客户端向其中一个服务器节点发送新的用户信息,即是待更新数据,该接收到新的用户信息的服务器节点即为当前服务器节点。

步骤102:当前服务器节点为所述待更新数据递增分配唯一的版本号,并从元数据信息存储库中获取所述待更新数据的多个副本所在的多个副本服务器节点标识。

其中,所述元数据信息存储库是预先建立好的,可以保存所述分布式存储系统中的各个服务器节点标识,副本在服务器节点中的分布信息及副本的状态。各个服务器节点在启动时可以通过自身的数据服务模块向该元数据信息存储库注册本服务器节点的副本分布信息及副本状态,而后保持与元数据信息存储库的心跳。还可以通过该元数据信息存储库来维护副本分布信息及副本状态数据,并对外提供副本的查询接口以及副本状态变化的监听接口。

在接收到客户端发送到的待更新数据之后,当前服务器节点可以从元数据信息存储库中获取该待更新数据的多个副本所在的多个副本服务器节点标识。在分布式存储系统中,一份数据会被切分为多份子数据,而这多份子数据又对应保存在多个服务器节点中,并且具有各个服务器节点中又都具有保存的某份子数据的副本,因此在本步骤中,如果接收到了待更新数据,则首先需要知道该待更新数据保存在哪些服务器节点中,即是待更新数据的多个副本所在的多个副本服务器节点。

例如,如果待更新数据为用户信息,那么如果用户信息被切分为10份,分别保存在10台服务器中,第1~5台服务器保存的是第1~100个的用户信息,第6~10台服务器保存的是第第101~200个的用户信息,以此类推,第45~50台服务器保存的是901~1000个的用户信息,同时各台服务器节点上保存的用户信息又有副本存在。如果本步骤中待更新数据为第99个用户信息,则可以确定需要更新第1~5台服务器节点中保存的副本,即是本步骤中确定为第1~5台服务器节点。

其中,当前服务器节点在为待更新数据分配版本号的时候,对于同一个数据,当前服务器从第一次更新时接收到的待更新数据可以将其版本号分配为1,这样以此类推,第几次更新即可对应为待更新数据分配唯一对应的版本号,而副本服务器每一次接收到待更新数据和版本号之后,进行数据更新并记录当前接收到的版本号,并将其作为副本的当前版本号。

步骤103:当前服务器节点将待更新数据及其分配的版本号发送给所述多个副本服务器节点标识对应的副本服务器节点,以便所述多个副本服务器节点依据所述待更新数据分别对各自保存的副本及对应的版本号进行更新;所述版本号表示所述副本的更新次数。

该当前服务器节点将待更新数据依次发送给所述多个副本服务器节点标识对应的副本服务器节点,该所述多个副本服务器节点再依据所述待更新数据分别对各自保存的副本及对应的版本号进行更新,其中,版本号表示所述副本的更新次数。例如,版本号为1表示当前更新为第一次更新,以此类推,版本号为n表示当前更新为第n次更新。副本服务器在进行数据更新时,同时还需要判断版本号是否一致,即是自身记录的副本版本号是否就比接收到的版本号小1,如果不是的话,也可以不进行更新。

其中,当前服务器节点可以以不同的方式向多个副本服务器节点发送数据,例如可以并行或流水线向多个副本服务器节点有序的发送待更新数据。

步骤104:当前服务器节点判断是否至少超过一半的所述多个副本服务器节点更新数据成功,如果是,则进入步骤105。

副本服务器节点对自己保存的副本进行成功更新之后,告知当前服务器节点,在当前服务器节点判断得到有至少一半的多个副本服务器节点更新数据成功,就会进入步骤105以向客户端返回数据更新成功消息及更新后的版本号。例如,接着上面的例子来讲,如果有3台副本服务器节点更新成功,则执行步骤105。而如果副本服务器共有6个的话,则至少需要4个副本服务器更新成功。

步骤105:向客户端返回数据更新成功消息及更新后的版本号。

本实施例中,通过对数据进行更新时在至少超过一半副本服务器节点更新成功时就认为更新成功,这样就可以提高更新数据的效率。同时,还采用数据的版本号与更新次数对应的方案,这样后续在读取时带有已写成功的版本号向服务器节点请求数据时,如果服务器节点的版本号表示自身存的副本不是最新的,就可以拒绝本次读取操作,这样就能保证客户端可以向其它服务器节点重试,以保证客户端能读到最新的数据,即是实现读写一致性。因此,本=实施例更为完善的解决多副本之间数据一致性的问题,并保证后续的读取性能,并且本发明实施例提供的解决方案可直接应用于多种存储系统中。

实施例二

参照图2所示,图2为本发明实施例公开的分布式存储系统中的数据更新方法实施例2的流程图,除了实施例一中的步骤101~104,在步骤104之后,所述方法还可以包括:

步骤201:当前服务器节点缓存所述待更新数据,并在所述多个副本服务器节点全部更新完毕后,删除所述待更新数据。

当前服务器节点首先缓存待更新数据,并且当该数据在所有的副本服务器节点上都更新成功后,即可删除,此外,当前服务器节点出现空间不够时,也可删除,这样就能更少的占用当前服务器节点的存储空间。

需要说明的是,在本发明实施例中,可以让最近更新的数据至少在一个副本节点上有另外缓存,即是在某一台副本服务器节点上不仅更新其保存的副本,同时再为该副本按版本号顺序保存最近更新的数据,这样就能在当前更新服务器出现故障导致它自身缓存的数据丢失的情况下,其它副本服务器也可依赖于这个副本服务器上缓存的最新一段数据进行恢复。

步骤202:副本服务器节点接收所述客户端在读取数据时携带的版本号。

在客户端需要对当前服务器节点进行数据读取操作时,客户端同时将本次需要读取的数据的版本号同时携带给副本服务器节点。

步骤203:副本服务器节点判断所述携带的版本号是否比自身存储的副本的版本号更新,如果是,则拒绝本次数据读取操作。

副本服务器节点判断所述携带的版本号是否比自身存储的副本的版本号更新,如果是,例如,携带的版本号为3,而副本服务器自己存储的副本的版本号为2,说明其存储的副本即是客户端需要读取的数据,是进行了两次的更新的数据,而客户端需要读取的是更新过三次的数据,这样就不允许本次读取操作,而如果携带的版本号与自身存储的副本的版本号相同或者更旧,则说明其存储的副本可以作为客户端本次需要读取的数据,则接受本次数据读取操作。

步骤204:当前服务器节点重启时,向所述多个副本服务器节点发送请求以获取所述副本服务器节点对应的最新的版本号。

在实际应用中,一旦当前服务器出现宕机或者重启的情况,则当前服务器节点向其他的多个副本服务器节点发送请求,以请求获取多个副本服务器中对应的最新的版本号。

步骤205:当前服务器将副本的初始版本号更新为所述最新的版本号,以便后续以最近更新的版本号为起始版本号分配待更新数据。

当前服务器节点将副本的初始版本号在更新为步骤204中获取到的最新的版本号,这样后续在为待更新数据分配版本号的时候,就可以以该最新的版本号为起始版本号进行版本号的分配。

步骤206:比较所述多个副本服务器节点所保存的多个副本的多个版本号,如果存在版本号比其他副本服务器节点的版本号小的副本服务器节点,则触发版本号较小的副本服务器节点向版本号较大的副本服务器节点请求较大的版本号对应的副本。

当前服务器节点再比较从多个副本服务器节点处获得的版本号,如果同时存在版本号为1以及版本号为2的副本服务器节点,则当前服务器就触发版本号为1的副本服务器节点向版本号为2的副本服务器节点请求较大的版本号对应的副本,这样就能保证即便服务器节点出现意外情况,也能保证数据副本之间的一致性。

需要说明的是,上述步骤201~205可以在数据更新过程中并不限于上述限定的先后顺序关系。

在本发明实施例中,还能保证对数据更新的一致性,通过至少一个服务器节点对最新数据的缓存,解决宕机与恢复时数据的恢复问题。

上述本发明公开的实施例中详细描述了方法,对于本发明的方法可采用多种形式的装置实现,因此本发明还公开了一种分布式存储系统中的数据更新装置,下面给出具体的实施例进行详细说明。

实施例三

参见图3所示,图3为本发明实施例公开的分布式存储系统中的数据更新装置实施例1的结构示意图,在本实施例中,所述装置可以包括:

元数据信息存储库301,用于存储所述分布式存储系统中的各个服务器节点标识,副本在服务器节点中的分布信息及副本的状态;

接收待更新数据模块302,用于接收客户端发送的待更新数据;

分配模块303,用于为所述待更新数据递增分配唯一的版本号;

获取模块304,用于从所述元数据信息存储库中获取所述待更新数据的多个副本所在的多个副本服务器节点标识;

发送模块305,用于将待更新数据及其分配的版本号发送给所述多个副本服务器节点标识对应的副本服务器节点,以便所述多个副本服务器节点依据所述待更新数据分别对各自保存的副本及对应的版本号进行更新;所述版本号表示所述副本的更新次数;

判断更新模块306,用于判断是否至少超过一半的所述多个副本服务器节点更新数据成功,如果是,则触发返回模块307;

所述返回模块307用于向客户端返回数据更新成功消息及更新后的版本号。

本实施例中,所述分布式存储系统中的数据更新装置通过对数据进行更新时在至少超过一半副本服务器节点更新成功时就认为更新成功,这样就可以提高更新数据的效率。同时,还采用数据的版本号与更新次数对应的方案,这样后续在读取时带有已写成功的版本号向服务器节点请求数据时,如果服务器节点的版本号表示自身存的副本不是最新的,就可以拒绝本次读取操作,这样就能保证客户端可以向其它服务器节点重试,以保证客户端能读到最新的数据,即是实现读写一致性。因此,本实施例更为完善的解决多副本之间数据一致性的问题,并保证后续的读取性能,并且本发明实施例提供的解决方案可直接应用于多种存储系统中。

实施例四

参见图4所示,图4为本发明实施例公开的分布式存储系统中的数据更新装置实施例2的结构示意图,除了图3所示的模块之外,在本实施例中,所述装置还可以包括:

缓存模块401,用于缓存所述待更新数据;

删除模块402,用于在所述多个副本服务器节点全部更新完毕后,删除所述待更新数据。

接收版本号模块403,用于接收所述客户端在读取数据时携带的版本号;

判断版本号模块404,用于判断所述携带的版本号是否比自身存储的副本的版本号更新,如果是,则拒绝本次数据读取操作。

发送请求模块405,用于在当前服务器节点重启时,向所述多个副本服务器节点发送请求以获取所述多个副本服务器节点对应的最新的版本号。

更新版本号模块406,用于将副本的初始版本号更新为所述最新的版本号,以便后续以最近更新的版本号为起始版本号分配待更新数据。

比较模块407,用于比较所述多个副本服务器节点所保存的多个副本的多个版本号;

触发模块408,用于如果存在版本号比其他副本服务器节点的版本号小的副本服务器节点,则触发版本号较小的副本服务器节点向版本号较大的副本服务器节点请求较大的版本号对应的副本。

在本发明实施例中,所述分布式存储系统中的数据更新装置还能保证对数据更新的一致性,通过至少一个服务器节点对最新数据的缓存,解决宕机与恢复时数据的恢复问题。

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1