一种在线请求处理方法及装置转让专利

申请号 : CN201910385539.6

文献号 : CN110275781A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘钧石

申请人 : 北京善义善美科技有限公司

摘要 :

本发明涉及一种在线请求处理方法及装置,其中,所述装置包括:缓存器,其经配置以存储一个或多个在线请求;多个请求注册模块,其经配置为所述缓存器中未注册的在线请求注册任务;以及锁管理模块,其经配置以管理分布式锁,使所述多个请求注册模块通过分布式锁互斥地注册任务。本发明解决了某些系统中重复提交一个请求时造成的大量脏数据的问题及重复请求造成的可能产生的并发问题。

权利要求 :

1.一种在线请求处理装置,包括:

缓存器,其经配置以存储一个或多个在线请求;

多个请求注册模块,其经配置为所述缓存器中未注册的在线请求注册任务;以及锁管理模块,其经配置以管理分布式锁,使所述多个请求注册模块通过分布式锁互斥地注册任务。

2.根据权利要求1所述的在线请求处理装置,其中所述请求注册模块为分布在集群中的实体。

3.根据权利要求2所述的在线请求处理装置,其中所述实体为在服务器或计算机系统中运行的进程。

4.根据权利要求1所述的在线请求处理装置,其中所述请求注册模块经进一步配置以批量地为未注册的在线请求注册任务。

5.根据权利要求4所述的在线请求处理装置,其中所述请求注册模块经进一步配置,在批量地为未注册的在线请求注册任务时,采用线程锁使多个注册任务线程互斥地注册任务。

6.根据权利要求5所述的在线请求处理装置,其中所述多个线程在多个网络节点上实现。

7.根据权利要求1所述的在线请求处理装置,其中所述锁管理模块为多个,多个锁管理模块共享锁管理信息。

8.根据权利要求7所述的在线请求处理装置,其中所述多个锁管理模块中的一个为主锁管理模块,经配置用以在主锁管理模块无法管理分布式锁时,一个备锁管理模块升为主锁管理模块。

9.根据权利要求1所述的在线请求处理装置,其中所述分布式锁基于数据库、或者基于Redis、或者基于ZooKeeper实现。

10.根据权利要求1所述的在线请求处理装置,其中所述注册模块经配置以至少部分基于请求者和请求事项注册所述在线请求的任务。

11.根据权利要求1所述的在线请求处理装置,其中所述注册模块经配置以至少部分基于请求者、被请求者和请求事项注册所述在线请求的任务。

12.一种在线请求处理方法,其中,包括:

在接收到一个或多个在线请求时,将所述在线请求发送给请求注册模块;

请求注册模块向锁管理模块发送锁申请,其中,所述锁申请至少包括在线请求标记和请求注册模块标识;

锁管理模块根据锁申请中的在线请求标记和请求注册模块标识查询锁管理信息,在分布式锁空闲、且在线请求未注册时,向所述请求注册模块发送分布式锁的授权信息;

所述请求注册模块接收到分布式锁的授权信息时,为在线请求注册任务,并在注册任务完成后,发送锁释放通知给所述锁管理模块;

所述锁管理模块根据所述锁释放通知释放所述分布式锁,并修改锁管理信息。

13.根据权利要求12所述的在线请求处理方法,其中还包括:根据负载均衡策略,将接收到一个或多个在线请求发送给请求注册模块。

14.根据权利要求12所述的在线请求处理方法,其中还包括:从多个锁管理模块中指定一个为主锁管理模块,在主锁管理模块无法管理分布式锁时,将一个备锁管理模块升为主锁管理模块。

15.根据权利要求12所述的在线请求处理方法,其中,发送给请求注册模块的在线请求为一个或多个。

16.根据权利要求15所述的在线请求处理方法,其中,所述请求注册模块在为在线请求注册任务时,当在线请求为多个时,采用线程锁使多个注册任务线程互斥地注册任务。

