基于分布式无阻塞异步消息处理模式的拍卖竞价系统及其运行方法转让专利

申请号 : CN201710267041.0

文献号 : CN107093138B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李丽华李维新王红宝李丽陈伟李俊霞肖磊杨健

申请人 : 山东佳联电子商务有限公司

摘要 :

本发明涉及基于分布式无阻塞异步消息处理模式的拍卖竞价系统及其运行方法,包括nginx服务器、node服务器、Tomcat集群、消息队列、竞价逻辑处理模块集群、oracle数据库;用户通过用户终端发起请求,通过所述nginx服务器发送至所述Tomcat集群,所述Tomcat集群将该请求转换成消息,将消息存入所述消息队列,并反馈给用户响应,该反馈用于提示用户请求已被接收并正在进行处理,与此同时,所述竞价逻辑处理模块集群对所述消息队列中的消息进行处理,并将处理结果通过所述node服务器通知对应的用户。

权利要求 :

1.一种拍卖竞价系统实现异步消息处理、消息定向发送的方法,其特征在于,基于分布式无阻塞异步消息处理模式的拍卖竞价系统,包括nginx服务器、node服务器、Tomcat集群、消息队列、竞价逻辑处理模块集群、oracle数据库;nginx服务器、Tomcat集群、消息队列、竞价逻辑处理模块集群、node服务器依次连接;

用户发起请求,通过所述nginx服务器发送至所述Tomcat集群,所述Tomcat集群将该请求转换成消息,将消息存入所述消息队列,并反馈给用户响应,该反馈用于提示用户请求已被接收并正在进行处理,与此同时,所述竞价逻辑处理模块集群对所述消息队列中的消息进行处理,并将处理结果通过所述node服务器通知对应的用户;

所述nginx服务器还用于均衡负载,根据不同的策略进行配置,将请求均衡转发到Tomcat集群上;所述oracle数据库用于存储拍卖竞价系统的业务数据;

包括步骤如下:

(1)用户通过用户终端进入目标标的竞价页面,页面采用javascript生成20位随机码,与所述node服务器建立长连接,所述node服务器在哈希表中记录该随机码与长连接socket的关联关系,即随机码与长连接socket的映射关系;

(2)用户通过用户终端发起请求,将该请求以及生成的随机码通过所述nginx服务器发送至所述Tomcat集群,所述Tomcat集群接收到该请求后,将请求转换成消息,并将该消息以及随机码放入消息队列,立即返回用户“消息已提交”;

(3)所述竞价逻辑处理模块集群订阅消息队列中的消息,所述竞价逻辑处理模块集群中的线程只订阅同一标的的消息,即消息队列中的某一频道;

(4)所述竞价逻辑处理模块集群对收到的消息进行业务逻辑分析处理,将消息处理结果,发送至所述node服务器;

(5)所述node服务器解析所述竞价逻辑处理模块集群发送的消息处理结果,从消息处理结果中解析出所述随机码,以此随机码作为key,从哈希表中获取对应的长连接socket,采用该长连接socket将消息处理结果准确发送至用户终端;

(6)用户收到所述node服务器发送的消息处理结果后,在页面上显示用户提交请求的处理结果。

2.根据权利要求1所述的拍卖竞价系统实现异步消息处理、消息定向发送的方法,其特征在于,Tomcat集群包括若干个Tomcat节点,每个Tomcat节点包括若干个线程,通过Redis在各个tomcat节点之间进行session信息共享。

3.根据权利要求1所述的拍卖竞价系统实现异步消息处理、消息定向发送的方法,其特征在于,所述竞价逻辑处理模块集群包括若干个server节点,每个server节点包括若干个线程,所述某一个线程只订阅同一个标的的消息。

4.根据权利要求1所述的拍卖竞价系统实现异步消息处理、消息定向发送的方法,其特征在于,所述拍卖竞价系统还包括Redis内存数据库,用于缓存竞价过程中需要的数据,并在竞价完成后,将所述Redis内存数据库中缓存的数据持久化到所述oracle数据库中。

