CN112748855B - 处理高并发数据请求的方法和装置 - Google Patents
处理高并发数据请求的方法和装置 Download PDFInfo
- Publication number
- CN112748855B CN112748855B CN201911045459.2A CN201911045459A CN112748855B CN 112748855 B CN112748855 B CN 112748855B CN 201911045459 A CN201911045459 A CN 201911045459A CN 112748855 B CN112748855 B CN 112748855B
- Authority
- CN
- China
- Prior art keywords
- request
- batch
- requests
- deduction
- processing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000012545 processing Methods 0.000 title claims abstract description 364
- 238000000034 method Methods 0.000 title claims abstract description 101
- 238000004806 packaging method and process Methods 0.000 claims description 31
- 230000036961 partial effect Effects 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 9
- 230000002045 lasting effect Effects 0.000 claims description 8
- 230000009977 dual effect Effects 0.000 claims description 3
- 230000002085 persistent effect Effects 0.000 claims description 3
- 230000003139 buffering effect Effects 0.000 claims 1
- 230000002829 reductive effect Effects 0.000 abstract description 21
- 230000008569 process Effects 0.000 description 20
- 230000006870 function Effects 0.000 description 18
- 238000013461 design Methods 0.000 description 15
- 238000004891 communication Methods 0.000 description 13
- 238000010586 diagram Methods 0.000 description 13
- 230000002688 persistence Effects 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 7
- 238000003780 insertion Methods 0.000 description 7
- 230000037431 insertion Effects 0.000 description 7
- 238000012544 monitoring process Methods 0.000 description 6
- 239000003795 chemical substances by application Substances 0.000 description 5
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000001360 synchronised effect Effects 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 230000007717 exclusion Effects 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 230000002147 killing effect Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000010923 batch production Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
- 230000002618 waking effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Databases & Information Systems (AREA)
- Computer Security & Cryptography (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了处理高并发数据请求的方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:接收高并发数据请求,利用预设的分批规则,对高并发数据请求进行分批,获得至少一批待处理请求;接收批次请求处理指令,根据至少一批待处理请求的请求信息,在缓存集群内对至少一批待处理请求进行处理;采用双线程组获取处理后的数据信息,根据高并发数据请求的请求标识,将数据信息反馈至高并发数据请求的发送方。该实施方式利用分批规则对高并发数据请求进行分批,能够根据每一批请求的请求信息,结合缓存集群对该批数据请求进行统一处理,提高数据请求的处理效率,并且借助缓存集群处理数据请求,降低系统瓶颈的可能性。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种处理高并发数据请求的方法和装置。
背景技术
在处理高并发数据请求的系统中,如秒杀系统、抢票系统等,高并发是最重要的属性之一,高并发属性主要表现在响应时间(即,系统对请求做出响应的时间)、系统吞吐量(即,单位时间内系统处理用户的请求数量)、QPS(即Query Per Second,每秒查询率)和并发用户数(即,系统可以同时承载的正常使用系统功能的用户数量)等指标上。
现有技术在响应时间、系统吞吐量等指标上均有一定的提升,例以下两种处理方法:(1)、通过对秒杀交易请求进行分批,然后对每个交易进行逐一处理;(2)、通过负载均衡机制横向扩展系统服务和服务内单线程批处理方式。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:一、方法(1)中虽然对秒杀交易请求进行分批,但是需要分别对每个交易请求进行处理,效率较低,而且会成为系统横向扩展的性能瓶颈;二、方法(2)中虽然横向扩展系统服务,但是将批量请求发送至同一个扣减处理单元,因此扣减处理单元会成为系统瓶颈;三、方法(2)中服务内采用单线程处理方式,没有提高单服务的吞吐量,不能充分发挥软硬件资源的能力。
发明内容
有鉴于此,本发明实施例提供一种处理高并发数据请求的方法和装置,能够利用分批规则对高并发数据请求进行分批,根据每一批请求的请求信息,结合缓存集群对该批数据请求进行统一处理,提高数据请求的处理效率,并且借助缓存集群处理数据请求,降低系统瓶颈的可能性。
为实现上述目的,根据本发明实施例的第一方面,提供了一种处理高并发数据请求的方法。
本发明实施例的一种处理高并发数据请求的方法,包括:接收高并发数据请求,利用预设的分批规则,对所述高并发数据请求进行分批,获得至少一批待处理请求;接收批次请求处理指令,根据所述至少一批待处理请求的请求信息,在缓存集群内对所述至少一批待处理请求进行处理;采用双线程组获取处理后的数据信息,根据所述高并发数据请求的请求标识,将所述数据信息反馈至所述高并发数据请求的发送方。
可选地,所述接收高并发数据请求,利用预设的分批规则,对所述高并发数据请求进行分批,获得至少一批待处理请求,包括:接收所述高并发数据请求,获取所述高并发数据请求中每一个数据请求的请求对象和请求时间;根据所述请求对象的类别,对所述高并发数据请求进行分类,获得至少一类数据请求;按照配置的批次请求数量和/或分批间隔时间,根据所述请求时间对所述至少一类数据请求进行分批,得到所述至少一批待处理请求。
可选地,在获得至少一批待处理请求之后,所述方法还包括:将所述至少一批待处理请求存储至批次请求待处理内存队列中,触发生成所述批次请求处理指令。
可选地,所述根据所述至少一批待处理请求的请求信息,在缓存集群内对所述至少一批待处理请求进行处理,包括:针对任意一批待处理请求,在所述缓存集群内按照如下方法进行处理:获取所述一批待处理请求的请求对象和请求数量;根据所述请求对象和所述请求数量,利用请求处理脚本,在所述缓存集群内对所述一批待处理请求进行扣减处理;根据扣减处理结果,对所述一批待处理请求进行缓存。
可选地,所述根据所述请求对象和所述请求数量,利用请求处理脚本,在所述缓存集群内对所述一批待处理请求进行扣减处理,包括:通过所述请求处理脚本,判断所述缓存集群的对象库存表中所述请求对象的总数量是否大于所述请求数量;若是,则从所述总数量中减去所述请求数量,确认扣减处理结果为扣减成功,若否,则判断所述缓存集群的对象库存表中所述请求对象的总数量是否为零;在所述缓存集群的对象库存表中所述请求对象的总数量为零的情况下,确认扣减处理结果为扣减失败;在所述缓存集群的对象库存表中所述请求对象的总数量小于所述请求数量且大于零的情况下,将所述总数量置为零,确认扣减处理结果为部分扣减成功。
可选地,所述根据扣减处理结果,对所述一批待处理请求进行缓存,包括:若所述一批待处理请求的扣减处理结果为扣减成功,则将所述一批待处理请求打包为一个扣减成功批次请求,并将该扣减成功批次请求的核心信息和成功批次标识缓存至所述缓存集群的扣减成功批次表;若所述一批待处理请求的扣减处理结果为扣减失败,则将所述一批待处理请求打包写入批次请求失败内存队列;若所述一批待处理请求的扣减处理结果为部分扣减成功,则将所述一批待处理请求中扣减失败的待处理请求打包写入所述批次请求失败内存队列,将所述一批批待处理请求中扣减成功的待处理请求打包为一个扣减成功批次请求,并将该扣减成功批次请求的核心信息和成功批次标识缓存至所述缓存集群的扣减成功批次表。
可选地,在根据所述请求对象和所述请求数量,利用请求处理脚本,在所述缓存集群内对所述一批待处理请求进行扣减处理之前,所述方法还包括:将所述一批待处理请求的请求数量和请求对象作为信息头,将所述一批待处理请求中每一个请求的请求信息作为信息体,生成所述一批待处理请求的核心信息;以及在将该扣减成功批次请求的核心信息和成功批次标识缓存至所述缓存集群的扣减成功批次表之前,所述方法还包括:根据所述一批待处理请求的核心信息和该扣减成功批次请求中每一个请求的请求成功信息,生成该扣减成功批次请求的核心信息,并生成该扣减成功批次请求的成功批次标识。
可选地,所述方法还包括:在所述扣减成功批次表中设置该扣减成功批次请求的存储状态为未存储。
可选地,所述方法还包括:定时利用存储处理脚本,从所述扣减成功批次表中获取待存储扣减成功批次请求的核心信息,其中,所述待存储扣减成功批次请求为存储状态为未存储或者存储超时的扣减成功批次请求;基于含幂等性处理的数据库语句,根据获取的核心信息,生成所述待存储扣减成功批次请求的批次请求结果记录,并将所述批次请求结果记录持久化存储至数据库中。
可选地,在将所述批次请求结果记录持久化存储至数据库中之后,所述方法还包括:利用存储完成脚本,根据所述待存储扣减成功批次请求的成功批次标识,将所述待存储扣减成功批次请求从所述扣减成功批次表移动至所述缓存集群的处理完成批次表。
可选地,所述采用双线程组获取处理后的数据信息,根据所述高并发数据请求的请求标识,将所述数据信息反馈至所述高并发数据请求的发送方,包括:根据返回请求失败指令,采用第一线程组从所述批次请求失败内存队列中获取数据信息,采用第二线程组定时从所述缓存集群的处理完成批次表中获取数据信息;针对所述高并发数据请求的每一个数据请求,根据所述数据请求的标识,从获取的数据信息中确定所述数据请求对应的请求结果,并将所述对应的请求结果反馈至所述数据请求的发送方。
可选地,在将该批待处理请求打包写入批次请求失败内存队列或者将所述一批待处理请求中扣减失败的待处理请求打包写入所述批次请求失败内存队列之后,所述方法还包括:触发生成所述返回请求失败指令。
为实现上述目的,根据本发明实施例的第二方面,提供了一种处理高并发数据请求的装置。
本发明实施例的一种处理高并发数据请求的装置,包括:分批模块,用于接收高并发数据请求,利用预设的分批规则,对所述高并发数据请求进行分批处理,获得至少一批待处理请求;处理模块,用于接收批次请求处理指令,根据所述至少一批待处理请求的请求信息,在缓存集群内对所述至少一批待处理请求进行处理;反馈模块,用于采用双线程组获取处理后的数据信息,根据所述高并发数据请求的请求标识,将所述数据信息反馈至所述高并发数据请求的发送方。
可选地,所述分批模块还用于:接收所述高并发数据请求,获取所述高并发数据请求中每一个数据请求的请求对象和请求时间;根据所述请求对象的类别,对所述高并发数据请求进行分类,获得至少一类数据请求;按照配置的批次请求数量和/或分批间隔时间,根据所述请求时间对所述至少一类数据请求进行分批,得到所述至少一批待处理请求。
可选地,所述分批模块还用于:将所述至少一批待处理请求存储至批次请求待处理内存队列中,触发生成所述批次请求处理指令。
可选地,所述处理模块还用于:针对任意一批待处理请求,在所述缓存集群内按照如下方法进行处理:获取所述一批待处理请求的请求对象和请求数量;根据所述请求对象和所述请求数量,利用请求处理脚本,在所述缓存集群内对所述一批待处理请求进行扣减处理;根据扣减处理结果,对所述一批待处理请求进行缓存。
可选地,所述处理模块还用于:通过所述请求处理脚本,判断所述缓存集群的对象库存表中所述请求对象的总数量是否大于所述请求数量;若是,则从所述总数量中减去所述请求数量,确认扣减处理结果为扣减成功,若否,则判断所述缓存集群的对象库存表中所述请求对象的总数量是否为零;在所述缓存集群的对象库存表中所述请求对象的总数量为零的情况下,确认扣减处理结果为扣减失败;在所述缓存集群的对象库存表中所述请求对象的总数量小于所述请求数量且大于零的情况下,将所述总数量置为零,确认扣减处理结果为部分扣减成功。
可选地,所述处理模块还用于:若所述一批待处理请求的扣减处理结果为扣减成功,则将所述一批待处理请求打包为一个扣减成功批次请求,并将该扣减成功批次请求的核心信息和成功批次标识缓存至所述缓存集群的扣减成功批次表;若所述一批待处理请求的扣减处理结果为扣减失败,则将所述一批待处理请求打包写入批次请求失败内存队列;若所述一批待处理请求的扣减处理结果为部分扣减成功,则将所述一批待处理请求中扣减失败的待处理请求打包写入所述批次请求失败内存队列,将所述一批批待处理请求中扣减成功的待处理请求打包为一个扣减成功批次请求,并将该扣减成功批次请求的核心信息和成功批次标识缓存至所述缓存集群的扣减成功批次表。
可选地,所述处理模块还用于:将所述一批待处理请求的请求数量和请求对象作为信息头,将所述一批待处理请求中每一个请求的请求信息作为信息体,生成所述一批待处理请求的核心信息;以及根据所述一批待处理请求的核心信息和该扣减成功批次请求中每一个请求的请求成功信息,生成该扣减成功批次请求的核心信息,并生成该扣减成功批次请求的成功批次标识。
可选地,所述处理模块还用于:在所述扣减成功批次表中设置该扣减成功批次请求的存储状态为未存储。
可选地,所述装置还包括存储模块,用于:定时利用存储处理脚本,从所述扣减成功批次表中获取待存储扣减成功批次请求的核心信息,其中,所述待存储扣减成功批次请求为存储状态为未存储或者存储超时的扣减成功批次请求;基于含幂等性处理的数据库语句,根据获取的核心信息,生成所述待存储扣减成功批次请求的批次请求结果记录,并将所述批次请求结果记录持久化存储至数据库中。
可选地,所述存储模块还用于:利用存储完成脚本,根据所述待存储扣减成功批次请求的成功批次标识,将所述待存储扣减成功批次请求从所述扣减成功批次表移动至所述缓存集群的处理完成批次表。
可选地,所述反馈模块还用于:根据返回请求失败指令,采用第一线程组从所述批次请求失败内存队列中获取数据信息,采用第二线程组定时从所述缓存集群的处理完成批次表中获取数据信息;针对所述高并发数据请求的每一个数据请求,根据所述数据请求的标识,从获取的数据信息中确定所述数据请求对应的请求结果,并将所述对应的请求结果反馈至所述数据请求的发送方。
可选地,所述反馈模块还用于:触发生成所述返回请求失败指令。
为实现上述目的,根据本发明实施例的第三方面,提供了一种电子设备。
本发明实施例的一种电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现本发明实施例的处理高并发数据请求的方法。
为实现上述目的,根据本发明实施例的第四方面,提供了一种计算机可读介质。
本发明实施例的一种计算机可读介质,其上存储有计算机程序,程序被处理器执行时实现本发明实施例的处理高并发数据请求的方法。
上述发明中的一个实施例具有如下优点或有益效果:利用分批规则对高并发数据请求进行分批,将相同类型的数据请求放在一起,能够根据每一批请求的请求信息,结合缓存集群对该批数据请求进行统一处理,提高数据请求的处理效率,并且借助缓存集群处理数据请求,降低系统瓶颈的可能性。此外,本发明实施例中采用双线程组的方式获取处理后的数据信息,能够将处理成功和处理失败的数据请求分开处理,从而为后续操作带来方便,提高本发明实施例的实用性。还有,本发明实施例中采用脚本语言进行缓存集群内部的数据处理,能够保证缓存数据的一致性。并且,本发明实施例中将扣减成功的请求打包成一个批次,缓存该批次的核心信息和成功批次标识至缓存集群的扣减成功批次表中,能够压缩批次核心信息数据量,减少与缓存集群的通讯时间,减少缓存集群的存储空间,最终更有效地提高整体性能和吞吐量。另外,本发明实施例的处理高并发数据请求的方法中,批次请求结果记录设计一方面启用数据库批处理技术,来提高吞吐量,另一方面包含幂等性处理设计在内,当因故宕机时,能够在处理超时后继续幂等性处理其未完成的任务,从而不会丢失任何一批数据,保持数据整体的一致性,提高用户体验。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的处理高并发数据请求的方法的主要步骤的示意图;
图2是根据本发明实施例的处理高并发数据请求的总体架构示意图;
图3是根据本发明实施例的处理高并发数据请求的装置的主要模块的示意图;
图4是本发明实施例可以应用于其中的示例性系统架构图;
图5是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明实施例的处理高并发数据请求的方法的主要步骤的示意图。如图1所示,本发明实施例的处理高并发数据请求的方法可以包括步骤S101至步骤S103。
步骤S101:接收高并发数据请求,利用预设的分批规则,对高并发数据请求进行分批,获得至少一批待处理请求;
步骤S102:接收批次请求处理指令,根据至少一批待处理请求的请求信息,在缓存集群内对至少一批待处理请求进行处理;
步骤S103:采用双线程组获取处理后的数据信息,根据高并发数据请求的请求标识,将数据信息反馈至高并发数据请求的发送方。
本发明实施例的处理高并发数据请求的方法中,首先接收多个客户端发送的数据请求,比如说针对抢火车票的系统或者演唱会票的系统,在放票的时候,会接收到多个用户通过各种渠道发送的抢票请求。在接收到这些大批量数据请求后,可以利用预设的分批规则,对这些请求进行分批,得到一批批的待处理请求。举例来说,收到1000个的数据请求,可以按照设置的分批规则,将这1000个数据请求分成20批,每批有50个数据请求。其中,本发明实施例中可以根据具体的场景设置分批规则,在下文中也会详细解释可以本发明实施例中可以采用的分批规则,此处不作具体描述。
在获取到多批待处理的数据请求后,本发明实施例的处理高并发数据请求的方法中,可以结合缓存集群对一批批待处理数据请求进行处理。由于本发明实施例中对高并发数据请求进行处理需要确定哪些数据请求可以满足,哪些数据请求不可以满足,因此本发明实施例中将可以提供的数据请求数量存储至缓存集群中,这样就可以依赖缓存集群对一批批待处理请求进行处理,得出哪些数据请求可以实现,哪些数据请求不可以实现。例如,抢票系统中可以提供支持的票数,具体来说,一个班次的列车的座位数是固定的,相当于是在缓存集群中预先存储这个班次的列车可以提供的座位类型以及每个座位类型对应的座位数。在处理数据请求时,就是从缓存集群中查询是否还有剩余的座位数。此外,本发明实施例中的缓存集群可以是Redis(即,一个存储系统)缓存集群。
本发明实施例中针对处理成功的数据请求和处理失败的数据请求分开存储,因此采用双线程组的方式获取处理成功的数据请求信息和处理失败的数据请求信息。接着,还可以根据高并发数据请求的请求标识,将获取的数据信息反馈至高并发数据请求的发送方。比如说,在抢票系统中,用户A提交了抢票需求,那么该抢票需求对应一个唯一的抢票标识,因此可以根据这个唯一的抢票标识,在获取的处理后的数据信息之中查找到抢票结果,然后将这个抢票结果通知用户A。
本发明实施例的处理高并发数据请求的方法中,利用分批规则对高并发数据请求进行分批,从而可以将相同类型的数据请求放在一起,这样可以根据每一批请求的请求信息,结合缓存集群对该批数据请求进行统一处理,提高数据请求的处理效率,并且借助缓存集群处理数据请求,能够降低系统瓶颈的可能性。此外,本发明实施例中采用双线程组的方式获取处理后的数据信息,能够将处理成功和处理失败的数据请求分开处理,从而可以为后续操作带来方便,提高本发明实施例的实用性,比如说,抢票系统中,如果用户A抢到票了,那么可以后续判断A是否支付成功,如果用户A没有抢到票,可以将用户A提交的请求放入候选队列继续抢票或者执行其他操作。
从上述步骤S101至步骤S103中可以看出,本发明实施例的处理高并发数据请求的方法主要可以包括请求分批、请求处理和请求反馈三个部分组成。而且,请求分批部分是后续请求处理部分和请求反馈部分的前提基础。作为本发明的一个可参考实施例,步骤S101接收高并发数据请求,利用预设的分批规则,对高并发数据请求进行分批,获得至少一批待处理请求,可以包括:
步骤S1011:接收高并发数据请求,获取高并发数据请求中每一个数据请求的请求对象和请求时间;
步骤S1012:根据请求对象的类别,对高并发数据请求进行分类,获得至少一类数据请求;
步骤S1013:按照配置的批次请求数量和/或分批间隔时间,根据请求时间对至少一类数据请求进行分批,得到至少一批待处理请求。
在接收到高并发数据请求之后,可以获取到每一个数据请求的请求对象和请求时间。其中,请求对象是指需要请求的对象,比如说抢票系统中,请求对象可以是用户需要抢购的某班次的火车票,秒杀系统中,可以是用户需要购买的某物品或者服务;请求时间可以是用户发出请求的时间,比如说用户A在13点提出的抢购某班次的火车票。
接下来,可以根据请求对象的类别,对接收到的高并发数据请求进行分类了,如果对每一个数据请求分别进行处理,会导致效率较低,因此本发明实施例的处理高并发数据请求的方法中是以一批数据请求为单位进行数据处理的,因此需要将相同类型的数据请求进行分类。举例来说,抢票系统中,接收到1000个数据请求,其中有300个是请求购买班次为S1列车的,有400个是请求购买班次为S2列车的,有300个是请求购买班次为S3列车的,这样就可以将购买同一班次的请求分成一类。又或者说,在300个购买S1列车的请求中,有50个是购买商务座的,有70个是购买一等座的,有180个是购买二等座的,那么还可以将50个购买商务座的请求划分为一类,将70个购买一等座的请求划分为一类,将180个购买二等座的请求划分为一类。也就是说,本发明实施例中的对高并发数据请求进行分类时可以根据具体需求设置。
综上所述,本发明实施例中根据请求对象进行分类后,同一类型的数据请求被分配到同一个临时内存队列,不同类型的数据请求被分配到不同的内存队列,并且复杂的分类可以使用规则引擎对数据请求的请求对象的所有属性进行规则条件匹配。接着,在对高并发数据请求进行分类划分后,可以对每一类数据请求进行批次划分。具体实现为,检查数据请求临时内存队列是否满足配置的批次数量要求(可以但不限于配置为200),是否满足配置的批次时限要求(可以但不限于配置为100毫秒),满足其中任意一个条件时,立即将该批同一类型的数据请求打包成一个批次,然后可以对这一个批次的数据请求进行统一处理。需要注意的是,临时内存队列为每一种类型的数据请求均对应一个临时队列,在请求处理完成后,临时内存队列可销毁,也可被其他类型的数据请求复用,本发明对比不作限定。
还需要注意的是,本发明可选实施例中,在获得至少一批待处理请求之后,将至少一批待处理请求存储至批次请求待处理内存队列中,触发生成批次请求处理指令。在将同一类型的数据请求打包成多个批次后,将任意一个批次的数据请求作为一个整体元素存入批次请求待处理内存队列中。批次请求待处理内存队列在一个服务实例中(即在一台机器中)只有一个,不同批次可以是不同类型的数据请求,也可以是相同的数据请求,批量处理数据请求时互不影响。还有,本发明实施例,在将任意一批待处理请求存储至批次请求待处理内存队列中,就可以触发生成批次请求处理指令,因此能够实现在对高并发数据请求进行分批次后,可以立刻对一批处理请求进行处理,减少排队等待时间,提高数据处理效率。
本发明实施例中,在批次请求待处理内存队列存入以批次为单位的待处理请求后,会立即以多线程的方式对待处理请求进行处理。每个线程获取一批待处理请求进行处理,处理结束时再尝试获取下一批,没有待处理批次请求可获取时,线程重新进入等待状态。其中,本发明实施例中以批次为单位对请求进行处理,因此作为本发明的又一个可参考实施例,步骤S102根据至少一批待处理请求的请求信息,在缓存集群内对至少一批待处理请求进行处理,可以包括:针对任意一批待处理请求,在缓存集群内按照步骤S1021至步骤S1023所示的方法进行处理。
步骤S1021:获取一批待处理请求的请求对象和请求数量;
步骤S1022:根据请求对象和请求数量,利用请求处理脚本,在缓存集群内对该批待处理请求进行扣减处理;
步骤S1023:根据扣减处理结果,对该批待处理请求进行缓存。
由于本发明实施例的处理高并发数据的方法中,是以批次为单位对数据请求进行处理的,因此需要获取一批待处理请求的请求对象和请求数量。在上文已经介绍过,对高并发数据请求进行分类处理后得到一批批待处理数据请求,因此每一批待处理请求的请求对象是相同的,每一批待处理请求的请求数量是指该批待处理请求中每个请求的请求数量之和。
在获取到一批待处理请求的请求对象和请求数量之后,可以利用请求处理脚本,在缓存集群内对该批待处理请求进行扣减处理,具体实现为:
步骤S10221:通过请求处理脚本,判断缓存集群的对象库存表中请求对象的总数量是否大于请求数量;
步骤S10222:若是,则从总数量中减去请求数量,确认扣减处理结果为扣减成功,若否,则判断缓存集群的对象库存表中请求对象的总数量是否为零;
步骤S10223:在缓存集群的对象库存表中请求对象的总数量为零的情况下,确认扣减处理结果为扣减失败;
步骤S10224:在缓存集群的对象库存表中请求对象的总数量小于请求数量且大于零的情况下,将总数量置为零,确认扣减处理结果为部分扣减成功。
本发明实施例的处理高并发数据请求的方法中,缓存集群存储对象库存表,该对象库存表中存储可以提供的对象类型和总数量,比如说抢演唱会票系统中,对象库存表中存储E1至E5共5种类型的坐席,并且在该对象库存表中存储E1类型的坐席有200个,E2类型的坐席有500个,E3和E4类型的坐席分别有1800个,E5类型的坐席共有3000个。
为了减少与对象库存表的交互次数,降低与对象库存表的交互时间,本发明实施例中可以将每一批待处理请求的请求数量与对象库存表中该请求对象的总数量进行比较。如果对象库存表中请求对象的总数量大于请求数量的,表示该批待处理请求均可以被满足,则从总数量中减去请求数量,且确认扣减成功;如果对象库存表中请求对象的总数量是零,说明该批待处理请求都不可以被满足,则确认扣减失败;如果对象库存表中请求对象的总数量大于零又小于请求数量的,说明可以满足部分需求,确认部分扣减成功,且将总数量置为零,此处需要注意的是,这种情形下可以根据每一个数据请求的请求时间判断该数据请求是否扣减成功,也就是先提出请求的先进行扣减,当然也可以是其他形式,对此也不作限定。
还有,在利用缓存集群辅助进行数据处理时,为了保证缓存数据的一致性,可以采用脚本语言进行缓存集群内部的数据处理。其中,请求处理脚本可以采用Lua脚本,该脚本语言能够灵活嵌入应用程序中,达到为应用程序提供灵活的扩展和定制功能的效果。因此,本发明实施例中可以通过利用请求处理Lua脚本,判断对象库存表中请求对象的总数量与一批待处理请求的请求数量的大小关系,接着根据判断结果得到扣减结果。本发明实施例中,不同的扣减结果,对应不同的存储方法。为了便于理解,下面将任意一批待处理请求命名为W,说明如何根据扣减处理结果对一批待处理请求进行存储:
(1)若一批待处理请求W的扣减处理结果为扣减成功,则将W打包为一个扣减成功批次请求,并将该扣减成功批次请求的核心信息和成功批次标识缓存至缓存集群的扣减成功批次表。此种情况说明直接全部成功,在缓存集群内完成对应请求对象的总数量的扣减,将整批待处理请求打包成一个扣减成功批次请求,然后将这个打包的扣减成功批次请求的核心信息和成功批次标识记录在缓存集群的扣减成功批次表中,需要注意这些信息尚未持久化存储至数据库,只是缓存在缓存集群的扣减成功批次表中。
(2)若W的扣减处理结果为扣减失败,则将W打包写入批次请求失败内存队列。此种情况说明直接全部失败,此时缓存集群的对象库存表中无任何变化,将整批待处理请求,也就是W,写入批次请求失败内存队列中。
(3)若W的扣减处理结果为部分扣减成功,则将W中扣减失败的待处理请求打包写入批次请求失败内存队列,将W中扣减成功的待处理请求打包为一个扣减成功批次请求,并将该打包的扣减成功批次请求的核心信息和成功批次标识缓存至缓存集群的扣减成功批次表。此种情况说明对象库存表中总数量仅满足部分请求,可以按照每个请求的请求时间顺序让时间靠前的请求成功,然后将对象库存表中W对应的请求对象的总数量置为零,将W中扣减成功的请求打包成一个扣减成功批次请求,并且将这个打包的扣减成功批次请求的核心信息和成功批次标识记录在缓存集群的扣减成功批次表中。同时,确认W中其他的请求为失败,将这些失败的请求写入批次请求失败内存队列中。
本发明实施例的处理高并发数据请求的方法中,将高并发数据请求进行分批,得到至少一批待处理请求,然后利用请求处理脚本在缓存集群内对每一批待处理请求进行扣减处理,接着根据扣减处理结果进行存储。在上面介绍的方法(1)至方法(3)所示的根据扣减处理结果进行存储的方法中,在扣减成功时,需要将扣减成功的待处理请求打包成一个扣减成功批次请求,并且将这个打包的扣减成功批次请求的核心信息和成功批次标识记录在缓存集群的扣减成功批次表中。
因此,在根据请求对象和请求数量,利用请求处理脚本,在缓存集群内对该批待处理请求进行扣减处理之前,本发明实施例的处理高并发数据请求的方法还可以包括:将该批待处理请求的请求数量和请求对象作为信息头,将该批待处理请求中每一个请求的请求信息作为信息体,生成该批待处理请求的核心信息。以及,在将该扣减成功批次请求的核心信息和成功批次标识缓存至缓存集群的扣减成功批次表之前,本发明实施例的处理高并发数据请求的方法还可以包括:根据该批待处理请求的核心信息和该扣减成功批次请求中每一个请求的请求成功信息,生成该扣减成功批次请求的核心信息,并生成该扣减成功批次请求的成功批次标识。
具体地,在生成该批待处理请求的核心信息时,将该批待处理请求的请求数量和请求对象作为信息头,将该批待处理请求中每个请求的请求标识和用户标识用分隔字符连接后作为信息体,这样就可以生成该批待处理请求的核心信息。然后,在扣减成功或者扣减部分成功之后,可以打包得到扣减成功批次请求,此时就可以根据该批待处理请求的核心信息和扣减成功批次请求中每一个请求的请求成功信息,得到该扣减成功批次请求的核心信息,其中请求成功信息可以是成功时生成的成功标识。此外,成功批次标识是表示该扣减成功批次请求的唯一标识,为扣减成功的一批请求的核心信息分配的一个全局唯一字符串,与该扣减成功批次请求的核心信息相对应,用于幂等性处理批次结果生成、存储和处理完成时的通知,在下文中会具体介绍。本发明实施例中将扣减成功的请求打包成一个批次,并且缓存该批次的核心信息和成功批次标识至缓存集群的扣减成功批次表中,原则是核心信息只存放必须的信息,不存放可推导出的信息,不存放后续处理可生成的信息,尽量让核心信息数据量小,这样可压缩批次核心信息数据量,减少与缓存集群的通讯时间,减少缓存集群的存储空间,最终更有效地提高整体性能和吞吐量。
在将扣减成功的请求打包成一个批次,缓存至扣减成功批次表中,仅记录了请求对象总数量的扣减,未记录请求处理结果本身,在实际处理高并发数据请求的系统中,请求处理结果本身持久化存储至数据库,才是最影响整体性能和吞吐量的关键环节。因此,作为本发明的还一个可参考实施例,处理高并发数据请求的方法还可以包括:在扣减成功批次表中设置该扣减成功批次请求的存储状态为未存储。这样,就可以根据存储状态将扣减成功批次表中扣减成功批次请求存储至数据库中。
所以,本发明实施例中,处理高并发数据请求的方法还可以包括:定时利用存储处理脚本,从扣减成功批次表中获取待存储扣减成功批次请求的核心信息;基于含幂等性处理的数据库语句,根据获取的核心信息,生成待存储扣减成功批次请求的批次请求结果记录,并将批次请求结果记录持久化存储至数据库中。其中,待存储扣减成功批次请求可以为存储状态为未存储或者存储超时的扣减成功批次请求。需要注意,此处的存储超时是指在将扣减成功批次请求存入数据库的时间超时,比如说,设置在2秒内可以将扣减成功批次请求D的相关信息持久化存储至数据库中,从开始存储的时间开始计时,如果2秒内没有完成存储,则存储超时,认为没有成功将扣减成功批次请求D的相关信息持久化存储至数据库中,这种情况下,需要重新对扣减成功批次请求D进行持久化存储。
其中,存储处理脚本和请求处理脚本一样,也可以采用Lua脚本负责从扣减成功批次表头部开始尝试读取第一个待存储(或存储超时)状态的扣减成功批次请求的核心信息,并将其状态设置为存储中,设置存储开始时间。然后,利用读取的核心信息生成含幂等性处理的数据库语句,接着执行生成的数据量语句,得到扣减成功批次请求的批次请求结果记录,并将批次请求结果记录持久化存储至数据库中。
其中,生成的含幂等性处理的数据库语句可以包括:批次处理完成记录的插入语句、请求对象的总数量的扣减更新语句和完整记录的插入语句。
(1)批次处理完成记录的插入语句:其中成功批次标识是唯一索引字段,当拿到一个存储超时的扣减成功批次请求的核心信息时,这个批次可能已经持久化成功,也可能是失败的。只有当向数据库中插入批次处理完成记录成功时,说明上一次持久化处理未成功,本次需要继续进行完整的持久化,否则不再进行持久化。当拿到一个待存储状态的扣减成功批次请求的核心信息时,同样是生成批次处理完成记录的插入语句。
(2)请求对象的总数量的扣减更新语句:根据扣减成功批次请求的核心信息中实际的请求数量和请求对象,生成扣减更新语句。
(3)完整记录的插入语句:针对该扣减成功批次请求中的每个请求的信息生成一个完整记录的插入语句,因此针对一个扣减成功批次请求,会生成一批记录插入的数据库语句。本发明实施例中,除了扣减的请求结果,其他请求信息均在此处统一生成,例如请求完成时间、请求待支付状态等等。
本发明实施例中通过执行生成的含幂等性处理的数据库语句,实现对扣减成功批次请求的批次请求结果记录的存储。具体地,接收生成的含幂等性处理的数据库语句,启用数据库事务,在事务中依次执行批次处理完成记录的插入语句、请求对象的总数量的扣减更新语句、完整记录的插入语句(分批传递插入语句给数据库管理系统),当且仅当批次处理完成记录的插入语句执行返回唯一索引冲突时,不再执行后续的扣减更新语句和完整记录的插入语句(即:幂等性处理)。
本发明实施例的处理高并发数据请求的方法中,批次请求结果记录设计一方面启用数据库批处理技术,来提高吞吐量,另一方面包含幂等性处理设计在内,当因故宕机时,能够在处理超时后继续幂等性处理其未完成的任务,从而不会丢失任何一批数据,保持数据整体的一致性,提高用户体验。
本发明实施例中,批次请求结果记录存储完成时,通过利用存储完成脚本,也可以采用Lua脚本,传递处理完成的成功批次标识到缓存集群,实现将处理完成的请求信息同步到缓存集群中。所以,在本发明的可选实施例中,在将批次请求结果记录持久化存储至数据库中之后,还可以包括:利用存储完成脚本,根据待存储扣减成功批次请求的成功批次标识,将待存储扣减成功批次请求从扣减成功批次表移动至缓存集群的处理完成批次表。本发明实施例中,将待存储扣减成功批次请求的批次请求结果记录持久化存储至数据库中之后,可以将扣减成功批次请求表中该扣减成功批次请求的核心信息移动至缓存集群的处理完成批次表中。
通过上文描述可以发现,本发明实施例的缓存集群中有对象库存表、扣减成功批次请求表和处理完成批次表。其中,对象库存表存储可以提供的请求对象及其可以提供的总数量;扣减成功批次请求表存储扣减成功的每个扣减成功批次请求的核心信息、成功批次标识、存储状态和存储时间;处理完成批次表存储已经完成存储的扣减成功批次请求的核心信息、成功批次标识。
本发明实施例的处理高并发数据请求的方法中,在对请求进行分批,然后对每一批请求进行处理后,还需要将处理结果反馈至请求的发送方。因此,上述步骤S103采用双线程组获取数据信息,根据高并发数据请求的请求标识,将数据信息反馈至高并发数据请求的发送方,可以包括:根据返回请求失败指令,采用第一线程组从批次请求失败内存队列中获取数据信息,采用第二线程组定时从缓存集群的处理完成批次表中获取数据信息;针对高并发数据请求的每一个数据请求,根据数据请求的标识,从获取的数据信息中确定数据请求对应的请求结果,并将对应的请求结果反馈至数据请求的发送方。
本发明实施例中将扣减失败的请求写入批次请求失败内存队列,将扣减成功的请求打包扣减成功批次请求,缓存至处理完成批次表中。因此,本发明实施例中包含两个线程组,第一线程组负责处理批次请求失败内存队列中的信息,第二线程组负责监听和处理缓存集群中处理完成批次表的信息。其中,批次请求失败内存队列在有新的批次失败信息时,立即唤醒第一线程组中的一个线程,第一线程组的多线程并行循环获取批次请求失败内存队列中的批次请求失败信息,一个线程一次获取一个批次,解析批次请求失败信息,得到其中的一组请求标识,根据请求标识依次唤醒其对应的线程,通知其交易失败。当批次请求失败内存队列中的信息处理完成时,线程进入等待状态。
第二线程组定时(可以但不限于是150豪秒)从缓存集群中处理完成批次表中获取扣减成功的批次请求处理结果,多线程并行循环处理,一个线程一次获取一批,获取并解析批次请求处理结果,得到请求标识和处理结果状态(一般情况下均为成功),并根据请求标识依次唤醒其对应的线程,通知其结果状态。当缓存集群中处理完成批次表中无批次请求处理结果时,子线程结束运行主线程进入等待状态,等待一个定时周期后再去尝试获取,有新批次时再开启多线程进行处理。
本发明实施例中,在批次请求失败内存队列中被写入扣减失败的请求后,会立即触发第一线程组获取数据信息,这样可以快速将扣减失败的请求结果反馈至该请求的发送方。针对第二线程组,配置为定时从缓存集群中处理完成批次表中获取处理结果,这样可以减少与缓存集群的交互次数,降低缓存集群出现瓶颈的可能性。
需要注意的是,由于在批次请求失败内存队列中被写入扣减失败的请求后,会立即触发第一线程组获取数据信息,因此在将该批待处理请求打包写入批次请求失败内存队列或者将一批待处理请求中扣减失败的待处理请求打包写入批次请求失败内存队列之后,本发明实施例处理高并发数据请求的方法需要触发生成返回请求失败指令,这样第一线程组可以根据返回请求失败指令,将扣减失败的请求结果反馈至该请求的发送方。
本发明处理高并发数据请求的技术方案中,能够利用分批规则对高并发数据请求进行分批,将相同类型的数据请求放在一起,能够根据每一批请求的请求信息,结合缓存集群对该批数据请求进行统一处理,提高数据请求的处理效率,并且借助缓存集群处理数据请求,降低系统瓶颈的可能性。此外,本发明实施例中采用双线程组的方式获取处理后的数据信息,能够将处理成功和处理失败的数据请求分开处理,从而为后续操作带来方便,提高本发明实施例的实用性。还有,本发明实施例中采用脚本语言进行缓存集群内部的数据处理,能够保证缓存数据的一致性。并且,本发明实施例中将扣减成功的请求打包成一个批次,缓存该批次的核心信息和成功批次标识至缓存集群的扣减成功批次表中,能够压缩批次核心信息数据量,减少与缓存集群的通讯时间,减少缓存集群的存储空间,最终更有效地提高整体性能和吞吐量。另外,本发明实施例的处理高并发数据请求的方法中,批次请求结果记录设计一方面启用数据库批处理技术,来提高吞吐量,另一方面包含幂等性处理设计在内,当因故宕机时,能够在处理超时后继续幂等性处理其未完成的任务,从而不会丢失任何一批数据,保持数据整体的一致性,提高用户体验。
图2是根据本发明实施例的处理高并发数据请求的总体架构示意图。如图2所示,本发明实施例的处理高并发数据请求的总体架构可以包括:请求处理服务、缓存集群和结果处理服务三个服务。本发明实施例的处理高并发数据请求的总体架构可以实现成一个独立的组件,与业务系统运行在同一个操作系统进程中,例如实现成Java语言中一个Jar包(即,一种软件包文件格式),或者C语言的一个DLL(即,一种动态链接库文件)。该独立组件包含请求处理服务和结果处理服务两个服务部分,这两个服务可分别部署,也可以部署在一起,且这两个服务均支持负载均衡集群化部署,同时这两个服务均依赖于缓存集群,与缓存集群一起构成处理高并发数据请求的总体架构的三个组成部分。
(一)请求处理服务
本服务首先进行高并发数据请求的接收,接着根据请求类型对高并发数据请求进行分类,然后按照配置的批次大小和分批间隔时间再对同类型的请求进行分批,分批后的请求打包成一批批待处理请求,以一批待处理请求为单位整体放置到批次请求待处理内存队列,自身线程进入等待状态,并立即唤醒批次请求处理子服务线程组对批次请求待处理内存队列中的一批批待处理请求进行处理,其中批次请求处理子服务依赖缓存集群进行逐批处理。处理成功时,在缓存集群中生成扣减成功批次请求的核心信息;处理失败时,将失败的待处理请求打包后整体写入批次请求失败内存队列。
请求结果监听与处理子服务线程组可以从批次请求失败内存队列和缓存集群的处理完成批次表中获取批次处理结果数据信息,并用结果数据信息中的请求标识唤醒其对应的请求接收与反馈线程,将处理结果数据信息反馈至请求的发送方。其中,批次请求待处理内存队列和批次请求失败内存队列均为同步内存队列,支持多线程同时访问,并在修改操作时自动添加互斥锁。举例来说,支持多线程同时提取批次请求待处理内存队列中的批次待处理请求,该内存队列在多线程同时提取批次请求(即为修改操作)时会自动添加互斥锁,保证各线程提取的批次数据不重复,不遗漏。同样地,也支持多线程同时提取批次请求失败内存队列中的数据信息。
(1)请求接收与反馈子服务
请求接收与反馈子服务负责进行高并发数据请求的接收和处理结果的包装反馈。由用户或者业务系统前端发起数据请求同步调用请求接收与反馈子服务,然后该请求接收与反馈子服务再同步调用请求分批子服务对高并发数据请求进行分批处理,分批完成后进入等待状态。请求信息包括用户标识、请求标识和请求对象。
此外,本子服务负责处理请求处理结果的反馈,反馈处理是在被请求结果监听与处理子服务唤醒的原数据请求接收与反馈线程中执行的,具体处理操作包括:包装请求处理结果和将包装后的结果信息反馈至请求的发送方。其中,包装请求处理结果预先设置包装处理结果格式为JSON格式,包装处理过程预留出包装接口,供业务系统进行业务扩展。包装接口传入参数包括但不限于:当前用户标识、请求标识、请求对象、请求处理结果状态(请求成功与否),返回值为JSON格式的字符串。业务系统只需要实现该包装接口,即可实现自身的业务反馈信息生成和传递。本子服务支持系统属性配置,可配置包装接口实现类,可分别配置请求对象的范围。此处的包装是对单个请求处理结果进行包装的。
(2)请求分批子服务
请求分批子服务主要负责:高并发数据请求分类、对分类后的请求进行分批和将分批后的请求以批次为单位打包后存入批次请求待处理内存队列。本子服务与请求接收与反馈子服务运行在相同的线程中。
高并发数据请求分类是根据请求对象的类别进行请求分类,类别相同的请求被分配到同一个临时内存队列,类别不同的请求被分配到不同的内存队列,对于复杂的分类可以使用规则引擎对请求对象的所有属性进行规则条件匹配,在上文步骤S1012中已经具体解释过。本发明实施例的处理高并发数据请求的总体架构中可以为请求分类功能设计一个分类接口,供业务系统进行业务扩展,入参为请求信息,返回值为请求对象的类型。
对分类后的请求进行分批是检查每个类型的临时内存队列是否满足配置的批次数量要求(例如配置为200),是否满足配置的批次时限要求(例如配置为100毫秒),满足其中任意一个条件时立即将该批请求类型相同的数据处理请求打包成一个批次,并整体作为一个元素存入批次请求待处理内存队列,最后将当前线程置为等待状态,等待请求处理完成后被唤醒。
临时内存队列为请求对象的类型相同的请求均对应一个临时队列,在请求处理完成后,临时内存队列可销毁,也可被其他类型的请求复用。批次请求待处理内存队列在一个请求处理服务实例内只有一个,不同批次可以是不同类型的(也可相同)请求,批量处理时互不影响。
本子服务支持系统属性配置,可配置请求分类接口实现类名、分类规则、批次请求数量和批次时限等。
(3)批次请求处理子服务
批次请求处理子服务负责从批次请求待处理内存队列中获取批次待处理请求的请求数量和请求对象,再利用请求处理脚本同步结合缓存集群,实现该批次待处理请求的处理。其中,请求处理脚本主要执行请求对象总数量的检查、扣减、将扣减成功请求的核心信息重新打包,得到成功批次标识,并将存储状态设置为待存储,形成扣减成功批次请求的核心信息,再将其写入扣减成功批次表的尾部,最后给批次请求处理子服务返回空值(表示直接全部成功)。当请求对象总数量不足时,将总数量扣减至零,并将失败的处理请求的信息重新打包后返回至批次请求处理子服务。因此,缓存集群同步处理的返回结果有以下三种情况。
1)直接全部失败:此时缓存集群内数据无任何变化,批次请求处理子服务将失败的批次待处理请求写入批次请求失败内存队列,结束本次服务。
2)直接全部成功:在缓存集群内完成请求对象的数量扣减,记录该批次待处理请求的核心信息,但这些信息均尚未存储到数据库,此时,本子服务对该批次待处理请求处理结束。
3)部分成功部分失败:仅满足部分请求,按照请求的顺序让满足数量的请求扣减成功,其他的均置为失败。在缓存集群内完成扣减成功的请求对象的响应数量扣减,记录该批次中扣减成功的请求的核心信息,但这些数据尚未存储到数据库。缓存集群返回扣减失败的请求列表,本子服务将这些失败的请求打包成一批后写入批次请求失败内存队列,结束本次服务。
需要注意的是,批次请求失败内存队列在一个请求处理服务实例内只有一个,其中存放的请求失败批次信息互不影响。
本子服务运行在独立的线程组中,在批次请求待处理内存队列存入信息时被立即唤醒,开始多线程运行,每个线程获取一批待处理请求进行处理,一批待处理请求处理结束时再尝试获取下一批,没有待处理请求可获取时,线程重新进入等待状态。
在上文中已经具体介绍生成核心信息的过程,此处不再累述。需要注意的是,可以将生成核心信息的方法设计为一个接口,供业务系统进行业务扩展,入参为请求信息,返回值为核心信息。本子服务支持系统属性配置,可配置核心信息生成接口实现类和批次请求处理线程数。
(4)请求结果监听与处理子服务
请求结果监听与处理子服务负责监听批次请求失败内存队列和缓存集群的处理完成批次表,获取到处理结果,再用其中的请求标识唤醒对应的请求接收与反馈线程,将处理结果包装后反馈给本子服务调用方。
本子服务设计包含两个线程组,其中两个线程组的具体介绍以及实现功能在上文步骤S103的可选实施例中详细描述过,此处不再累述。另外,本子服务支持系统属性配置,可分别配置第一线程组和第二线程组中的线程数,还可配置定时时长。
(二)缓存集群
缓存集群承载对象库存表、扣减成功批次请求表和处理完成批次表的数据缓存工作,是架构整体高并发高吞吐量的重要保证之一,此外,对象库存表、扣减成功批次请求表和处理完成批次表中的存储信息在上文中已经介绍过,此处不再复述。而且,在缓存集群内执行请求处理脚本、存储处理脚本和存储完成脚本,会节省请求处理服务和结果处理服务中的互斥锁,能够提升整体并发效率和吞吐量,且为数据的整体完整性做出了重大贡献。脚本中要做一个任务的多个步骤,一次性在缓存集群服务中完成,再返回结果。相比不使用脚本时,请求处理服务和结果处理服务线程的一次服务任务均须和缓存集群交互多次,这样多线程的请求处理服务和结果处理服务就都需要用到分布式互斥锁,而运用了脚本就可以节省这些互斥锁,从而提升系统整体吞吐量。
(三)结果处理服务
本服务负责扣减成功批次请求的持久化工作,主要包含批次请求结果记录生成和批次请求结果记录存储两大功能。
本服务设计支持负载均衡集群部署,当整体运行时,如果本服务表现为系统瓶颈,则可以部署本服务多个节点,以优化系统整体吞吐量。本服务可以多线程并行从缓存集群中同步获取待持久化存储的扣减成功批次请求的核心信息,生成批次请求结果记录,并将其批量存储到数据库。本服务设计成线程组,配置一个定时器,定时启动线程组执行批次请求结果记录生成和存储任务,一个线程读取一个扣减成功批次请求的核心信息,多线程并行运行。当缓存集群的扣减成功批次表中无数据时,子线程结束,主线程进入等待状态,等待下次定时触发。批次请求结果记录生成和存储运行在同一个线程中,其中线程数和定时时间可通过系统属性进行配置。
(1)批次交易结果记录生成
本功能负责通过利用存储处理脚本从扣减成功批次表中读取第一个待存储状态(或存储超时)的扣减成功批次请求的核心信息,然后生成含幂等性处理的批次处理完成记录的插入语句、请求对象的总数量的扣减更新语句和完整记录的插入语句,这些数据库语句在上文中已经详细解释,此处不再累述。其中,存储处理脚本负责从扣减成功批次表头部开始尝试读取第一个待存储(或存储超时)状态的扣减成功批次请求的核心信息,并将其状态设置为存储中,设置存储开始时间,然后将该扣减成功批次请求的核心信息返回给调用方(即,结果处理服务)。
此外,本功能生成数据库语句的程序代码中均提供出数据库语句生成接口,供业务系统自由实现自身的复杂业务逻辑。本功能生成三部分数据库语句后,同步调用批次请求结果记录存储功能进行后续处理。
(2)批次请求结果记录存储
本功能实现对批次请求结果记录的存储,接收批次请求结果记录生成功能传递来的三部分数据库语句,启用数据库事务,在事务中依次执行批次处理完成记录的插入语句、请求对象的总数量的扣减更新语句和完整记录的插入语句。批次请求结果记录存储完成时,通过利用存储完成脚本传递处理完成的成功批次标识至缓存集群,实现将处理完成批次请求信息同步到缓存集群中。本功能中传递的插入语句分批大小可配置,默认值为批次中请求的数量。其中,存储完成脚本负责接收处理完成的成功批次标识,将成功批次标识对应的扣减成功批次请求的核心信息从扣减成功批次表中移动至处理完成批次表尾部。
本发明处理高并发数据请求的整体架构中,请求分批子服务能够利用分批规则对高并发数据请求进行分批,将相同类型的数据请求放在一起,从而可以使批次请求处理子服务结合缓存集群对一批数据请求进行统一处理,提高数据请求的处理效率,并且借助缓存集群服务处理数据请求,能够降低系统瓶颈的可能性。此外,本发明实施例中请求结果监听与处理子服务采用双线程组的方式获取处理后的数据信息,能够将处理成功和处理失败的数据请求分开处理,从而为后续操作带来方便,提高本发明实施例的实用性。还有,本发明实施例中批次请求处理子服务采用脚本语言进行缓存集群内部的数据处理,能够保证缓存数据的一致性。并且,本发明实施例中批次请求处理子服务采用脚本语言将扣减成功的请求打包成一个批次,并且缓存该批次的核心信息和成功批次标识至缓存集群的扣减成功批次表中,能够压缩批次核心信息数据量,减少与缓存集群的通讯时间,减少缓存集群的存储空间,最终更有效地提高整体性能和吞吐量。另外,本发明实施例的结果处理服务对批次请求结果记录设计时,一方面启用数据库批处理技术,来提高吞吐量,另一方面包含幂等性处理设计在内,当因故宕机时,能够在处理超时后继续幂等性处理其未完成的任务,从而不会丢失任何一批数据,保持数据整体的一致性,提高用户体验。
图3是根据本发明实施例的处理高并发数据请求的装置的主要模块的示意图。如图3所示,本发明实施例的处理高并发数据请求的装置300主要包括以下模块:分批模块301、处理模块302和反馈模块303。
其中,分批模块301可用于接收高并发数据请求,利用预设的分批规则,对高并发数据请求进行分批处理,获得至少一批待处理请求;处理模块302可用于接收批次请求处理指令,根据至少一批待处理请求的请求信息,在缓存集群内对至少一批待处理请求进行处理;反馈模块303可用于采用双线程组获取处理后的数据信息,根据高并发数据请求的请求标识,将数据信息反馈至高并发数据请求的发送方。
本发明实施例中,分批模块301还可用于:接收高并发数据请求,获取高并发数据请求中每一个数据请求的请求对象和请求时间;根据请求对象的类别,对高并发数据请求进行分类,获得至少一类数据请求;按照配置的批次请求数量和/或分批间隔时间,根据请求时间对至少一类数据请求进行分批,得到至少一批待处理请求。
本发明实施例中,分批模块301还可用于:将至少一批待处理请求存储至批次请求待处理内存队列中,触发生成批次请求处理指令。
本发明实施例中,处理模块302还可用于:针对任意一批待处理请求,在缓存集群内按照如下方法进行处理:获取一批待处理请求的请求对象和请求数量;根据请求对象和请求数量,利用请求处理脚本,在缓存集群内对一批待处理请求进行扣减处理;根据扣减处理结果,对一批待处理请求进行缓存。
本发明实施例中,处理模块302还可用于:通过请求处理脚本,判断缓存集群的对象库存表中请求对象的总数量是否大于请求数量;若是,则从总数量中减去请求数量,确认扣减处理结果为扣减成功,若否,则判断缓存集群的对象库存表中请求对象的总数量是否为零;在缓存集群的对象库存表中请求对象的总数量为零的情况下,确认扣减处理结果为扣减失败;在缓存集群的对象库存表中请求对象的总数量小于请求数量且大于零的情况下,将总数量置为零,确认扣减处理结果为部分扣减成功。
本发明实施例中,处理模块302还可用于:若一批待处理请求的扣减处理结果为扣减成功,则将一批待处理请求打包为一个扣减成功批次请求,并将该扣减成功批次请求的核心信息和成功批次标识缓存至缓存集群的扣减成功批次表;若一批待处理请求的扣减处理结果为扣减失败,则将一批待处理请求打包写入批次请求失败内存队列;若一批待处理请求的扣减处理结果为部分扣减成功,则将一批待处理请求中扣减失败的待处理请求打包写入批次请求失败内存队列,将一批批待处理请求中扣减成功的待处理请求打包为一个扣减成功批次请求,并将该扣减成功批次请求的核心信息和成功批次标识缓存至缓存集群的扣减成功批次表。
本发明实施例中,处理模块302还可用于:将一批待处理请求的请求数量和请求对象作为信息头,将一批待处理请求中每一个请求的请求信息作为信息体,生成一批待处理请求的核心信息;以及根据一批待处理请求的核心信息和该扣减成功批次请求中每一个请求的请求成功信息,生成该扣减成功批次请求的核心信息,并生成该扣减成功批次请求的成功批次标识。
本发明实施例中,处理模块302还可用于:在扣减成功批次表中设置该扣减成功批次请求的存储状态为未存储。
本发明实施例中,处理高并发数据请求的装置300还可以包括存储模块(图中未示出)。该存储模块可用于:定时利用存储处理脚本,从扣减成功批次表中获取待存储扣减成功批次请求的核心信息,其中,待存储扣减成功批次请求为存储状态为未存储或者存储超时的扣减成功批次请求;基于含幂等性处理的数据库语句,根据获取的核心信息,生成待存储扣减成功批次请求的批次请求结果记录,并将批次请求结果记录持久化存储至数据库中。
本发明实施例中,存储模块还可用于:利用存储完成脚本,根据待存储扣减成功批次请求的成功批次标识,将待存储扣减成功批次请求从扣减成功批次表移动至缓存集群的处理完成批次表。
本发明实施例中,反馈模块303还可用于:根据返回请求失败指令,采用第一线程组从批次请求失败内存队列中获取数据信息,采用第二线程组定时从缓存集群的处理完成批次表中获取数据信息;针对高并发数据请求的每一个数据请求,根据数据请求的标识,从获取的数据信息中确定数据请求对应的请求结果,并将对应的请求结果反馈至数据请求的发送方。
本发明实施例中,反馈模块303还可用于:触发生成返回请求失败指令。
从以上描述可以看出,本发明实施例的处理高并发数据请求的装置能够利用分批规则对高并发数据请求进行分批,将相同类型的数据请求放在一起,能够根据每一批请求的请求信息,结合缓存集群对该批数据请求进行统一处理,提高数据请求的处理效率,并且借助缓存集群处理数据请求,降低系统瓶颈的可能性。此外,本发明实施例中采用双线程组的方式获取处理后的数据信息,能够将处理成功和处理失败的数据请求分开处理,从而为后续操作带来方便,提高本发明实施例的实用性。还有,本发明实施例中采用脚本语言进行缓存集群内部的数据处理,能够保证缓存数据的一致性。并且,本发明实施例中将扣减成功的请求打包成一个批次,缓存该批次的核心信息和成功批次标识至缓存集群的扣减成功批次表中,能够压缩批次核心信息数据量,减少与缓存集群的通讯时间,减少缓存集群的存储空间,最终更有效地提高整体性能和吞吐量。另外,本发明实施例的处理高并发数据请求的方法中,批次请求结果记录设计一方面启用数据库批处理技术,来提高吞吐量,另一方面包含幂等性处理设计在内,当因故宕机时,能够在处理超时后继续幂等性处理其未完成的任务,从而不会丢失任何一批数据,保持数据整体的一致性,提高用户体验。
图4示出了可以应用本发明实施例的处理高并发数据请求的方法或处理高并发数据请求的装置的示例性系统架构400。
如图4所示,系统架构400可以包括终端设备401、402、403,网络404和服务器405。网络404用以在终端设备401、402、403和服务器405之间提供通信链路的介质。网络404可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备401、402、403通过网络404与服务器405交互,以接收或发送消息等。终端设备401、402、403上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备401、402、403可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器405可以是提供各种服务的服务器,例如对用户利用终端设备401、402、403所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息--仅为示例)反馈给终端设备。
需要说明的是,本发明实施例所提供的处理高并发数据请求的方法一般由服务器405执行,相应地,处理高并发数据请求的装置一般设置于服务器405中。
应该理解,图4中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图5,其示出了适于用来实现本发明实施例的终端设备的计算机系统500的结构示意图。图5示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图5所示,计算机系统500包括中央处理单元(CPU)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储部分508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM 503中,还存储有系统500操作所需的各种程序和数据。CPU 501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元(CPU)501执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括分批模块、处理模块和反馈模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,分批模块还可以被描述为“接收高并发数据请求,利用预设的分批规则,对高并发数据请求进行分批,获得至少一批待处理请求的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:接收高并发数据请求,利用预设的分批规则,对高并发数据请求进行分批,获得至少一批待处理请求;接收批次请求处理指令,根据至少一批待处理请求的请求信息,在缓存集群内对至少一批待处理请求进行处理;采用双线程组获取处理后的数据信息,根据高并发数据请求的请求标识,将数据信息反馈至高并发数据请求的发送方。
根据本发明实施例的技术方案,能够利用分批规则对高并发数据请求进行分批,将相同类型的数据请求放在一起,能够根据每一批请求的请求信息,结合缓存集群对该批数据请求进行统一处理,提高数据请求的处理效率,并且借助缓存集群处理数据请求,降低系统瓶颈的可能性。此外,本发明实施例中采用双线程组的方式获取处理后的数据信息,能够将处理成功和处理失败的数据请求分开处理,从而为后续操作带来方便,提高本发明实施例的实用性。还有,本发明实施例中采用脚本语言进行缓存集群内部的数据处理,能够保证缓存数据的一致性。并且,本发明实施例中将扣减成功的请求打包成一个批次,缓存该批次的核心信息和成功批次标识至缓存集群的扣减成功批次表中,能够压缩批次核心信息数据量,减少与缓存集群的通讯时间,减少缓存集群的存储空间,最终更有效地提高整体性能和吞吐量。另外,本发明实施例的处理高并发数据请求的方法中,批次请求结果记录设计一方面启用数据库批处理技术,来提高吞吐量,另一方面包含幂等性处理设计在内,当因故宕机时,能够在处理超时后继续幂等性处理其未完成的任务,从而不会丢失任何一批数据,保持数据整体的一致性,提高用户体验。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (14)
1.一种处理高并发数据请求的方法,其特征在于,包括:
接收高并发数据请求,利用预设的分批规则,对所述高并发数据请求进行分批,获得至少一批待处理请求;
接收批次请求处理指令,根据所述至少一批待处理请求的请求信息,在缓存集群内对所述至少一批待处理请求进行处理,包括:针对任意一批待处理请求,在所述缓存集群内按照如下方法进行处理:获取所述一批待处理请求的请求对象和请求数量;根据所述请求对象和所述请求数量,利用请求处理脚本,在所述缓存集群内对所述一批待处理请求进行扣减处理,包括:通过所述请求处理脚本,判断所述缓存集群的对象库存表中所述请求对象的总数量是否大于所述请求数量;若是,则从所述总数量中减去所述请求数量,确认扣减处理结果为扣减成功;
根据扣减处理结果,对所述一批待处理请求进行缓存,包括:若所述一批待处理请求的扣减处理结果为扣减成功,则将所述一批待处理请求打包为一个扣减成功批次请求,并将该扣减成功批次请求的核心信息和成功批次标识缓存至所述缓存集群的扣减成功批次表;
采用双线程组获取处理后的数据信息,根据所述高并发数据请求的请求标识,将所述数据信息反馈至所述高并发数据请求的发送方。
2.根据权利要求1所述的方法,其特征在于,所述接收高并发数据请求,利用预设的分批规则,对所述高并发数据请求进行分批,获得至少一批待处理请求,包括:
接收所述高并发数据请求,获取所述高并发数据请求中每一个数据请求的请求对象和请求时间;
根据所述请求对象的类别,对所述高并发数据请求进行分类,获得至少一类数据请求;
按照配置的批次请求数量和/或分批间隔时间,根据所述请求时间对所述至少一类数据请求进行分批,得到所述至少一批待处理请求。
3.根据权利要求1所述的方法,其特征在于,在获得至少一批待处理请求之后,所述方法还包括:
将所述至少一批待处理请求存储至批次请求待处理内存队列中,触发生成所述批次请求处理指令。
4.根据权利要求1所述的方法,其特征在于,所述根据所述请求对象和所述请求数量,利用请求处理脚本,在所述缓存集群内对所述一批待处理请求进行扣减处理,包括:
若否,则判断所述缓存集群的对象库存表中所述请求对象的总数量是否为零;
在所述缓存集群的对象库存表中所述请求对象的总数量为零的情况下,确认扣减处理结果为扣减失败;
在所述缓存集群的对象库存表中所述请求对象的总数量小于所述请求数量且大于零的情况下,将所述总数量置为零,确认扣减处理结果为部分扣减成功。
5.根据权利要求4所述的方法,其特征在于,所述根据扣减处理结果,对所述一批待处理请求进行缓存,包括:
若所述一批待处理请求的扣减处理结果为扣减失败,则将所述一批待处理请求打包写入批次请求失败内存队列;
若所述一批待处理请求的扣减处理结果为部分扣减成功,则将所述一批待处理请求中扣减失败的待处理请求打包写入所述批次请求失败内存队列,将所述一批待处理请求中扣减成功的待处理请求打包为一个扣减成功批次请求,并将该扣减成功批次请求的核心信息和成功批次标识缓存至所述缓存集群的扣减成功批次表。
6.根据权利要求5所述的方法,其特征在于,在根据所述请求对象和所述请求数量,利用请求处理脚本,在所述缓存集群内对所述一批待处理请求进行扣减处理之前,所述方法还包括:
将所述一批待处理请求的请求数量和请求对象作为信息头,将所述一批待处理请求中每一个请求的请求信息作为信息体,生成所述一批待处理请求的核心信息;以及
在将该扣减成功批次请求的核心信息和成功批次标识缓存至所述缓存集群的扣减成功批次表之前,所述方法还包括:
根据所述一批待处理请求的核心信息和该扣减成功批次请求中每一个请求的请求成功信息,生成该扣减成功批次请求的核心信息,并生成该扣减成功批次请求的成功批次标识。
7.根据权利要求5所述的方法,其特征在于,所述方法还包括:在所述扣减成功批次表中设置该扣减成功批次请求的存储状态为未存储。
8.根据权利要求5所述的方法,其特征在于,所述方法还包括:
定时利用存储处理脚本,从所述扣减成功批次表中获取待存储扣减成功批次请求的核心信息,其中,所述待存储扣减成功批次请求为存储状态为未存储或者存储超时的扣减成功批次请求;
基于含幂等性处理的数据库语句,根据获取的核心信息,生成所述待存储扣减成功批次请求的批次请求结果记录,并将所述批次请求结果记录持久化存储至数据库中。
9.根据权利要求8所述的方法,其特征在于,在将所述批次请求结果记录持久化存储至数据库中之后,所述方法还包括:
利用存储完成脚本,根据所述待存储扣减成功批次请求的成功批次标识,将所述待存储扣减成功批次请求从所述扣减成功批次表移动至所述缓存集群的处理完成批次表。
10.根据权利要求9所述的方法,其特征在于,所述采用双线程组获取处理后的数据信息,根据所述高并发数据请求的请求标识,将所述数据信息反馈至所述高并发数据请求的发送方,包括:
根据返回请求失败指令,采用第一线程组从所述批次请求失败内存队列中获取数据信息,采用第二线程组定时从所述缓存集群的处理完成批次表中获取数据信息;
针对所述高并发数据请求的每一个数据请求,根据所述数据请求的标识,从获取的数据信息中确定所述数据请求对应的请求结果,并将所述对应的请求结果反馈至所述数据请求的发送方。
11.根据权利要求10所述的方法,其特征在于,在将该批待处理请求打包写入批次请求失败内存队列或者将所述一批待处理请求中扣减失败的待处理请求打包写入所述批次请求失败内存队列之后,所述方法还包括:触发生成所述返回请求失败指令。
12.一种处理高并发数据请求的装置,其特征在于,包括:
分批模块,用于接收高并发数据请求,利用预设的分批规则,对所述高并发数据请求进行分批处理,获得至少一批待处理请求;
处理模块,用于接收批次请求处理指令,根据所述至少一批待处理请求的请求信息,在缓存集群内对所述至少一批待处理请求进行处理;包括:针对任意一批待处理请求,在所述缓存集群内按照如下方法进行处理:获取所述一批待处理请求的请求对象和请求数量;根据所述请求对象和所述请求数量,利用请求处理脚本,在所述缓存集群内对所述一批待处理请求进行扣减处理,包括:通过所述请求处理脚本,判断所述缓存集群的对象库存表中所述请求对象的总数量是否大于所述请求数量;若是,则从所述总数量中减去所述请求数量,确认扣减处理结果为扣减成功;根据扣减处理结果,对所述一批待处理请求进行缓存,包括:若所述一批待处理请求的扣减处理结果为扣减成功,则将所述一批待处理请求打包为一个扣减成功批次请求,并将该扣减成功批次请求的核心信息和成功批次标识缓存至所述缓存集群的扣减成功批次表;
反馈模块,用于采用双线程组获取处理后的数据信息,根据所述高并发数据请求的请求标识,将所述数据信息反馈至所述高并发数据请求的发送方。
13.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-11中任一所述的方法。
14.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-11中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911045459.2A CN112748855B (zh) | 2019-10-30 | 2019-10-30 | 处理高并发数据请求的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911045459.2A CN112748855B (zh) | 2019-10-30 | 2019-10-30 | 处理高并发数据请求的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112748855A CN112748855A (zh) | 2021-05-04 |
CN112748855B true CN112748855B (zh) | 2024-03-01 |
Family
ID=75640637
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911045459.2A Active CN112748855B (zh) | 2019-10-30 | 2019-10-30 | 处理高并发数据请求的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112748855B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113391764A (zh) * | 2021-06-09 | 2021-09-14 | 北京沃东天骏信息技术有限公司 | 一种信息处理方法及装置、存储介质 |
CN114170335B (zh) * | 2021-10-18 | 2022-10-04 | 深圳追一科技有限公司 | 数字人视频的生成方法、装置、计算机设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105894366A (zh) * | 2016-04-22 | 2016-08-24 | 上海瀚之友信息技术服务有限公司 | 一种秒杀型交易处理系统及方法 |
CN109376004A (zh) * | 2018-08-20 | 2019-02-22 | 中国平安人寿保险股份有限公司 | 基于集群计算的数据批处理方法、装置、电子设备及介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050228808A1 (en) * | 2003-08-27 | 2005-10-13 | Ascential Software Corporation | Real time data integration services for health care information data integration |
-
2019
- 2019-10-30 CN CN201911045459.2A patent/CN112748855B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105894366A (zh) * | 2016-04-22 | 2016-08-24 | 上海瀚之友信息技术服务有限公司 | 一种秒杀型交易处理系统及方法 |
CN109376004A (zh) * | 2018-08-20 | 2019-02-22 | 中国平安人寿保险股份有限公司 | 基于集群计算的数据批处理方法、装置、电子设备及介质 |
Non-Patent Citations (1)
Title |
---|
基于Asp.net的高考填报志愿系统高并发负载解决方案;李晓宁;张浩;;科技资讯(第09期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112748855A (zh) | 2021-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107729139B (zh) | 一种并发获取资源的方法和装置 | |
US10402424B1 (en) | Dynamic tree determination for data processing | |
CN110825535B (zh) | 一种作业调度的方法和系统 | |
US8150889B1 (en) | Parallel processing framework | |
US20150347305A1 (en) | Method and apparatus for outputting log information | |
US20140181831A1 (en) | DEVICE AND METHOD FOR OPTIMIZATION OF DATA PROCESSING IN A MapReduce FRAMEWORK | |
CN109032796B (zh) | 一种数据处理方法和装置 | |
CN112051993A (zh) | 状态机模板的生成及任务处理方法、装置、介质及设备 | |
CN112748855B (zh) | 处理高并发数据请求的方法和装置 | |
US11321090B2 (en) | Serializing and/or deserializing programs with serializable state | |
US8635682B2 (en) | Propagating security identity information to components of a composite application | |
CN110704485A (zh) | 虚拟资源处理方法、装置及存储介质 | |
CN107066339A (zh) | 分布式作业管理器及分布式作业管理方法 | |
CN110413428A (zh) | 对账数据的处理方法、电子设备及存储介质 | |
CN113076304A (zh) | 一种分布式版本管理方法、装置和系统 | |
CN115454629A (zh) | 基于云原生技术的ai算法与微服务调度方法及其装置 | |
US9473561B2 (en) | Data transmission for transaction processing in a networked environment | |
US10726047B2 (en) | Early thread return with secondary event writes | |
CN112825525B (zh) | 用于处理事务的方法和装置 | |
CN111767126A (zh) | 分布式批量处理的系统和方法 | |
CN114584618A (zh) | 信息交互方法、装置、设备、存储介质和系统 | |
CN114168626A (zh) | 一种数据库操作的处理方法、装置、设备及介质 | |
CN113778659B (zh) | 多线程处理方法和装置 | |
CN110673962B (zh) | 一种内容流处理方法、装置、设备及介质 | |
CN115129438A (zh) | 任务分布式调度的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |