一种多副本读取方法和系统与流程

文档序号:11544875阅读:154来源:国知局
一种多副本读取方法和系统与流程

本发明涉及计算机网络技术和计算机数据存储技术领域,特别涉及一种多副本读写方法和系统。



背景技术:

现有技术方案数据写入的步骤为:代理节点接收到客户端的写请求后,向主存储节点发送写请求。如果主存储节点写入成功,则代理节点向其它备存储节点发送写请求;如果写入失败,则代理节点再重试。代理节点向所有备存储节点分发写请求,然后一直等待备存储节点返回结果,直到有任意半数(n/2,n为总副本数)的备存储节点返回写操作成功则向客户端返回写操作成功,或者直到有半数以上的存储节点返回失败或者超时则向客户端返回写操作失败。

现有技术方案数据读取的步骤为:代理节点接收到客户端的读请求后,代理节点随机挑选半数以上存储节点发送读请求。如果代理节点读取的所有副本版本一致,则代理节点向客户端返回这个一致版本的数据,否则代理节点继续向剩余存储节点发送读请求,直到获得半数以上一致的版本则向客户端返回成功。如果不存在半数以上的一致性版本或者读取超时,则向客户端返回读取失败。

在实现本发明的过程中,发明人发现至少存在如下问题:

1.由于代理节点需要读取至少半数以上的副本,才能决策出返回哪个一致性版本。因此,代理节点在读取过程中的效率较低的;

2.由于代理节点需要读取的副本数量大,所以,增加了对网络宽带和磁盘io的成本。



技术实现要素:

本发明的目的是通过多副本读写方法和相应的系统,提高代理节点在读取过程中的效率,且降低网络宽带和磁盘io的成本。

为实现上述目的,本发明实施例的一个方面提供了一种多副本读写方法,该方法包括:代理节点接收读取/写入请求并将该请求发送至n个备存储节点。计算备存储节点读取/写入成功或失败的数量。当备存储节点的个数n为偶数时,当有n/2个备存储节点读取/写入成功时,则代理节点返回读取/写入操作成功信息。当备存储节点的个数n为奇数时,当有(n-1)/2个备存储节点读取/写入成功或失败时,则代理节点返回读取/写入操作成功或失败信息。

进一步地,在代理节点接收写入请求并将该请求发送至n个备存储节点之前还包括:代理节点接收写入请求并将该请求发送至主存储节点。代理节点在接收到主存储节点写入成功的信息后向n个备存储节点分发写入请求。

进一步地,在计算备存储节点读取/写入成功或失败的数量之前,还包括:当备存储节点的个数n为偶数时,指定n/2个备存储节点为读取/写入备存储节点。当备存储节点的个数n为奇数时,指定(n-1)/2个备存储节点为读取/写入备存储节点。计算指定备存储节点读取/写入成功或失败的数量:当备存储节点的个数n为偶数,且指定的n/2个所述备存储节点读取/写入成功时,则所述代理节点返回读取/写入操作成功信息。当备存储节点的个数n为奇数,且指定的(n-1)/2个备存储节点读取/写入成功时,则代理节点返回读取/写入操作成功信息。

进一步地,在代理节点返回读取信息前还包括:计算备存储节点的副本版本相同或不相同的数量。当备存储节点的个数n为偶数时,当代理节点读取到有n/2或指定的n/2个备存储节点的副本版本相同时,则代理节点返回该相同的副本版本。当备存储节点的个数n为奇数时,当代理节点读取到有(n-1)/2或指定的(n-1)/2个备存储节点的副本版本相同时,则代理节点返回该相同的副本版本。当代理节点读取到有(n-1)/2或指定的(n-1)/2个备存储节点的副本版本不相同时,则代理节点返回最低版本的副本版本。

进一步地,代理节点接收写入请求并将该请求发送至主存储节点还包括:当主存储节点写入操作失败,则代理节点在预定时间内继续向主存储节点发送写入请求。

进一步地,当代理节点接收到的读取操作均为失败时,则返回该读取操作失败信息。