说明书 :

基于分布式无阻塞异步消息处理模式的拍卖竞价系统及其运

行方法

技术领域

[0001] 本发明涉及基于分布式无阻塞异步消息处理模式的拍卖竞价系统及其运行方法,属于电子商务技术领域。

背景技术

[0002] 点拍网功能的核心部分是拍卖行业标的的竞价,是基于java web的互联网实时竞价消息处理系统。点拍网目前采用阻塞式消息处理架构,在并发用户量少时,网站还可以应付,当用户量大,特别是某个标的竞买人多,同时竞价出价时;或网站同时进行多场拍卖会时,用户提交的信息往往得不到及时响应,系统负荷大,出现卡顿情况。
[0003] 目前,点拍网目前的竞价处理核心代码部分采用同步锁机制,网站上所有标的的竞价请求都要竞争同一个同步锁,即所有的竞价请求都要排队等待获得同步锁,获得锁后才能得到处理,当高并发竞价时,系统响应速度往往不及时,用户提交竞价请求后,要一直等待返回结果,用户体验较差。点拍网采用单节点的tomcat,系统负载能力差,用户量大时,系统负载较大。
[0004] 点拍网1.0版本架构框图如图1所示,点拍网1.0版本用户竞价过程示意图如图2所示,架构存在的问题:1.0竞价逻辑处理部分,使用线程同步锁,整个网站,同一时刻只有一个出价请求被处理,其他都需要等待。在高并发竞价的情况下,用户报价会出现卡顿。1.0版本用户网页竞价请求发送到后台后,用户需要一直等待后台返回信息,获得返回结果后,用户终端才会显示该消息。当并发用户请求多时,由于系统对于每个请求都要查询数据库,逻辑处理后返回,会导致新的请求无法被及时响应。
[0005] 1.0版本同步消息处理机制,后台消息接收、处理模块部署在同一节点内,模块间是紧耦合,给升级维护代理不便,一个模块的升级改造,必须停止其他模块的服务。
[0006] 中国专利文献CN103530255A公开了一种分布式异步事件的处理方法及系统,该方法包括:以日志方式对各应用服务器中的要处理的事件进行处理,为每个要处理的事件创建第一日志消息并传输;将接收的第一日志消息存储到消息队列中;根据各订阅服务器向中心服务器登记的要处理的消息的事件类别,将消息队列中的与登记的事件类别相对应的消息分别传送至相应的订阅服务器;订阅服务器对消息进行处理并返回消息处理结果;将接收的第一日志消息和消息处理结果进行对比,补偿处理失败或丢失的事件。该专利技术方案专注于消息队列中消息是否准确已送到。
[0007] 中国专利文献CN103856393A公开了一种基于数据库的分布式消息中间件系统及其运行方法。该分布式消息中间件系统包括消息采集组件、数据库、消息分发组件和消息交换组件,数据库中包括消息容器;消息采集组件用于接收来自消息生产者的消息并交给消息交换组件;消息分发组件用于接收来自消息消费者的消费请求并交给消息交换组件;消息交换组件用于将来自消息采集组件的消息存入消息容器,还用于根据消费请求从消息容器中读出消息并交给消息分发组件以供给消息消费者进行消费。该专利技术方案利用数据库存储消息,不适用于实时场景中。

发明内容

