分布式计算机数据存储系统中多副本一致性的控制方法

文档序号:6544612阅读:158来源:国知局
分布式计算机数据存储系统中多副本一致性的控制方法
【专利摘要】本发明涉及一种分布式计算机数据存储系统中多副本一致性的控制方法,属于计算机数据管理【技术领域】。首先根据设定的分布式系统的副本差异度,计算并设定分布式存储系统的节点的转发队列和执行队列长度,节点接收到读写请求后,首先判断节点的转发或执行队列的长度是否小于设定的阈值,若小于阈值,则将请求插入到相应的队列中,若大于或等于阈值,则将插入操作阻塞,直到队列长度小于阈值后,取消阻塞,将请求插入到相应的队列中。本发明方法通过对队列的长度控制和阻塞操作,能够使分布式存储系统的副本差异准确地维持在一定范围内,方法直观有效、便于使用。
【专利说明】 分布式计算机数据存储系统中多副本一致性的控制方法
【技术领域】
[0001]本发明涉及一种分布式计算机数据存储系统中多副本一致性的控制方法,属于计算机数据管理【技术领域】。
【背景技术】
[0002]在分布式数据存储中,为了提高系统的性能以及可用性,将数据以多副本的形式进行存储已成为一种共识。通过多副本,分布式存储系统可以增加读取数据的I/O带宽,以此提高了系统的性能;当某台(某些)机器宕机时,分布式系统仍然有可能访问到数据的其他副本,以此提高了系统的可用性。现在流行并迅速发展的分布式文件系统以及NoSQL数据库均米用了多副本的策略,如 Hadoop 的 HDFS, Facebook 的 Cassandra, MongoDB, Hbase,Dynamo 等等。
[0003]在带来上述益处的同时,多副本之间的数据一致性需要额外的维护代价。数据一致性是指在多副本的分布式数据存储系统中,用户总能读取到最新写入的数据。CAP理论简洁地说明了在当前的分区容忍下,同时保证系统的高度可用性与数据一致性是无法实现的。
[0004]现有的分布式数据库系统采取牺牲一定的一致性来保证系统的7*24小时的高可用性。由此给分布式数据管理系统带来了一个新的问题:副本之间的一致性程度如何,以及一致性程度如何进行控制。

【发明内容】

