支持并发的客户端与服务器端的文档操作同步方法
【专利摘要】本发明涉及一种支持并发的客户端与服务器端的文档操作同步方法,包括以下步骤:1)将文档操作命令队列按照类型分为三种:普通命令队列NCQ、大数据上传队列BDQ和小数据上传队列SDQ,其中NCQ中包含所有待处理的文档操作命令,BDQ中包含所有的大数据量的文件的上传操作,SDQ中包含所有的小数据量的文件的上传操作;2)通过上传管理器Upload?Manager来管理整个文档操作的上传,Upload?Manager管理一个上传代理池Upload?Agent?Pool,上传代理池中包括NCQAgent、SDQ?Agent和BDQ?Agent,通过调用这些代理来完成一个控制命令或者数据上传命令。与现有技术相比,本发明具有提高传输效率、以避免大文件上传时间太长从而影响小文件的同步、解决队列堵塞的问题等优点。
【专利说明】支持并发的客户端与服务器端的文档操作同步方法
【技术领域】
[0001]本发明涉及一种分布式文件管理系统的同步技术,尤其是涉及一种支持并发的客户端与服务器端的文档操作同步方法。
【背景技术】
[0002]在一个传统的分布式文件管理系统中,为确保文档操作的一致性,在客户端的实现中,从某个特定的客户端到云存储平台的文档操作同步通常采用单一队列的模型来管理。所有待同步的文档操作都首先进入一个队列进行排队,按照先到先处理的机制,逐个同步队列中的文档操作,如图1所示。
[0003]这种单一队列的文档操作同步模型实现简单,能够确保操作的一致性,但存在以下不足:
[0004]不能实现并发同步,传输效率低;
[0005]如果中间有命令执行失败,通常的做法是无限期重试直到成功为止,导致队列堵塞;
[0006]如果队列中有操作耗时较长,例如大文件的传输,后续命令只能等待,导致队列堵塞;
[0007]以上问题,可能导致从客户端到云存储平台文档操作的同步效率较低,有些操作不能及时完成,造成客户端和服务器端的同步延迟,进而影响用户体验。
【发明内容】
[0008]本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种支持并发的客户端与服务器端的文档操作同步方法;提高传输效率,能够实现文件上传的有限量的并发;将大文件和小文件区分处理,以避免大文件上传时间太长从而影响小文件的同步;解决队列堵塞的问题,使得队列中不会出现由于个别命令执行失败而导致其它毫无关联的命令长时间等待。
[0009]本发明的目的可以通过以下技术方案来实现:
[0010]一种支持并发的客户端与服务器端的文档操作同步方法,其特征在于,包括以下步骤:
[0011]I)将文档操作命令队列按照类型分为三种:普通命令队列NCQ、大数据上传队列BDQ和小数据上传队列SDQ,其中NCQ中包含所有待处理的文档操作命令,BDQ中包含所有的大数据量的文件的上传操作,SDQ中包含所有的小数据量的文件的上传操作;
[0012]2)通过上传管理器Upload Manager来管理整个文档操作的上传,Upload Manager管理一个上传代理池Upload Agent Pool,上传代理池中包括NCQ Agent>SDQ Agent和BDQAgent,通过调用这些代理来完成一个控制命令或者数据上传命令;其中文档上传队列的管理包括以下步骤:
[0013](I)上传管理器Upload Manager进行初始化,包括初始化普通命令队列NCQ队列、大数据上传队列BDQ队列、小数据上传队列SDQ队列、NCQAgent、SDQAgent和BDQ Agent ;
[0014](2)Upload Manager执行逻辑,包括检查是否有应用层的请求、轮询NCQ队列、轮询SDQ队列和轮询BDQ队列。
[0015]所述的NCQ队列、BDQ队列和SDQ队列分别如下:
[0016]NCQ队列包含所有待同步的文档操作命令;
[0017]BDQ队列包含所有的大数据量文件的上传操作;
[0018]SDQ队列包含所有的小数据量文件的上传操作;
[0019]其中大数据量及小数据量的定义根据用户环境设置,即文件大小大于阈值的设置为大数据量文件,小于或者等于阈值的设置为小数据量文件;
[0020]客户端产生的所有的文档操作命令,首先添加到NCQ队列的末尾,若该命令为文件上传操作,则同时根据文件的大小,在相应的BDQ队列或者SDQ队列中添加一条文件上传命令,并建立和NCQ队列中相应命令的关联。
[0021]所述的NCQ队列采用顺序执行方式,BDQ队列和SDQ队列采用并发执行方式。
[0022]所述的NCQ Agent在NCQ队列中有命令需要执行时,执行队列中的命令;SDQAgent和BDQAgent分别用于执行SDQ队列和BDQ队列的数据上传,当SDQ队列中有命令等待执行时,分配处于空闲状态的SDQ Agent完成该同步指令,如果没有空闲的SDQ Agent,则需要等待正在工作的SDQ Agent变成空闲状态;当BDQ队列中有命令等待执行时,分配处于空闲状态的BDQ Agent完成该同步指令,如果没有空闲的BDQ Agent,则需要等待正在工作的BDQAgent变成空闲状态。
[0023]所述的Upload Manager检查是否有应用层的请求具体为:
[0024]若有操作需要添加到同步队列,则首先将该命令添加到NCQ队列的末尾;
[0025]若有操作需要取消,则将NCQ队列中该操作对应的命令删除;
[0026]若为查询操作,则从队列中获取对应的命令的状态,回复给上层应用。
[0027]所述的Upload Manager轮询NCQ队列具体为:
[0028]I)获取当前NCQ队列的队首命令;
[0029]2)判断队列是否为空,若为否,执行步骤3),否则结束;
[0030]3)判断当前命令状态是否异常,若为否,执行步骤4),否则结束;
[0031]4)判断是否为文件上传命令,若为是,执行步骤5),否则,执行步骤8);
[0032]5)通过文件大小判断为大数据量文件还是小数据量文件,若为大数据量文件,执行步骤6),否则执行步骤7);
[0033]6)在BDQ队列中添加文件上传命令,并将当前命令标记为异常,并返回步骤I);
[0034]7)在SDQ队列中添加文件上传命令,并将当前命令标记为异常,并返回步骤I);
[0035]8)调用NCQ Agent执行当前命令;
[0036]9)判断执行同步是否正常完成,若为是,执行步骤10),否则,进入异常处理流程;
[0037]10)判断当前命令是否被标记为异常,若为是,执行步骤11),否则返回步骤I):
[0038]11)遍历整个NCQ队列,将所有标记为依赖于当前命令的命令的依赖标记删除;
[0039]12)将当前命令从队列中移除,并将下一条命令设置为队首。
[0040]所述的异常处理流程具体为:
[0041]I)获取下一条命令的相关信息,并判断是否已经标记为依赖于当前命令,若为否,执行步骤2),否则继续执行步骤I);
[0042]2)分析是否与异常命令有关,若为是,执行步骤3),否则,将该命令移动到队列首位,并返回NCQ队列执行流程;
[0043]3)将该条命令标记为当前异常命令的关联命令。
[0044]所述的轮询SDQ队列具体流程如下:
[0045]I)获取当前SDQ队列的队首命令;
[0046]2)判断命令是否在执行中或队列为空,若均为否,执行步骤3),否则结束;
[0047]3)判断是否有空闲的SDQAgent,若为是,执行步骤4),否则等待空闲的SDQAgent,并继续执行步骤3);
[0048]4)将当前命令的状态设置为正在执行中,并移动到队列末尾;
[0049]5)调用SDQAgent执行当前命令;
[0050]6)判断为完成或异常,若为异常,返回步骤5),否则,执行步骤7);
[0051]7)释放 SDQ Agent ;
[0052]8)将当前命令从SDQ队列中删除;
[0053]9)将SDQ队列中关联的命令的异常标记去除,并返回步骤I)。
[0054]所述的轮询BDQ队列的流程同轮询SDQ队列,将SDQ队列改为BDQ队列,SDQ Agent改为 BDQ Agent。
[0055]所述的NCQ队列中的数据上传命令与SDQ队列或者BDQ队列中的命令通过关联命令ID建立一对一的对应关系;
[0056]NCQ队列中的数据上传命令的执行完全依赖于SDQ队列或者BDQ队列中对应的上传命令的执行;在NCQ中,当命令执行到某个数据上传命令时,Upload Manager会在SDQ或者BDQ中添加一条数据上传命令,并将NCQ中对应命令的状态设置为等待状态;同时,Upload Manager会将NCQ中的该条命令对应的ID记录到关联的SDQ或者BDQ的命令记录中;当SDQ或者BDQ中对应的数据上传命令执行完成后,SDQ或者BDQ会通知UploadManager, Upload Manager随后会将NCQ中对应的命令设置为执行完成,进行下一条命令的执行。
[0057]与现有技术相比,本发明具有以下优点:
[0058]I)通过文件上传的有限量的并发,提高客户端到服务器端文档同步的效率。
[0059]2)通过将大文件和小文件区分处理,避免大文件上传时长时间占用资源从而影响小文件的同步,这种策略可以均衡大文件与小文件的上传速度,提高用户体验。
[0060]3)解决队列堵塞的问题,使得队列中不会出现由于个别命令执行失败而导致其它毫无关联的命令长时间等待。
【专利附图】
【附图说明】
[0061]图1为单一队列的文档操作同步模型示意图;
[0062]图2为支持并发的文档操作同步队列模型示意图;
[0063]图3为文档操作并发控制示意图;
[0064]图4为NCQ中的命令与SDQ、BDQ中的命令的关联关系示意图;
[0065]图5为异常处理示意图(I);[0066]图6为异常处理示意图(2);
[0067]图7为异常处理示意图(3);
[0068]图8为异常处理示意图⑷;
[0069]图9为异常处理示意图(5);
[0070]图10为异常处理示意图(6);
[0071]图11为NCQ队列结构示意图;
[0072]图12为SDQ队列结构示意图;
[0073]图13为BDQ队列结构示意图;
[0074]图14为NCQ队列中命令的执行流程图;
[0075]图15为NCQ队列中命令执行异常时的处理流程图;
[0076]图16为SDQ队列中命令的执行流程图。
【具体实施方式】
[0077]下面结合附图和具体实施例对本发明进行详细说明。
[0078]实施例1
[0079]本发明采用支持并发的文件操作同步模型,基于此模型,可以解决传统单队列模型中的缺陷,从而提升同步的效率。
[0080]将文件操作分为两大类:控制命令及数据上传命令,数据上传命令根据需要上传的数据大小可以分为大数据上传命令及小数据上传命令。大数据和小数据的大小限制可按实际环境设定。
[0081]通过三个队列来管理所有文件操作:控制命令队列、大数据上传队列、小数据上传队列。其中控制命令队列为顺序串行执行,而大数据上传队列及小数据上传队列中的指令可以进行有限的并发执行。
[0082]提出同步队列的异常处理机制,当有操作处理发生异常时,能够避免队列的堵塞。
[0083]提出队列的并发管理模型,允许有限的并发执行,提高同步效率。
[0084]1.支持并发的文档操作同步队列模型
[0085]1.1、文档操作命令的分类
[0086]文档操作命令可以分为控制命令及数据上传命令两种。
[0087]控制命令中均为针对文件或者文件夹的原子操作。文件操作的控制命令为:创建文件、删除文件、重命名文件。文件夹操作的控制命令为:创建文件夹、删除文件夹、重命名文件夹。数据上传命令只有一种,S卩:文件内容的上传命令。其它常见的文档操作,例如:复制,剪切等,都通过以上命令组合实现。
[0088]1.2、文档操作同步队列模型
[0089]文档操作命令队列,按照类型可以分为三种:普通命令队列(Normal CommandQueue,简称NCQ),大数据上传队列(Big Data Queue,简称BDQ),小数据上传队列(SmallData Queue,简称SDQ)。其中普通命令队列中包含所有待处理的文档操作命令,大数据上传队列中包含所有的大数据量的文件的上传操作,小数据上传队列中包含所有的小数据量的文件的上传操作。大数据量及小数据量的定义根据用户环境设置,例如:文件大小大于50M设置为大数据文件,小于或者等于50M的设置为小数据文件。[0090]客户端产生的所有的文档操作命令,首先添加到NCQ队列的末尾。如果该命令为文件上传操作,则同时根据文件的大小,在相应的BDQ或者SDQ中添加一条数据上传命令,并建立和普通控制命令队列中相应命令的关联。
[0091 ] Upload Manager负责队列的操作管理以及队列之间的同步。文档操作同步队列模型如下图2所示。
[0092]2.文档操作同步的并发控制机制
[0093]2.1、文档操作同步的并发控制机制
[0094]在文档操作同步队列模型中,NCQ中的操作由于其包含信息量小,占用网络资源很小,执行速度较快,所以顺序串行执行。BDQ和SDQ中的操作均为文件内容从客户端到服务器端的上传操作,信息量较大,占用网络资源大,执行速度较慢,所以允许其并发执行以提高批量文件上传的效率。另外将大数据量文件上传和小数据量文件上传分离可以避免大数据量文件长时间独占资源,占用上传通道,从而导致小文件的上传延迟。
[0095]Upload Manager管理着一个上传代理池(Upload Agent Pool),上传代理池中有多个代理(Upload Agent),这些代理可以来供调配来完成一个控制命令或者数据上传命令。一个Upload Agent有两种状态:工作中,空闲。
[0096]有一个专门的Upload Agent供NCQ使用,称为NCQ Agent。当NCQ中有命令需要执行时,该Upload Agent开始工作,执行队列中的命令。
[0097]根据需要,分别设置多个Upload Agent给BDQ及SDQ中的数据上传命令使用。具体个数根据实际环境而定。
[0098]由于BDQ和SDQ中的命令可以并行执行。当SDQ中有命令等待执行时,分配处于空闲状态的SDQ Agent完成该同步指令,如果没有空闲的SDQ Agent,则需要等待正在工作的SDQ Agent变成空闲状态。当BDQ中有命令等待执行时,分配处于空闲状态的BDQ Agent完成该同步指令,如果没有空闲的BDQ Agent,则需要等待正在工作的BDQ Agent变成空闲状态,如图3所示。
[0099]2.2、NCQ与SDQ和BDQ之间的关联机制
[0100]NCQ中包含所有待处理的文档操作命令,包括控制命令和数据上传命令。针对数据上传命令,在SDQ或者BDQ中同时有一个数据上传命令相对应。这种关系是一对一的关系。由于NCQ中维护着整个文档操作的顺序及依赖关系,所以NCQ中的数据上传命令的执行完全依赖于SDQ或者BDQ中对应的上传命令的执行。在NCQ中,当命令执行到某个数据上传命令时,Upload Manager会在SDQ或者BDQ中添加一条数据上传命令,并将NCQ中对应命令的状态设置为等待状态;同时,Upload Manager会将NCQ中的该条命令对应的ID记录到关联的SDQ或者BDQ的命令记录中。当SDQ或者BDQ中对应的数据上传命令执行完成后,SDQ或者BDQ会通知Upload Manager, Upload Manager随后会将NCQ中对应的命令设置为执行完成,进行下一条命令的执行。
[0101]为实现以上机制,NCQ中的数据上传命令与SDQ或者BDQ中的命令通过关联命令ID建立一对一的对应关系,这个对应关系由Upload Manager来建立和维护,如下图4所示。
[0102]3.异常处理机制
[0103]3.UNCQ中操作之间的关联关系
[0104]3.1.1、文件夹操作指令与其他操作指令相关性分析,如表I所示,其中“Y”表示相关,“N”表示不相关
[0105]表 I
【权利要求】
1.一种支持并发的客户端与服务器端的文档操作同步方法,其特征在于,包括以下步骤: 1)将文档操作命令队列按照类型分为三种:普通命令队列NCQ、大数据上传队列BDQ和小数据上传队列SDQ,其中NCQ中包含所有待处理的文档操作命令,BDQ中包含所有的大数据量的文件的上传操作,SDQ中包含所有的小数据量的文件的上传操作; 2)通过上传管理器UploadManager来管理整个文档操作的上传,Upload Manager管理一个上传代理池Upload Agent Pool,上传代理池中包括NCQ Agent、SDQ Agent和BDQAgent,通过调用这些代理来完成一个控制命令或者数据上传命令;其中文档上传队列的管理包括以下步骤: (1)上传管理器UploadManager进行初始化,包括初始化普通命令队列NCQ队列、大数据上传队列BDQ队列、小数据上传队列SDQ队列、NCQAgent、SDQAgent和BDQ Agent ; (2)Upload Manager执行逻辑,包括检查是否有应用层的请求、轮询NCQ队列、轮询SDQ队列和轮询BDQ队列。
2.根据权利要求1所述的一种支持并发的客户端与服务器端的文档操作同步方法,其特征在于,所述的NCQ队列、BDQ队列和SDQ队列分别如下: NCQ队列包含所有待同步的文档操作命令; BDQ队列包含所有的大数据量文件的上传操作; SDQ队列包含所有的小数据量文件的上传操作; 其中大数据量及小数据量的定义根据用户环境设置,即文件大小大于阈值的设置为大数据量文件,小于或者等于阈值的设置为小数据量文件; 客户端产生的所有的文档操作命令,首先添加到NCQ队列的末尾,若该命令为文件上传操作,则同时根据文件的大小,在相应的BDQ队列或者SDQ队列中添加一条文件上传命令,并建立和NCQ队列中相应命令的关联。
3.根据权利要求2所述的一种支持并发的客户端与服务器端的文档操作同步方法,其特征在于,所述的NCQ队列采用顺序执行方式,BDQ队列和SDQ队列采用并发执行方式。
4.根据权利要求3所述的一种支持并发的客户端与服务器端的文档操作同步方法,其特征在于,所述的NCQ Agent在NCQ队列中有命令需要执行时,执行队列中的命令;SDQAgent和BDQ Agent分别用于执行SDQ队列和BDQ队列的数据上传,当SDQ队列中有命令等待执行时,分配处于空闲状态的SDQ Agent完成该同步指令,如果没有空闲的SDQ Agent,则需要等待正在工作的SDQ Agent变成空闲状态;当BDQ队列中有命令等待执行时,分配处于空闲状态的BDQ Agent完成该同步指令,如果没有空闲的BDQAgent,则需要等待正在工作的BDQAgent变成空闲状态。
5.根据权利要求4所述的一种支持并发的客户端与服务器端的文档操作同步方法,其特征在于,所述的Upload Manager检查是否有应用层的请求具体为: 若有操作需要添加到同步队列,则首先将该命令添加到NCQ队列的末尾; 若有操作需要取消,则将NCQ队列中该操作对应的命令删除; 若为查询操作,则从队列中获取对应的命令的状态,回复给上层应用。
6.根据权利要求5所述的一种支持并发的客户端与服务器端的文档操作同步方法,其特征在于,所述的Upload Manager轮询NCQ队列具体为:1)获取当前NCQ队列的队首命令; 2)判断队列是否为空,若为否,执行步骤3),否则结束; 3)判断当前命令状态是否异常,若为否,执行步骤4),否则结束; 4)判断是否为文件上传命令,若为是,执行步骤5),否则,执行步骤8); 5)通过文件大小判断为大数据量文件还是小数据量文件,若为大数据量文件,执行步骤6),否则执行步骤7); 6)在BDQ队列中添加文件上传命令,并将当前命令标记为异常,并返回步骤I); 7)在SDQ队列中添加文件上传命令,并将当前命令标记为异常,并返回步骤I): 8)调用NCQAgent执行当前命令; 9)判断执行同步是否正常完成,若为是,执行步骤10),否则,进入异常处理流程; 10)判断当前命令是否被标记为异常,若为是,执行步骤11),否则返回步骤I); 11)遍历整个NCQ队列,将所有标记为依赖于当前命令的命令的依赖标记删除; 12)将当前命令从队列中移除,并将下一条命令设置为队首。
7.根据权利要求6所述的一种支持并发的客户端与服务器端的文档操作同步方法,其特征在于,所述 的异常处理流程具体为: 1)获取下一条命令的相关信息,并判断是否已经标记为依赖于当前命令,若为否,执行步骤2),否则继续执行步骤I); 2)分析是否与异常命令有关,若为是,执行步骤3),否则,将该命令移动到队列首位,并返回NCQ队列执行流程; 3)将该条命令标记为当如异常命令的关联命令。
8.根据权利要求6所述的一种支持并发的客户端与服务器端的文档操作同步方法,其特征在于,所述的轮询SDQ队列具体流程如下: 1)获取当前SDQ队列的队首命令; 2)判断命令是否在执行中或队列为空,若均为否,执行步骤3),否则结束; 3)判断是否有空闲的SDQAgent,若为是,执行步骤4),否则等待空闲的SDQ Agent,并继续执行步骤3); 4)将当前命令的状态设置为正在执行中,并移动到队列末尾; 5)调用SDQAgent执行当前命令; 6)判断为完成或异常,若为异常,返回步骤5),否则,执行步骤7); 7)释放SDQAgent ; 8)将当前命令从SDQ队列中删除; 9)将SDQ队列中关联的命令的异常标记去除,并返回步骤l)a。
9.根据权利要求7所述的一种支持并发的客户端与服务器端的文档操作同步方法,其特征在于,所述的轮询BDQ队列的流程同轮询SDQ队列,将SDQ队列改为BDQ队列,SDQAgent 改为 BDQAgent。
10.根据权利要求2所述的一种支持并发的客户端与服务器端的文档操作同步方法,其特征在于,所述的NCQ队列中的数据上传命令与SDQ队列或者BDQ队列中的命令通过关联命令ID建立一对一的对应关系; NCQ队列中的数据上传命令的执行完全依赖于SDQ队列或者BDQ队列中对应的上传.命令的执行;在NCQ中,当命令执行到某个数据上传命令时,Upload Manager会在SDQ或者BDQ中添加一条数据上传命令,并将NCQ中对应命令的状态设置为等待状态;同时,UploadManager会将NCQ中的该条命令对应的ID记录到关联的SDQ或者BDQ的命令记录中;当SDQ或者BDQ中对应的数据上传命令执行完成后,SDQ或者BDQ会通知Upload Manager, UploadManager随后会将NCQ中对应的命令设置为执行完成,进行下一条命令的执行。
【文档编号】H04L29/08GK103607451SQ201310582305
【公开日】2014年2月26日 申请日期:2013年11月18日 优先权日:2013年11月18日
【发明者】黄君洲 申请人:上海爱数软件有限公司