[0008] 针对现有技术的不足,本发明提供了基于分布式无阻塞异步消息处理模式的拍卖竞价系统;
[0009] 本发明还提供了上述拍卖竞价系统的运行方法;
[0010] 本版本架构,即2.0版本,为解决1.0版本竞价模块在应答多用户,高并发场景下遇到的问题,采用最新的基于分布式无阻塞异步消息处理模式的技术架构。
[0011] 术语解释:
[0012] 1、javascript,一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
[0013] 2、socket,通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。
[0014] 本发明的技术方案为:
[0015] 基于分布式无阻塞异步消息处理模式的拍卖竞价系统,包括nginx服务器、node服务器、Tomcat集群、消息队列、竞价逻辑处理模块集群、oracle数据库;
[0016] nginx服务器、Tomcat集群、消息队列、竞价逻辑处理模块集群、node服务器依次连接;
[0017] 用户发起请求,通过所述nginx服务器发送至所述Tomcat集群,所述Tomcat集群将该请求转换成消息,将消息存入所述消息队列,并反馈给用户响应,该反馈用于提示用户请求已被接收并正在进行处理,与此同时,所述竞价逻辑处理模块集群对所述消息队列中的消息进行处理,并将处理结果通过所述node服务器通知对应的用户;
[0018] 所述nginx服务器还用于均衡负载,根据不同的策略进行配置,将请求均衡转发到Tomcat集群上;所述oracle数据库用于存储拍卖竞价系统的业务数据。
[0019] nginx服务器作为HTTP反向代理服务器,接收用户网页页面的请求,转发到tomcat集群。在oracle数据库中建立拍卖系统相关业务库表,存储标的、竞价信息等业务数据。
[0020] 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦、异步消息、流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。点拍网1.0版本同步消息处理机制,后台消息接收、处理模块部署在同一节点内,模块间是紧耦合,给升级维护代理不便,一个模块的升级改造,必须停止其他模块的服务。本发明拍卖竞价系统,即点拍网2.0版本通过消息队列,将消息接收、处理、消息通知模块分开,编码上只每个模块只需关心与别的模块的接口,实现自身的功能即可;物理上模块间可单独部署,方便升级、扩容、维护。
[0021] 根据本发明优选的,Tomcat集群包括若干个Tomcat节点,每个Tomcat节点包括若干个线程,通过Redis在各个tomcat节点之间进行session信息共享。
[0022] 通过Redis在各个tomcat节点之间进行session信息共享,解决了用户请求被分到不同tomcat节点,导致tomcat节点session信息不同步问题。集群方案增加了整个系统的总体负载,支持用户数量,并发数量更多;集群可以有效解决系统的单点故障问题,一个节点出现问题,无法提供服务时,系统可以自动切换到其他节点;集群负载分担,可降低每个节点的压力,增加系统整体的响应速度。
[0023] 根据本发明优选的,所述竞价逻辑处理模块集群包括若干个server节点,每个server节点包括若干个线程,所述某一个线程只订阅同一个标的的消息。
[0024] 解决了用户请求被分到不同tomcat节点,导致tomcat节点session信息不同步问题。
[0025] 根据本发明优选的,所述拍卖竞价系统还包括Redis内存数据库,用于缓存竞价过程中需要的数据,并在竞价完成后,将所述Redis内存数据库中缓存的数据持久化到所述oracle数据库中。
[0026] 高并发状况下,频繁的数据库访问、数据库锁机制等严重影响系统性能,用户请求得不到及时响应,本发明将数据缓存在Redis内存数据库中,数据访问速度大幅度提升,减轻了oracle数据库的压力,提高了系统响应速度。
[0027] 上述拍卖竞价系统实现异步消息处理、消息定向发送的方法,包括步骤如下:
[0028] (1)用户通过用户终端进入目标标的竞价页面,页面采用javascript生成20位随机码,与所述node服务器建立长连接,所述node服务器在哈希表中记录该随机码与长连接socket的关联关系,即随机码与长连接socket的映射关系;
[0029] (2)用户通过用户终端发起请求,将该请求以及生成的随机码通过所述nginx服务器发送至所述Tomcat集群,所述Tomcat集群接收到该请求后,将请求转换成消息,并将该消息以及随机码放入消息队列,立即返回用户“消息已提交”;
[0030] (3)所述竞价逻辑处理模块集群订阅消息队列中的消息,所述竞价逻辑处理模块集群中的线程只订阅同一标的的消息,即消息队列中的某一频道;通过这种方式也保障了每个业务逻辑处理模块线程只处理同一标的的消息,从而实现了标的间消息的隔离处理。
[0031] (4)所述竞价逻辑处理模块集群对收到的消息进行业务逻辑分析处理,将消息处理结果,发送至所述node服务器;
[0032] (5)所述node服务器解析所述竞价逻辑处理模块集群发送的消息处理结果,从消息处理结果中解析出所述随机码,以此随机码作为key,从哈希表中获取对应的长连接socket,采用该长连接socket将消息处理结果准确发送至用户终端;
[0033] (6)用户收到所述node服务器发送的消息处理结果后,在页面上显示用户提交请求的处理结果。
[0034] 通过node websocket消息单播,实现了用户消息异步处理过程中用户请求定向返回的问题。异步消息处理机制,增加了系统处理高并发请求的能力。采用消息队列,将不同标的处理相互隔离。
[0035] 本发明的有益效果为:
[0036] 1、无阻塞的异步消息处理机制:在I/O受限等情况下,异步消息处理机制能提高系统的吞吐量,系统能支持更多的用户量,和更大数量的并发请求。异步消息处理能增强系统健壮性,降低了模块间的耦合,各个模块各司其职,分工明确,异步能改善用户体验,用户请求能及时得到响应,尤其是在大用户量,高并发的情景下。
[0037] 2、分布式部署:通过对业务进行拆分,将最核心的竞价逻辑处理模块集群独立出来,与原先的后台服务彼此独立,单独部署,每个模块的功各司其职,降低了系统的紧耦合程度。业务逻辑架构清晰。采用分布式部署,根据模块的负载情况,可以横向进行扩容。如果一个模块的压力较大,可以增加几个节点,对系统其他模块无影响。
[0038] 3、Redis内存数据库的引入,消除了高并发场景下,数据库瓶颈问题,系统响应速度加快。
[0039] 4、采用消息队列,将不同标的处理相互隔离。
[0040] 5、由原先的所有标的竞拍同步,改为同一标的同步处理。标的与标的之间的竞价彼此无关联,无需竞争同步锁,解决了高并发时,用户界面出现等待时机过长,卡顿等现象。