17.根据权利要求12所述的在线请求处理方法,所述请求注册模块在为在线请求注册任务时,至少部分基于在线请求的请求者和请求事项注册所述在线请求的任务,或者至少部分基于请求者、被请求者和请求事项注册所述在线请求的任务。

18.根据权利要求12所述的在线请求处理方法,其中,所述锁管理信息至少包括分布式锁的状态、请求注册模块标识、请求注册模块处理过的在线请求信息。

19.根据权利要求12所述的在线请求处理方法,其中,所述在线请求信息至少包括注册状态。

说明书 :

一种在线请求处理方法及装置

技术领域

[0001] 本发明涉及一种数据处理技术领域,特别地,涉及一种在线请求处理方法及装置。

背景技术

[0002] 随着互联网技术的发展,线上和线下融合的经营模式越来越受到用户的青睐。在线下的场景中,很多时候网络条件并不理想,经常出现用户端重复发送请求的情形。这种重复请求造成大量脏数据,并可能引发很多的并发问题。因此,本领域中需要一种处理这些重复请求的方法。

发明内容

[0003] 针对现有技术中存在的技术问题,本发明提出了一种在线请求处理方法及装置,用于解决重复请求造成的脏数据及并发等问题。
[0004] 为了解决上述问题,本发明提出了一种在线请求处理装置,包括:
[0005] 缓存器,其经配置以存储一个或多个在线请求;
[0006] 多个请求注册模块,其经配置为所述缓存器中未注册的在线请求注册任务;以及[0007] 锁管理模块,其经配置以管理分布式锁,使所述多个请求注册模块通过分布式锁互斥地注册任务。
[0008] 优选地,所述请求注册模块为分布在集群中的实体。
[0009] 优选地,所述实体为在服务器或计算机系统中运行的进程。
[0010] 优选地,所述请求注册模块经进一步配置以批量地为未注册的在线请求注册任务。
[0011] 优选地,所述请求注册模块经进一步配置,在批量地为未注册的在线请求注册任务时,采用线程锁使多个注册任务线程互斥地注册任务。
[0012] 优选地,所述多个线程在多个网络节点上实现。
[0013] 优选地,所述锁管理模块为多个,多个锁管理模块共享锁管理信息。
[0014] 优选地,所述多个锁管理模块中的一个为主锁管理模块,经配置用以在主锁管理模块无法管理分布式锁时,一个备锁管理模块升为主锁管理模块。
[0015] 优选地,所述分布式锁基于数据库、或者基于Redis、或者基于ZooKeeper实现。
[0016] 优选地,所述注册模块经配置以至少部分基于请求者和请求事项注册所述在线请求的任务。
[0017] 优选地,所述注册模块经配置以至少部分基于请求者、被请求者和请求事项注册所述在线请求的任务。
[0018] 为了解决前述技术问题,本发明还提供了一种在线请求处理方法,其中,包括:
[0019] 在接收到一个或多个在线请求时,将所述在线请求发送给请求注册模块;
[0020] 请求注册模块向锁管理模块发送锁申请,其中,所述锁申请至少包括在线请求标记和请求注册模块标识;
[0021] 锁管理模块根据锁申请中的在线请求标记和请求注册模块标识查询锁管理信息,在分布式锁空闲、且在线请求未注册时,向所述请求注册模块发送分布式锁的授权信息;
[0022] 所述请求注册模块接收到分布式锁的授权信息时,为在线请求注册任务,并在注册任务完成后,发送锁释放通知给所述锁管理模块;
[0023] 所述锁管理模块根据所述锁释放通知释放所述分布式锁,并修改锁管理信息。
[0024] 优选地,所述在线请求处理方法还包括:根据负载均衡策略,将接收到一个或多个在线请求发送给请求注册模块。
[0025] 优选地,所述的在线请求处理方法还包括:
[0026] 从多个锁管理模块中指定一个为主锁管理模块,在主锁管理模块无法管理分布式锁时,将一个备锁管理模块升为主锁管理模块。
[0027] 优选地,在所述的在线请求处理方法中,发送给请求注册模块的在线请求为一个或多个。
[0028] 优选地,在所述的在线请求处理方法中,所述请求注册模块在为在线请求注册任务时,当在线请求为多个时,采用线程锁使多个注册任务线程互斥地注册任务。
[0029] 优选地,在所述的在线请求处理方法中,所述请求注册模块在为在线请求注册任务时,至少部分基于在线请求的请求者和请求事项注册所述在线请求的任务,或者至少部分基于请求者、被请求者和请求事项注册所述在线请求的任务。
[0030] 优选地,在所述的在线请求处理方法中,所述锁管理信息至少包括分布式锁的状态、请求注册模块标识、请求注册模块处理过的在线请求信息。
[0031] 优选地,地所述的在线请求处理方法中,所述在线请求信息至少包括注册状态。
[0032] 通过以上方案,本发明在接收到重复在线请求时,在为在线请求注册任务时过滤掉重复的申请,从而解决了因为重复在线请求而产生的脏数据,及在执行任务时可能带来的并发问题。