本发明实施例的另一个方面提供了与上述方法相对应的系统,该系统包括:接收模块,用于接收读取/写入请求并将该请求发送至n个备存储节点。计算模块,用于计算备存储节点读取/写入成功或失败的数量。返回模块,当备存储节点的个数n为偶数时,用于当有n/2个备存储节点读取/写入成功时,则代理节点返回读取/写入操作成功信息。当备存储节点的个数n为奇数时,返回模块还用于当有(n-1)/2个备存储节点读取/写入成功或失败时,则代理节点返回读取/写入操作成功或失败信息。

进一步地,在接收模块接收读取/写入请求并将该请求发送至n个备存储节点之前,还包括:发送模块,用于将代理节点接收的写入请求发送至主存储节点。分发模块,用于将在接收到主存储节点写入成功的信息后向n个备存储节点分发写入请求。

进一步地,在计算模块计算备存储节点读取/写入成功或失败的数量前还包括:指定模块,用于当备存储节点的个数n为偶数时,指定n/2个备存储节点为读取/写入备存储节点。指定模块还用于当备存储节点的个数n为奇数时,指定(n-1)/2个备存储节点为读取/写入备存储节点。计算模块,用于当备存储节点的个数n为偶数时,当指定的n/2个备存储节点读取/写入成功时,则代理节点返回读取/写入操作成功信息。计算模块还用于当备存储节点的个数n为奇数时,当指定的(n-1)/2个备存储节点读取/写入成功时,则代理节点返回读取/写入操作成功信息。

进一步地,在返回模块返回读取信息前还包括:计算模块还用于计算备存储节点的副本版本相同或不相同的数量。当备存储节点的个数n为偶数时,返回模块还用于,当代理节点读取到有n/2或指定的n/2个备存储节点的副本版本相同时,则代理节点返回该相同的副本版本。当备存储节点的个数n为奇数时,返回模块还用于,当代理节点读取到有(n-1)/2或指定的(n-1)/2个备存储节点的副本版本相同时,则代理节点返回该相同的副本版本,当代理节点读取到有(n-1)/2或指定的(n-1)/2个备存储节点的副本版本不相同时,则代理节点返回最低版本的副本版本。

进一步地,发送模块还用于:当主存储节点写操作失败,则发送模块在预定时间内继续向主存储节点发送写请求。

进一步地,返回模块还用于:当代理节点接收到的读操作均为失败时,则返回该读操作失败信息。

本发明实施例的有益效果在于,因为采用了当备存储节点的个数n为偶数时,当有n/2个备存储节点读取/写入成功时,则代理节点返回读取/写入操作成功信息。当备存储节点的个数n为奇数时,当有(n-1)/2个备存储节点读取/写入成功或失败时,则代理节点返回读取/写入操作成功或失败信息的技术手段,所以克服了现有技术中读取至少半数以上副本数的技术问题,进而达到读取副本数量少,提高去取效率,减少网络宽带和磁盘io成本的技术效果。

附图说明

图1是本发明第一实施例提供的第一种方式的多副本读写方法的流程图;

图2是本发明第一实施例提供的第二种方式的多副本读写方法的流程图;

图3是本发明第二实施例提供的一种多副本读写系统的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。

在现有技术中,对数据的写入时,只有当半数的备存储节点返回写操作成功后才向客户端返回写操作成功的信息。例如,当有三个副本,分别存在三个备存储节点上。在写入时,必须有半数,即两个备存储节点写入成功时,才向客户端返回写入成功的信息。同理,在数据的读取时,也需当读取半数,即两个备存储节点读取成功时,才向客户端返回读取成功的信息。而通过本发明实施例提供的实施例,只需要读取/写入一个或者读取/写入指定的一个备存储节点,就能向客户端返回读取/写入成功的信息。

相对于现有技术中的技术方案,本发明节约了对网络宽带和磁盘io的成本。

请参阅图1,图1是本发明第一实施例提供的第一种方式的多副本读写方法的流程图。