附图说明

[0041] 图1为点拍网1.0版本架构框图;
[0042] 图2为点拍网1.0版本用户竞价过程示意图;
[0043] 图3为本发明基于分布式无阻塞异步消息处理模式的拍卖竞价系统的架构框图。

具体实施方式

[0044] 下面结合说明书附图和实施例对本发明作进一步限定,但不限于此。
[0045] 实施例1
[0046] 基于分布式无阻塞异步消息处理模式的拍卖竞价系统,如图3所示,包括nginx服务器、node服务器、Tomcat集群、消息队列、竞价逻辑处理模块集群、oracle数据库;nginx服务器、Tomcat集群、消息队列、竞价逻辑处理模块集群、node服务器依次连接;
[0047] 用户发起请求,通过nginx服务器发送至Tomcat集群,Tomcat集群将该请求转换成消息,将消息存入消息队列,并反馈给用户响应,该反馈用于提示用户请求已被接收并正在进行处理,与此同时,竞价逻辑处理模块集群对消息队列中的消息进行处理,并将处理结果通过node服务器通知对应的用户;
[0048] nginx服务器还用于均衡负载,根据不同的策略进行配置,例如对不同的tomcat节点分配权重值,将请求均衡转发到Tomcat集群上;oracle数据库用于存储拍卖竞价系统的业务数据。
[0049] nginx服务器作为HTTP反向代理服务器,接收用户网页页面的请求,转发到tomcat集群。在oracle数据库中建立拍卖系统相关业务库表,存储标的、竞价信息等业务数据。
[0050] 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦、异步消息、流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。点拍网1.0版本同步消息处理机制,后台消息接收、处理模块部署在同一节点内,模块间是紧耦合,给升级维护代理不便,一个模块的升级改造,必须停止其他模块的服务。本发明拍卖竞价系统,即点拍网2.0版本通过消息队列,将消息接收、处理、消息通知模块分开,编码上只每个模块只需关心与别的模块的接口,实现自身的功能即可;物理上模块间可单独部署,方便升级、扩容、维护。
[0051] Tomcat集群由3个tomcat节点组成,每个tomcat节点均包括N个线程,具体包括tomcat1节点、tomcat2节点、tomcat3节点,应用程序(线程)部署在tomcat节点中,提供web后台服务,通过Redis在各个tomcat节点之间进行session信息共享。
[0052] 通过Redis在各个tomcat节点之间进行session信息共享,解决了用户请求被分到不同tomcat节点,导致tomcat节点session信息不同步问题。集群方案增加了整个系统的总体负载,支持用户数量,并发数量更多;集群可以有效解决系统的单点故障问题,一个节点出现问题,无法提供服务时,系统可以自动切换到其他节点;集群负载分担,可降低每个节点的压力,增加系统整体的响应速度。
[0053] 竞价逻辑处理模块集群包括N个server节点,每个server节点包括若干个线程,某一个线程只订阅同一个标的的消息,线程A只能订阅关于标的A的消息,包括消息队列中msgA-1、msgA-2;线程B只能订阅关于标的B的消息,包括消息队列中msgB-1,线程C只能订阅关于标的C的消息,包括消息队列中msgC-1,等等。解决了用户请求被分到不同tomcat节点,导致tomcat节点session信息不同步问题。
[0054] 拍卖竞价系统还包括Redis内存数据库,用于缓存竞价过程中需要的数据,并在竞价完成后,将Redis内存数据库中缓存的数据持久化到oracle数据库中。Redis内存数据库,作为拍卖系统的高速缓存,缓存标的信息,竞价信息。后台程序竞价过程中对Redis数据库进行读写,标的竞价结束后,将redis中的相关数据保存到oracle数据库中,同时Redis中删除该部分信息。
[0055] 高并发状况下,频繁的数据库访问、数据库锁机制等严重影响系统性能,用户请求得不到及时响应,本发明将数据缓存在Redis内存数据库中,数据访问速度大幅度提升,减轻了oracle数据库的压力,提高了系统响应速度。
[0056] 实施例2
[0057] 实施例1所述拍卖竞价系统实现异步消息处理、消息定向发送的方法,包括步骤如下:
[0058] (1)用户通过用户终端进入目标标的竞价页面,页面采用javascript生成20位随机码,与node服务器建立长连接,node服务器在哈希表中记录该随机码与长连接socket的关联关系,即随机码与长连接socket的映射关系;
[0059] (2)用户通过用户终端发起请求,将该请求以及生成的随机码通过nginx服务器发送至Tomcat集群,Tomcat集群接收到该请求后,将请求转换成消息,并将该消息以及随机码放入消息队列,立即返回用户“消息已提交”;
[0060] (3)竞价逻辑处理模块集群订阅消息队列中的消息,竞价逻辑处理模块集群中的线程只订阅同一标的的消息,即消息队列中的某一频道;通过这种方式也保障了每个业务逻辑处理模块线程只处理同一标的的消息,从而实现了标的间消息的隔离处理。
[0061] (4)竞价逻辑处理模块集群对收到的消息进行业务逻辑分析处理,将消息处理结果,发送至node服务器;
[0062] (5)node服务器解析竞价逻辑处理模块集群发送的消息处理结果,从消息处理结果中解析出随机码,以此随机码作为key,从哈希表中获取对应的长连接socket,采用该长连接socket将消息处理结果准确发送至用户终端;
[0063] (6)用户收到所述node服务器发送的消息处理结果后,在页面上显示用户提交请求的处理结果。
[0064] 在I/O受限等情况下,异步消息处理机制能提高系统的吞吐量,系统能支持更多的用户量,和更大数量的并发请求。异步消息处理能增强系统健壮性,降低了模块间的耦合,各个模块各司其职,分工明确,异步能改善用户体验,用户请求能及时得到响应,尤其是在大用户量,高并发的情景下。