附图说明

[0033] 下面,将结合附图对本发明的优选实施方式进行进一步详细的说明,其中:
[0034] 图1是根据本发明的一个实施例的分布式集群的原理框图;
[0035] 图2是根据本发明的一个实施例的请求注册模块的处理流程图;
[0036] 图3是根据本发明的一个实施例的锁管理模块的处理流程图;以及
[0037] 图4是根据本发明的一个应用实施例的分布式集群的原理框图。

具体实施方式

[0038] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0039] 在以下的详细描述中,可以参看作为本申请一部分用来说明本申请的特定实施例的各个说明书附图。在附图中,相似的附图标记在不同图式中描述大体上类似的组件。本申请的各个特定实施例在以下进行了足够详细的描述,使得具备本领域相关知识和技术的普通技术人员能够实施本申请的技术方案。应当理解,还可以利用其它实施例或者对本申请的实施例进行结构、逻辑或者电性的改变。
[0040] 如图1所示,是根据本发明的一个实施例的包括在线请求处理装置的分布式集群的原理框图,所述的分布式集群由多个网络节点51-56组成,其中,在本实施例中的网络节点的数量并不局限于图中所示的6个,可根据实际需求增加或减少。所述的网络节点可以实施为一如服务器、一个计算机系统,或者是一组服务器等。在线请求处理装置包括缓存器1、多个请求注册模块20、21、2n和多个锁管理模块30、31、3m。其中,请求注册模块20、21、2n和锁管理模块30、31、3m分别为运行在网络节点51-56上的实体,如进程。缓存器1用以存储一个或多个在线请求。请求注册模块20、21、2n为所述缓存器中未注册的请求注册任务。锁管理模块30、31、3m共享锁管理信息,用于管理分布式锁,使所述多个请求注册模块通过分布式锁互斥地为在线请求注册任务。
[0041] 在所述分布式集群中,为了平衡各个网络节点的负载,在所述集群系统中还设置有负载均衡器4,用于将于根据网络节点的负载情况将缓存器1中的在线请求分配给相应的请求注册模块。
[0042] 基于图1中的分布式集群的在线请求处理方法中,请求注册模块方面的处理流程如图2所示,对应地,锁管理模块的处理流程如图3所示,具体说明如下:
[0043] 步骤S100,分布式集群接收在线请求,并将其存储在缓存器1中。
[0044] 步骤S101,负载均衡器4查看各个网络节点51-56的负载情况,将缓存器1中的在线请求发送给某一请求注册模块,如请求注册模块20。
[0045] 步骤S102,请求注册模块20接收到所述在线请求后,向一个锁管理模块,如锁管理模块30发送分布式锁申请。其中,所述分布式锁申请包括请求注册模块标识和在线请求的标识,例如在一个实施例中,请求注册模块的标识为20,在线请求的标识为0007。
[0046] 步骤S103,在发出分布式锁申请后,判断是否收到来自锁管理模块30的应答消息。如果收到,则执行步骤S104。如果没有收到来自锁管理模块30的应答消息,则在步骤S108等待,并重新返回步骤S103。
[0047] 步骤S104,判断收到的应答消息是否为应答消息1,其中,应答消息1中包括了当前申请处理的请求0007已注册过的通知,如果收到的应答消息是应答消息1,则转向步骤S109,放弃所述在线请求,并结束处理流程。如果收到的不是应答消息1,转向步骤S105。
[0048] 步骤S105,判断收到的应答消息是否为应答消息2,其中,应答消息2中包括了锁授权信息。如果收到的应答消息是应答消息2,则转向步骤S106。如果收到的不是应答消息2,转向步骤S110。
[0049] 步骤S106,请求注册模块20为所述请求0007注册任务。
[0050] 步骤S107,请求注册模块20在注册完任务后,向锁管理模块30发送锁释放通知,并结束对该请求的处理流程。
[0051] 步骤S110,判断判断收到的应答消息是否为应答消息3,其中,所述应答消息3中包括要求请求注册模块20等待的通知。如果是的话,转向步骤S108等待,并返回步骤S103。如果收到的不是应答消息3,说明此消息不是应答消息,则结束此流程。
[0052] 如图3所示,当锁管理模块30收到来自请求注册模块20的分布式锁申请消息时,处理流程如下:
[0053] 步骤S200,锁管理模块30接收到分布式锁申请后,查询锁管理信息,其中,所述的锁管理信息的一个例子如表1所示:包括锁状态、请求注册模块的标识、与请求注册模块对应的在线请求的标识及其状态。其中,锁状态分为“空闲”和“忙”,在线请求标识包括“已注册”和“正在注册”。
[0054] 表1
[0055]
[0056] 在当前表1中,当前锁状态为“空闲”,请求注册模块20已处理过在线请求0001、0003、0006,请求注册模块21已处理过的请求0002,请求注册模块22已处理过请求0004,请求注册模块23已处理过请求0005。
[0057] 步骤S201,通过查询该表判断分布式锁申请中的在线请求是否为已注册,即分布式锁申请中的在线请求标识是否在锁管理信息中。如果分布式锁申请中的在线请求标识在锁管理信息中,则在步骤206向请求注册模块20返回应答消息1,在应答消息1中包括请求0007已注册的通知,并结束处理流程。如果分布式锁申请中的在线请求标识不在锁管理信息中,在步骤S202,判断锁状态是否为“空闲”,如果为“空闲”,则在步骤203,向请求注册模块20返回应答消息2,在应答消息2中包括锁授权信息,同时将锁管理信息中的锁状态修改为“忙”,并将请求0007的标识增加到对应请求注册模块20的请求标识中,注明为“正在注册”,则表1变为表2:
[0058] 表2
[0059]
[0060] 如果锁状态是忙,则在步骤S207返回应答消息3,通知请求注册模块20等待。
[0061] 步骤S204,在发出应答消息2时,等待并监测来自请求注册模块20的锁释放通知。
[0062] 步骤S205,判断是否收到锁释放通知,如果收到,则在步骤S206中修改锁管理信息,将锁管理信息中的锁状态修改为“空闲”、将请求0007的状态修改为“已注册”,并结束处理流程,此时的锁管理信息如表3所示。如果还没有收到来自请求注册模块20的锁释放通知,则返回步骤S204继续等待。
[0063] 表3
[0064]
[0065] 在前述的实施例,请求注册模块20每次中只收到一个在线请求,因而每次只为一个在线请求注册任务。在另一个实施例中,负载均衡器4根据各个网络节点的负载情况,可以向一个请求注册模块一次分配多个在线请求。例如,请求注册模块21所在的网络节点负载很轻,因而负载均衡器4为请求注册模块21一次分配3个请求0005,0009和0010。此时,请求注册模块21向锁管理模块30发送分布式锁申请中包括三个在线请求的标识。锁管理模块30根据三个三线请求标识及当前锁状态确定在返回的消息中增加的通知内容。例如,如果这三个请求标识中有部分或全部已为已注册状态,例如,根据当前锁管理信息,请求0005已被请求注册模块23注册,当前锁状态为空闲,所以在返回给请求注册模块2的应答消息中加入请求0005为已注册的请求的通知和请求0009、0010的授权信息。请求注册模块21在收到该应答消息后,放弃所述请求0005,启动多个线程,采用线程锁为请求0009、0010互斥地注册任务。其中,所述的线程锁与分布式锁的原理类似,在此不再赘述。另外,所述多个线程可以分而在多个机器上实现。
[0066] 在本发明中,多个锁管理模块30、31、32中的一个为主锁管理模块,其他为备用管理模块,例如,可以指定锁管理模块30为主锁管理模块,锁管理模块31、32为备用管理模块。主、备锁管理模块共享锁管理信息,在应用中,主锁管理模块进行分布式锁及其管理信息的管理,当主锁管理模块出现故障时,其中的一个备锁管理模块则指定为主锁管理模块继续分布式锁的管理。
[0067] 在前述说明中,所述分布式锁的实现可以包括但不限于:基于数据库、或者基于Redis、或者基于ZooKeeper实现。可根据具体的应用场景选择具体的实现方式。
[0068] 在本发明中,请求注册模块至少部分基于请求者和请求事项来为所述请求注册任务。也可以至少部分基于请求者、被请求者和请求事项注册所述请求的任务。例如,当所述的在线请求中为一个车辆买卖合同的请求时,该请求中至少应包括请求者(买方)、请求事项(车辆买卖合同),其中的卖方可以为系统设置的默认方。所以,当请求注册模块在注册任务时,需要于少提供请求者(买方)和请求事项(车辆买卖合同)这两个信息相关系统在执行该任务时,会根据这两个信息生成一个基于买方、默认卖方的车辆买卖合同。
[0069] 应用实施例
[0070] 如图4所示,是根据本发明应用实施例的分布式集群的原理框图。本实施例提供了一种在线交易系统,包括多个应用端101a、102a、103a和服务端,应用端为在线服务的提供端,包括各种通过电脑、平板等运行的在线交易平台或手机APP,用于为用户提供信息浏览、输出、在线请求的输入等功能。应用端还可以包括线交易平台的管理端,用于根据平台内部员工的操作权限,曾其提供对应的管理界面。服务端包括负载均衡服务器401a和各种服务器51a-54a、数据库6a1、62a及各个系统,如用户系统、订单系统等。其中,负载均衡服务器401a中包括缓存器402a,用于存储接收的在线请求。所述在线请求或者来自于用户,如订单请求、信息索引请求等;或者来自于平台员工,如用于申请合同文本的在线请求等。负载均衡服务器401a监测并管理各个服务器51a-54a的负载情况,根据配置的负载均衡策略平衡多个服务器51a-54a的负载,保证整个集群的稳定、高效运行。负载均衡服务器401a将缓存器402a中的在线请求根据各个服务器51a-52a的负载情况,分配给对应的服务器。
[0071] 每个服务器中设有请求注册模块,用于为发送来的在线请求注册任务。在本实施例中,在其中的三个服务器中,每一个服务器还包括锁管理模块,并且通过配置,指定一个作为主锁管理模块,其余为备锁管理模块。锁管理信息存储在数据库62a中,为三个锁管理模块共享。例如,将锁管理模块31a设置为主锁管理模块,其管理分布式锁的分配和释放,通过所述的分布式锁,使得同一时刻,只能有一个请求注册模块为在线请求注册任务,既避免了对重复在线请求重复注册任务,也避免了多个请求注册模块同时工作时带来的数据不一致的问题。
[0072] 在一个实施例中,当一项申请的被多次操作后,会产生多个相同的在线申请。例如,当用户在应用端中的线交易平如中请求车辆信息时,如果用户点击两次申请按钮时,则产生了两个相同的在线请求。又例如,当内部员工为了获取某台车辆的交易合同时,通过应用端中的特定界面,点击相应的按钮发送一个获取合同的在线请求。但是,当操作失当、点击了多次时,产生了多个相同的在线请求,如内部的一个员工在应用端102a产生了两个在线请求,例如标记为00A1,用于获取合同。而用户在应用端101a产生了一个请求00A2用于请求某个车辆信息。
[0073] 应用端产生的两个在线请求00A1和请求00A2发送到负载均衡服务器401中的缓存器402中,并由负载均衡服务器401将这些在线请求根据各个服务器51-52的负载情况,分配给对应的服务器。例如。将一个请求00A1发送给了服务器51a中的请求注册模块21a,将另一个请求00A1发送给了服务器53a中的请求注册模块23a,将请求00A2发送给了服务器55a中的请求注册模块24a。
[0074] 请求注册模块收到在线申请后,在注册任务之前,需要向主锁管理模块31a申请分布式锁。由于请求注册模块21a、23a、24a都收到了在线申请,因而其分别向主锁管理模块31a发送锁申请。
[0075] 主锁管理模块31a在收到锁申请时,根据收到的锁申请的先后来处理每一个锁申请。例如,当最先收到请求注册模块21a的锁申请时,按照图2和图3的流程处理。在此不再赘述。由于请求注册模块21a要处理的请求00A1没有在锁管理信息中,因而,主锁管理模块31a将分布式锁分配给了请求注册模块21a,此时,请求注册模块23a、24a只能等待。在请求注册模块21a为请求00A1注册完任务后,主锁管理模块31a释放所述分布式锁,并修改数据库的锁管理信息,将请求00A1增到锁管理信息中。主锁管理模块31a处理下一个锁申请,例如来自于请求注册模块23a的请求00A1,由于来自请求注册模块23a请求00A1与来自请求注册模块21a请求00A1是同一个内容的请求,并且请求00A1已注册完成,因而不需要请求注册模块23a再为请求00A1注册任务。从而可见,尽管操作者在提交在线请求时,提交了多次,但是通过本实施例提供的方案,只注册一次,从而减少了系统内因重复请求造成的大量脏数据及由重复请求可能引起的并发等问题。
[0076] 锁管理模块31a在处理完请求注册模块23a的请求00A1后,顺序处理下一个锁申请,即请求注册模块24a的请求00A2,过程如图2和图3所示。由于请求00A2没有注册过,因而在分布式锁空闲时,将分布式锁分配给请求注册模块24a为请求00A2注册。
[0077] 在服务器的运行过程中,如果锁管理模块31a或其所在的服务器51a出现故障,为了防止锁管理模块故障后无法继续管理分布式锁,在本实施例中,在三个不同的服务器中各自设置了一个锁管理模块,并通过配置,当主锁管理模块故障时,由另一个锁管理模块(如锁管理模块32a)由备锁管理模块自动升为主锁管理模块,接替原来的主锁管理模块管理分布式锁。从而避免了当锁管理模块出现故障无法管理分布式锁时造成分布式锁无法释放或分配的问题。
[0078] 上述实施例仅供说明本发明之用,而并非是对本发明的限制,本技术领域的普通技术人员可以根据实施例的说明,做一些方案的等同替换或修改,例如,将锁管理信息中的在线请求的信息中增加请求者和请求事项,还可以增加被请求者的信息,对应的锁管理模块在判断当前锁申请中的在线请求是否已处理过时,还可以通过对比请求者和请求事项是否相同来判断。又例如,缓存器可以实施例一个缓存服务器等等。在不脱离本发明范围的情况下,做出的各种变化和变型的等同的技术方案也应属于本发明保护的范畴。