[0005]本发明的目的是提出一种分布式计算机数据存储系统中多副本一致性的控制方法,针对现有的分布式存储系统副本一致性不能直观控制的难题,采用基于队列长度的控制方法,以控制副本的一致性级别,确保分布式存储系统中的数据的多副本之间的最大版本差异能限制在用户允许的范围内。
[0006]本发明提出的计算机数据分布式存储系统中多副本一致性的控制方法,包括以下步骤:
[0007](I)记分布式存储系统的节点集合为S,在S中的节点A到节点B的实现通信的转发队列记做SQab,该转发队列能同时进行转发操作的转发操作数量LSQab, S中节点C的用于执行写请求的执行队列记做MQ。,该执行队列能同时进行写操作的写操作数量N_MQa,记用户期望的分布式存储系统的同一数据项的不同副本间差异度小于k ;
[0008](2)对于一个写请求,设定节点A为协调者节点,集合Sa为非协调者节点集合,对于每一个非协调者节点B e Sa,设定协调者节点A与非协调者节点B实现通信的转发队列SQab的队列长度阈值为L_SQab,协调者节点A的所有转发队列集合为SQa,节点A执行写请求的执行队列MQa的队列长度阈值为L_MQa,其中LSQab= a XkXN_SQAB,L_MQA = β XkXN_MQa,其中α和β取值为任意正整数;
[0009](3)分布式存储系统中的协调者节点A接收到客户端的写请求后,协调者节点A从分布式存储系统中找到存储与该写请求对应的数据副本的所有非协调者节点B e Sa,协调者节点将该写请求插入到本节点的用于与包含该数据项副本的所有非协调者节点实现通信的转发队列SQab e SQa中,插入过程包括以下步骤:
[0010](3-1)对协调者节点A中用于与非协调者节点实现通信的所有转发队列SQab e SQa的长度分别进行判断,若该转发队列SQab的长度小于该转发队列长度阈值L_SQab,则将写请求插入到该转发队列末尾,等待转发,若该转发队列SQab的长度大于或等于该转发长度阈
,则该写请求暂时不进入转发队列,进入阻塞状态,直到转发队列长度小于L_SQab,从阻塞状态转换为工作状态,将写请求插入到该转发队列末尾,等待转发;
[0011](3-2)对协调者节点A中的数据副本进行判断,若协调者节点A中不存在与写请求对应的数据副本,则写请求不进入协调者节点A的执行队列,若协调者节点A中存在与写请求对应的数据副本,则当协调者节点A的执行队列MQa的队列长度小于上述执行队列的长度阈值L_MQa时,协调者节点A将写请求插入到执行队列MQa中,等待执行,当协调者节点A的执行队列长度大于或等于上述执行队列的长度阈值,写请求暂时不进入执行队列,进入阻塞状态,直到执行队列长度小于L_MQa时,从阻塞状态转换为工作状态,将写请求插入到执行队列中,等待执行;
[0012](4)协调者节点A依次将所有转发队列SQab e SQa中的写请求转发给对应的非协调者节点B e Sa ; [0013](5)非协调者节点B e Sa接收到协调者节点A转发的写请求后,对本节点B的用于写请求的执行队列MQb的长度进行判断,若执行队列MQb的长度小于上述长度阈值L_MQb,则本节点B将写请求插入到执行队列MQb中,等待执行;若执行队列的长度大于或等于长度阈值L_MQb,则写请求不进入执行队列MQb,进入阻塞状态,直到执行队列长度小于L_MQb,从阻塞状态转换为工作状态,将写请求插入到执行队列中MQb,等待执行;
[0014](6)上述步骤(3-2)中插入了该写请求的协调者节点A与上述步骤(5)中的非协调者节点B e Sa执行本节点中执行队列中的写请求,若写请求操作失败,则减小执行队列长度L_MQ的值,减小方法为:使上述β = β_1,根据公SL_MQ = β XkXN_MQ,重新计算L_MQ,若写请求操作成功,则该节点向协调者节点返回写入成功信息;
[0015](7)设定协调者节点需要接收到成功信息次数的阈值,在设定时间内,对协调者节点收集到成功信息的次数进行判断,若成功信息次数大于或等于成功信息次数阈值,则保持所有(其中B e Sa)不变,若成功信息次数小于成功信息次数阈值,则减小所有的L-SQab(其中B e Sa)的值,减小方法为:使上述α = α-1,根据公式L_SQAB = a XkXN_SQab并重新计算所有的L_SQAB(其中B e Sa);
[0016](8)对步骤(6)中执行写请求的节点的重新计算得到的执行队列长度L_MQ进行判断,若重新计算得到的执行队列长度L_MQ与该节点原有执行队列长度L_MQ不等,则使用该节点重新计算得到的执行队列长度L_MQ代替该节点原有的执行队列长度L_MQ ;若若重新计算得到的执行队列长度L_MQ与该节点原有执行队列长度L_MQ相等,则保持L_MQ不变;
[0017](9)分别对步骤(7)中协调者节点A和非协调者节点B (A e S,B e Sa)重新计算得到的转发队列长度l_sqab进行判断,若重新计算得到的转发队列长度l_sqab与协调者节点A原转发队列长不等,则使用步骤(7)中重新计算得到的转发队列长度L_SQab代替步骤(2)中的协调者节点A的转发队列长,若重新计算得到的转发队列长度LSQab与协调者节点A原转发队列长度LSQab相等,则保持步骤(2)中的协调者节点A的转发队列长度L_SQab不变;
[0018](10)以步骤⑶和步骤(9)中的得到的转发队列长度和执行队列长度作为设定值,返回到步骤(3)。
[0019]本发明提出的计算机数据分布式存储系统中多副本一致性的控制方法,其优点是:
[0020]1、本发明方法可以准确的控制数据的多副本之间的最大版本差异度,使得分布式存储系统中的数据可以控制和预测,有助于数据库使用人员了解系统中数据的存储状态,及时提出数据副本的修复措施,避免业务灾难。
[0021]2、本方法可以在系统不重启的情况下,动态地设置分布式存储系统中数据副本的一致性级别,提高了数据分布式存储系统的工作可靠性和可用性。
[0022]3、本发明方法的基于队列长度的控制方法,可以保持原有的分布式存储系统整个读、写请求的时间复杂度,因此在实现对分布式存储系统中数据副本的一致性进行控制的同时,不产生额外系统延迟。
[0023]4、由于使用本发明提出的控制方法,使分布式存储系统的副本的一致性变得可控,因此能大大降低副本修复代价。
[0024]5、本发明方法具有很强的适用性,既可用在P2P对等架构的分布式存储系统上,又可以用在中心架构的分布式存储系统上。
【专利附图】