如图1所示,本发明实施例提供了一种多副本读写方法,该方法包括:代理节点接收读取/写入请求并将该请求发送至n个备存储节点。计算备存储节点读取/写入成功或失败的数量。当备存储节点的个数n为偶数时,当有n/2个备存储节点读取/写入成功时,则代理节点返回读取/写入操作成功信息。当备存储节点的个数n为奇数时,当有(n-1)/2个备存储节点读取/写入成功或失败时,则代理节点返回读取/写入操作成功或失败信息。

在本实施例中,当备存储节点的个数n为奇数时,计算备存储节点读取/写入成功或失败的数量的公式为:(n-1)/2。相对于现有技术,减少了备存储节点读取/写入成功或失败的个数,降低了由于读取/写入时对网络宽带和磁盘io的成本。例如,当n等于五时,在写入时,现有技术中需要写入的数量为三个,当备存储节点的个数为五个时,现有技术需要读取三个副本。在读取时,当上述三个副本版本不一致时,则继续读取一个副本,即,现有技术中需要读取四个副本,然后返回相应的信息。

具体地,在代理节点接收写入请求并将该请求发送至n个备存储节点之前还包括:代理节点接收写入请求并将该请求发送至主存储节点。代理节点在接收到主存储节点写入成功的信息后向n个备存储节点分发写入请求。

请参阅图2,图2是本发明第一实施例提供的第二种方式的多副本读写方法的流程图。

如图2所示,在第一种方式的基础上进行完善形成了第二种方式。在第二种方式中,在计算备存储节点读取/写入成功或失败的数量之前,还包括:当备存储节点的个数n为偶数时,指定n/2个备存储节点为读取/写入备存储节点。当备存储节点的个数n为奇数时,指定(n-1)/2个备存储节点为读取/写入备存储节点。计算指定备存储节点读取/写入成功或失败的数量:当备存储节点的个数n为偶数,且指定的n/2个备存储节点读取/写入成功时,则代理节点返回读取/写入操作成功信息。当备存储节点的个数n为奇数,且指定的(n-1)/2个备存储节点读取/写入成功时,则代理节点返回读取/写入操作成功信息。

在本实施例中,对上一实施例进行了改进,在计算备存储节点读取/写入成功或失败的数量之前,增加了“指定”备存储节点的步骤。例如,有五个备存储节点,现需要对其中的两个进行读取/写入操作。在上一实施例中,是对五个中的任一两个备存储节点进行读取/写入操作,但在本实施例中,先对五个备存储节点中的两个进行指定,可以指定第一个和第四个备存储节点,也可以指定其它,需要说明的是,此处的指定只是针对数量进行规范,但并不规定具体的备存储节点本身。下面以指定的备存储节点为第一个和第四个做详细阐述。当第一个和第四个备存储节点读取/写入成功时,则说明整个读取/写入操作成功,此时,代理节点返回读取/写入操作成功信息。上述的举例为当n为奇数时的情况,同理,当n为偶数时,例如,当n等于六,即有六个备存储节点时。指定其中的第一、第二、第三被存储节点,当此三个备存储节点读取/写入成功时,则说明整个读取/写入操作成功,此时,代理节点返回读取/写入操作成功信息。

在现有技术中,是对任意半数的备存储节点进行读取/写入,例如,有三个备存储节点,先读取第一个和第二个备存储节点,在读取/写入失败后,继续读取第一个和第三个被存储节点,若还是失败,则继续读取/写入,若成功,则向客户端返回成功信息。而在本申请中,由于已经指定了第二个备存储节点,只需读取/写入第二个备存储节点即可向客户端返回相应的信息。上述实施例仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。

更具体地,在代理节点返回读取信息前还包括:计算备存储节点的副本版本相同或不相同的数量。当备存储节点的个数n为偶数时,当代理节点读取到有n/2或指定的n/2个备存储节点的副本版本相同时,则代理节点返回该相同的副本版本。当备存储节点的个数n为奇数时,当代理节点读取到有(n-1)/2或指定的(n-1)/2个备存储节点的副本版本相同时,则代理节点返回该相同的副本版本。当代理节点读取到有(n-1)/2或指定的(n-1)/2个备存储节点的副本版本不相同时,则代理节点返回最低版本的副本版本。