【附图说明】
[0025]图1是本发明提出的计算机数据分布式存储系统中多副本一致性的控制方法中协调者节点的工作流程图。
[0026]图2是本发明方法中非协调者节点的工作流程图。
【具体实施方式】
[0027]本发明提出的计算机数据分布式存储系统中多副本一致性的控制方法,其中协调者节点的工作流程图如图1所示,非协调者节点的工作流程图如图2所示。该方法包括以下步骤:
[0028](I)记分布式存储系统的节点集合为S,在S中的节点A到节点B的实现通信的转发队列记做SQab,该转发队列能同时进行转发操作的转发操作数量LSQab, S中节点C的用于执行写请求的执行队列记做MQ。,该执行队列能同时进行写操作的写操作数量N_MQa,记用户期望的分布式存储系统的同一数据项的不同副本间差异度小于k(即副本一致性满足多副本一致性领域的k-version度量指标);
[0029](2)对于一个写请求(读请求和写请求具有雷同的过程和处理方法),设定节点A为协调者节点,集合Sa为非协调者节点集合(接收到客户端请求的服务器节点叫做协调者节点,所有拥有该写请求对应的数据副本的节点叫做非协调者节点),对于每一个非协调者节点B e Sa,设定协调者节点A与非协调者节点B实现通信的转发队列SQab的队列长度阈值为LSQab,协调者节点A的所有转发队列集合为SQa,节点A执行写请求的执行队列MQa的队列长度阈值为 L_MQA,其中 L_SQAB = a XkX}i_SQm,LJAQa = β XkXN_MQA,其中 α 和 β取值为任意正整数(α和β的取值与分布式存储系统使用的服务器硬件配置和网络情况有关,可首先将α和β设置为较大的值,如10000,通过在实际运行中不断调整两个值α和β,使得L1和L2的取值尽可能大,且能满足需要的一致性级别,此外,对转发队列和执行队列的长度设置可以在系统启动前设置,也可以通过JMX等技术在系统运行时实时设置并生效);
[0030](3)分布式存储系统中的协调者节点A接收到客户端的写请求后,协调者节点A从分布式存储系统中找到存储与该写请求对应的数据副本的所有非协调者节点B e Sa(可通过一致性哈希算法计算出非协调者节点或通过中心节点存储的元数据检索出非协调者节点),协调者节点将该写请求插入到本节点的用于与所述的所有非协调者节点实现通信的转发队列SQab e SQa中,插入过程包括以下步骤:
[0031](3-1)对协调者节点A中用于与非协调者节点实现通信的所有转发队列SQab e SQa的长度分别进行判断,若该转发队列SQab的长度小于该转发队列长度阈值L_SQab,则将写请求插入到该转发队列末尾,等待转发,若该转发队列SQab的长度大于或等于该转发长度阈
,则该写请求暂时不进入转发队列,进入阻塞状态,直到转发队列长度小于L_SQab,从阻塞状态转换为工作状态,将写请求插入到该转发队列末尾,等待转发;
[0032](3-2)对协调者节点A中的数据副本进行判断,若协调者节点A中不存在与写请求对应的数据副本,则写请求不进入协调者节点A的执行队列,若协调者节点A中存在与写请求对应的数据副本,则当协调者节点A的执行队列MQa的队列长度小于上述执行队列的长度阈值L_MQa时,协调者节点A将写请求插入到执行队列MQa中,等待执行,当协调者节点A的执行队列长度大于或等于上述执行队列的长度阈值,写请求暂时不进入执行队列,进入阻塞状态,直到执行队列长度小于L_MQa时,从阻塞状态转换为工作状态,将写请求插入到执行队列中,等待执行;
[0033](4)协调者节点A依次将所有转发队列SQab e SQa中的写请求转发给对应的非协调者节点B e Sa ;
[0034](5)对协调者节点A中的数据副本进行判断,若协调者节点A中不存在与写请求对应的数据副本,则写请求不进入协调者节点A的执行队列,若协调者节点A中存在与写请求对应的数据副本,则当协调者节点A的执行队列MQa的队列长度小于上述执行队列的长度阈值L_MQa时,协调者节点A将写请求插入到执行队列MQa中,等待执行,当协调者节点A的执行队列长度大于或等于上述执行队列的长度阈值L_MQa时,写请求暂时不进入执行队列,进入阻塞状态,直到执行队列长度小于L_MQa时,从阻塞状态转换为工作状态,将写请求插入到执行队列中,等待执行;
[0035](6)上述步骤(3-2)中插入了该写请求的协调者节点A与上述步骤(5)中的非协调者节点B e Sa执行本节点中执行队列中的写请求,若写请求在队列中等待的时间或执行写入的时间超过分布式存储系统的限制等情况导致写请求操作失败,则说明此时的1_1?取值过大,应减小 执行队列长度1_1?的值,减小方法为:使上述β = β-l,根据公SL_MQ=β XkXN_MQ,重新计算L_MQ,若写请求操作成功,则该节点向协调者节点返回写入成功信息;
[0036](7)设定协调者节点需要接收到成功信息次数的阈值,在设定时间内,对协调者节点收集到成功信息的次数进行判断,若成功信息次数大于或等于成功信息次数阈值,则保持所有(其中B e Sa)不变,若成功信息次数小于成功信息次数阈值,则减小所有的L-SQab(其中B e Sa)的值,减小方法为:使上述α = α-1,根据公式L_SQAB = a XkXN_SQab并重新计算所有的L_SQAB(其中B e Sa);
[0037](8)对步骤(6)中执行写请求的节点的重新计算得到的执行队列长度L_MQ进行判断,若重新计算得到的执行队列长度L_MQ与该节点原有执行队列长度L_MQ不等,则使用该节点重新计算得到的执行队列长度L_MQ代替该节点原有的执行队列长度L_MQ ;若若重新计算得到的执行队列长度L_MQ与该节点原有执行队列长度L_MQ相等,则保持L_MQ不变;
[0038](9)分别对步骤(7)中协调者节点A和非协调者节点B (A e S,B e Sa)重新计算得到的实现通信的转发队列长度l_sqab进行判断,若重新计算得到的转发队列长度l_sqab与协调者节点A原转发队列长度LSQab不等,则使用步骤(7)中重新计算得到的转发队列长度L_SQABR替步骤⑵中的协调者节点A的转发队列长度LSQab,若重新计算得到的转发队列长度L_SQAB与协调者节点A原转发队列长相等,则保持步骤(2)中的协调者节点A的转发队列长度L_SQab不变;
[0039](10)以步骤⑶和步骤(9)中的得到的转发队列长度和执行队列长度作为设定值,返回到步骤(3)。
[0040]在一个分布式存储系统中,服务器节点可分为协调者节点和非协调者节点的。协调者节点接受客户端的读写请求,并将其转发给管理与该读写请求相关的数据副本的非协调者节点,非协调者节点接收到请求后,执行请求的内容。最后,协调者节点接收非协调者节点的节点的反馈响应,并汇总后返回给客户端。不失一般性的,一个服务器节点可以同时以协调者节点和非协调者节点两种身份存在。在此过程中,读写命令具有两次排队过程:转发队列和执行队列。写请求首先在协调者节点进入转发队列进行排队,等待转发;之后读写请求进入执行队列,等待真正执行。
【权利要求】
1.一种计算机数据分布式存储系统中多副本一致性的控制方法,该方法包括以下步骤: (1)记分布式存储系统的节点集合为S,在S中的节点A到节点B的实现通信的转发队列记做SQab,该转发队列能同时进行转发操作的转发操作数量N_SQab,S中节点C的用于执行写请求的执行队列记做MQ。,该执行队列能同时进行写操作的写操作数量N_MQa,记用户期望的分布式存储系统的同一数据项的不同副本间差异度小于k ; (2)对于一个写请求,设定节点A为协调者节点,集合Sa为非协调者节点集合,对于每一个非协调者节点B e Sa,设定协调者节点A与非协调者节点B实现通信的转发队列SQab的队列长度阈值为L_SQab,协调者节点A的所有转发队列集合为SQa,节点A执行写请求的执行队列 MQa 的队列长度阈值为 L_MQA,其中 LSQab = a XkXN_SQAB,L_MQA = β XkXN_MQA,其中α和β取值为任意正整数; (3)分布式存储系统中的协调者节点A接收到客户端的写请求后,协调者节点A从分布式存储系统中 找到存储与该写请求对应的数据副本的所有非协调者节点B e Sa,协调者节点将该写请求插入到本节点的用于与包含该数据项副本的所有非协调者节点实现通信的转发队列SQab e SQa中,插入过程包括以下步骤: (3-1)对协调者节点A中用于与非协调者节点实现通信的所有转发队列SQab e SQa的长度分别进行判断,若该转发队列SQab的长度小于该转发队列长度阈值L_SQab,则将写请求插入到该转发队列末尾,等待转发,若该转发队列SQab的长度大于或等于该转发长度阈值LSQab,则该写请求暂时不进入转发队列,进入阻塞状态,直到转发队列长度小于LSQab,从阻塞状态转换为工作状态,将写请求插入到该转发队列末尾,等待转发; (3-2)对协调者节点A中的数据副本进行判断,若协调者节点A中不存在与写请求对应的数据副本,则写请求不进入协调者节点A的执行队列,若协调者节点A中存在与写请求对应的数据副本,则当协调者节点A的执行队列MQa的队列长度小于上述执行队列的长度阈值L_MQa时,协调者节点A将写请求插入到执行队列MQa中,等待执行,当协调者节点A的执行队列长度大于或等于上述执行队列的长度阈值,写请求暂时不进入执行队列,进入阻塞状态,直到执行队列长度小于L_MQa时,从阻塞状态转换为工作状态,将写请求插入到执行队列中,等待执行; (4)协调者节点A依次将所有转发队列SQabe SQa中的写请求转发给对应的非协调者节点B e Sa ; (5)非协调者节点Be Sa接收到协调者节点A转发的写请求后,对本节点B的用于写请求的执行队列MQb的长度进行判断,若执行队列MQb的长度小于上述长度阈值L_MQb,则本节点B将写请求插入到执行队列MQb中,等待执行;若执行队列的长度大于或等于长度阈值L_MQb,则写请求不进入执行队列MQb,进入阻塞状态,直到执行队列长度小于L_MQb,从阻塞状态转换为工作状态,将写请求插入到执行队列中MQb,等待执行; (6)上述步骤(3-2)中插入了该写请求的协调者节点A与上述步骤(5)中的非协调者节点B e Sa执行本节点中执行队列中的写请求,若写请求操作失败,则减小执行队列长度L_MQ的值,减小方法为:使上述β = 0-1,根据公式1^1?= β若写请求操作成功,则该节点向协调者节点返回写入成功信息; (7)设定协调者节点需要接收到成功信息次数的阈值,在设定时间内,对协调者节点收集到成功信息的次数进行判断,若成功信息次数大于或等于成功信息次数阈值,则保持所有的LSQab (其中B e Sa)不变,若成功信息次数小于成功信息次数阈值,则减小所有的1SQab(其中B e Sa)的值,减小方法为:使上述α = α-l,根据公SL_SQAB = a XkXN_SQAB并重新计算所有的L_SQAB,其中B e Sa ; (8)对步骤(6)中执行写请求的节点的重新计算得到的执行队列长度L_MQ进行判断,若重新计算得到的执行队列长度L_MQ与该节点原有执行队列长度L_MQ不等,则使用该节点重新计算得到的执行队列长度L_MQ代替该节点原有的执行队列长度L_MQ ;若若重新计算得到的执行队列长度L_MQ与该节点原有执行队列长度L_MQ相等,则保持L_MQ不变; (9)分别对步骤(7)中协调者节点A和非协调者节点B(A e S,B e Sa)重新计算得到的转发队列长度L_SQffl进行判断,若重新计算得到的转发队列长度L_SQab与协调者节点A原转发队列长不等,则使用步骤(7)中重新计算得到的转发队列长度L_SQAB代替步骤(2)中的协调者节点A的转发队列长,若重新计算得到的转发队列长度L_SQab与协调者节点A原转发队列长度LSQab相等,则保持步骤(2)中的协调者节点A的转发队列长度L_SQab不变; (10)以步骤(8)和步骤(9)中的得到的转发队列长度和执行队列长度作为设定值,返回步骤⑶。
【文档编号】G06F17/30GK103986694SQ201410165580
【公开日】2014年8月13日 申请日期:2014年4月23日 优先权日:2014年4月23日
【发明者】王建民, 黄向东 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1