在本实施例中,通过计算备存储节点的副本版本相同或不相同的数量,并当代理节点读取到有(n-1)/2或指定的(n-1)/2个备存储节点的副本版本不相同时,则代理节点返回最低版本的副本版本。而在现有技术中,当等于五时,需要读取三个副本,如果两个备副本版本不一致,还需要再读出一个备副本(一共四个),然后返回副本版本相同的数量较多的副本版本。而本申请中,一共只用读取2个备副本(不用读主副本),如果不一致,则返回低版本的数据,并不用再读多余的版本,这时比现有技术少读取2个副本。当为读取半数的副本一致时,则返回读取操作失败的信息至客户端。

更具体地,代理节点接收写入请求并将该请求发送至主存储节点还包括:当主存储节点写入操作失败,则代理节点在预定时间内继续向主存储节点发送写入请求。

更具体地,当代理节点接收到的读取操作均为失败时,则返回该读取操作失败信息。

请参阅图3,图3是本发明第二实施例提供的一种多副本读写系统的结构示意图。

如图3所示,本发明实施例提供了与上述方法对应的一种多副本读写系统,该系统包括:接收模块,用于接收读取/写入请求并将该请求发送至n个备存储节点。计算模块,用于计算备存储节点读取/写入成功或失败的数量。返回模块,当备存储节点的个数n为偶数时,用于当有n/2个备存储节点读取/写入成功时,则代理节点返回读取/写入操作成功信息。当备存储节点的个数n为奇数时,返回模块还用于当有(n-1)/2个备存储节点读取/写入成功或失败时,则代理节点返回读取/写入操作成功或失败信息。

更具体地,在接收模块接收读取/写入请求并将该请求发送至n个备存储节点之前,还包括:发送模块,用于将代理节点接收的写入请求发送至主存储节点。分发模块,用于将在接收到主存储节点写入成功的信息后向n个备存储节点分发写入请求。

更具体地,在计算模块计算备存储节点读取/写入成功或失败的数量前还包括:指定模块,用于当备存储节点的个数n为偶数时,指定n/2个备存储节点为读取/写入备存储节点。指定模块还用于当备存储节点的个数n为奇数时,指定(n-1)/2个备存储节点为读取/写入备存储节点。计算模块,用于当备存储节点的个数n为偶数时,当指定的n/2个所述备存储节点读取/写入成功时,则代理节点返回读取/写入操作成功信息。计算模块还用于当备存储节点的个数n为奇数时,当指定的(n-1)/2个备存储节点读取/写入成功时,则代理节点返回读取/写入操作成功信息。

更具体地,在返回模块返回读取信息前还包括:计算模块还用于计算备存储节点的副本版本相同或不相同的数量。当备存储节点的个数n为偶数时,返回模块还用于,当代理节点读取到有n/2或指定的n/2个备存储节点的副本版本相同时,则代理节点返回该相同的副本版本。当备存储节点的个数n为奇数时,返回模块还用于,当代理节点读取到有(n-1)/2或指定的(n-1)/2个备存储节点的副本版本相同时,则代理节点返回该相同的副本版本,当代理节点读取到有(n-1)/2或指定的(n-1)/2个备存储节点的副本版本不相同时,则代理节点返回最低版本的副本版本。

更具体地,发送模块还用于:当主存储节点写操作失败,则发送模块在预定时间内继续向主存储节点发送写请求。

更具体地,返回模块还用于:当代理节点接收到的读操作均为失败时,则返回该读操作失败信息。

本发明实施例的有益效果在于,因为采用了当备存储节点的个数n为偶数时,当有n/2个备存储节点读取/写入成功时,则代理节点返回读取/写入操作成功信息。当备存储节点的个数n为奇数时,当有(n-1)/2个备存储节点读取/写入成功或失败时,则代理节点返回读取/写入操作成功或失败信息的技术手段,所以克服了现有技术中读取至少半数以上副本的数技术问题,进而达到读取副本数量少,提高去取效率,减少网络宽带和磁盘io成本的技术效果。

应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。

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