买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】秒杀请求处理方法、应用服务器集群及存储介质_康键信息技术(深圳)有限公司_201810547915.2 

申请/专利权人:康键信息技术(深圳)有限公司

申请日:2018-05-31

公开(公告)日:2023-06-13

公开(公告)号:CN108897615B

主分类号:G06Q30/0601

分类号:G06Q30/0601;G06Q10/0875;G06F16/23;G06F16/2455;H04L67/5682;H04L67/1036;G06F9/50;G06F12/0811;G06F12/0866

优先权:

专利状态码:有效-授权

法律状态:2023.06.13#授权;2020.05.19#实质审查的生效;2018.11.27#公开

摘要:本发明提供一种秒杀请求处理方法,该方法包括:分别确定每台缓存服务器对应的虚拟库存;接收用户提交的秒杀请求,通过负载均衡分摊到所述服务器集群中的多台服务器;读取所述秒杀请求的具体信息,对所述秒杀请求进行资格验证;当资格验证成功时,对与该秒杀请求对应的缓存服务器的虚拟库存进行扣减,并生成与该秒杀请求对应的预设令牌信息,将该预设令牌信息保存至预设一级缓存中;及,接收用户针对通过资格验证的秒杀请求提交的交易请求,对所述实时令牌信息进行校验,当令牌校验通过时,对数据库中的真实库存进行扣减,秒杀成功。本发明还提供一种应用服务器集群及存储介质。利用本发明,可以提高秒杀请求处理效率。

主权项:1.一种秒杀请求处理方法,应用于应用服务器集群,其特征在于,该方法包括:S1、预先确定一个缓存服务器集群作为一级缓存,根据预设规则将秒杀商品的库存均匀分布至所述缓存服务器集群中的多台缓存服务器,并分别确定每台缓存服务器对应的虚拟库存;S2、接收网关服务器通过均衡负载分配的秒杀请求,其中,网关服务器到达预设时刻时,接收用户通过客户端提交的多条秒杀请求;S3、读取每条秒杀请求的具体信息,根据预设的验证规则,对所述每条秒杀请求进行资格验证;S4、当所述秒杀请求的资格验证通过时,对与该秒杀请求对应的缓存服务器的虚拟库存进行扣减,并根据用户资格信息生成与该秒杀请求对应的预设令牌信息,将该预设令牌信息保存至所述一级缓存中;及S5、接收用户针对通过资格验证的秒杀请求提交的交易请求,根据所述交易请求生成实时令牌信息,对所述实时令牌信息进行校验,当所述实时令牌信息校验通过时,对数据库中的真实库存进行扣减,秒杀成功;其中,所述对所述实时令牌信息进行校验的步骤包括:判断所述一级缓存中是否存在该秒杀请求对应的预设令牌信息,当所述一级缓存中不存在所述预设令牌信息时,判定所述实时令牌信息无效;当所述一级缓存中存在所述预设令牌信息时,判断所述实时令牌信息是否与所述预设令牌信息一致,若不一致,判定所述实时令牌信息无效,提示令牌校验失败,或者,若一致,判定所述实时令牌信息有效,提示令牌校验成功。

全文数据:秒杀请求处理方法、应用服务器集群及存储介质技术领域[0001]本发明涉及数据处理技术领域,尤其涉及一种秒杀请求处理方法、应用服务器集群及计算机可读存储介质。背景技术[0002]在电商领域中,为了吸引用户经常会开展一些活动,例如:秒杀活动。秒杀活动就是以较低的价格推出一些商品,这些商品的数量是有限的,需要用户进行秒杀抢购,以吸引用户。然而,活动开始瞬间的流量非常大,且都是在请求相同的资源,因此会造成严重的数据库并发读写冲突以及资源锁请求冲突。发明内容[0003]鉴于以上内容,本发明提供一种秒杀请求处理方法、应用服务器集群及计算机可读存储介质,其主要目的在于提高秒杀请求处理效率。[0004]为实现上述目的,本发明提供一种秒杀请求处理方法,该方法包括:[0005]S1、根据预设规则将秒杀商品的库存均匀分布至缓存服务器集群中的多台缓存服务器,并分别确定每台缓存服务器对应的虚拟库存;[0006]S2、接收网关服务器通过均衡负载分配的秒杀请求,其中,网关服务器到达预设时刻时,接收用户通过客户端提交的多条秒杀请求;[0007]S3、读取每条秒杀请求的具体信息,根据预设的验证规则,对所述每条秒杀请求进行资格验证;[000S]S4、当所述秒杀请求的资格验证通过时,对与该秒杀请求对应的缓存服务器的虚拟库存进行扣减,并根据用户资格信息生成与该秒杀请求对应的预设令牌信息,将该预设令牌信息保存至预设一级缓存中;及[0009]S5、接收用户针对通过资格验证的秒杀请求提交的交易请求,根据所述交易请求生成实时令牌信息,对所述实时令牌信息进行校验,当所述实时令牌信息校验通过时,对数据库中的真实库存进行扣减,秒杀成功。[0010]此外,本发明还提供一种应用服务器集群,其特征在于,该应用服务器集群包括多台应用服务器,所述服务器包括:存储器、处理器,所述存储器上存储有可在所述处理器上运行的秒杀请求处理程序,所述秒杀请求处理程序被所述处理器执行时,可实现如上所述秒杀请求处理方法中的任意步骤。[0011]此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中包括秒杀请求处理程序,所述秒杀请求处理程序被处理器执行时,可实现如上所述秒杀请求处理方法中的任意步骤。[0012]本发明提出的秒杀请求处理方法、应用服务器集群及计算机可读存储介质,通过对秒杀商品的库存进行库存散列,将散列后的库存保存至缓存服务器集群中的每一台缓存服务器上,利用网关服务器通过负载均衡将秒杀请求分配至服务器集群中的每台服务器,并将秒杀请求载入至相应的缓存服务器中,分散了秒杀请求,提升了系统的响应能力;通过对秒杀请求进行资格验证,过滤掉无效请求,减缓了系统核心服务的压力;构建一级缓存、二级缓存,服务器依次从二级缓存、一级缓存、数据库中获取相应信息,提高了秒杀请求处理效率。附图说明[0013]图1为本发明秒杀请求处理方法较佳实施例的流程图;[0014]图2为本发明应用服务器集群较佳实施例的应用环境示意图;[0015]图3为图2中应用服务器的较佳实施例的示意图;[0016]图4为图3中秒杀请求处理程序的程序模块示意图。[0017]本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。具体实施方式[0018]应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。[0019]本发明提供一种秒杀请求处理方法。参照图1所示,为本发明秒杀请求处理方法较佳实施例的流程图。该方法可以由一个装置执行,该装置可以由软件和或硬件实现。[0020]在本实施例中,秒杀请求处理方法包括步骤S1-S5:[0021]S1、根据预设规则将秒杀商品的库存均匀分布至缓存服务器集群中的多台缓存服务器,并分别确定每台缓存服务器对应的虚拟库存;[0022]预先确定一个缓存服务器集群,其中,该缓存服务器集群中包含m台缓存服务器,并且,将缓存服务器集群作为一级缓存。[0023]在进行秒杀活动之前,会预先确定秒杀活动中的秒杀商品及商品编号、库存、活动的场次等信息,上述信息保存在数据库中。假设秒杀活动中包含1种商品,从数据库中读取该商品的实际库存为10000,按照用户编号后两位00-99,将商品库存划分为1〇〇份,每份包含100个库存,根据hash算法,将这100份库存均匀分布至缓存服务器集群中的m台缓存服务器上。[0024]需要说明的是,分布至缓存服务器集群中的每一台缓存服务器上的库存为实际库存,但实际上保存在每一台缓存服务器上的库存为虚拟库存。一般请情况下,虚拟库存略大于实际库存,可根据运营商需求进行设置。然后,分别确定所述每台缓存服务器对应的虚拟库存,并将虚拟库存信息保存至一级库存中。[0025]假设秒杀活动中的商品i的库存为10000,那么,商品i在每台缓存服务器中的键key分别定义为:itemstock:r:i:00〜itemstock:r:i:99,其中,itemstock为资源前缀库存),r为秒杀活动的场次编号,i为秒杀活动的商品编号,“00”-“99”为用户编号后两位,每个键对应的存储的值value为100。也就是说,秒杀活动中不同场次和或不同商品,其对应的键都会不一样。[0026]可以理解的是,缓存服务器集群中缓存服务器的数量决定了这个缓存服务器集群的消化能力,如果单台缓存服务器的吞吐量为2万TPS,那么m台缓存服务器的吞吐量即为2m万TPS,因此,在本实施例中,m的取值需通过预估秒杀活动中的并发量来确定。[0027]S2、接收网关服务器通过均衡负载分配的秒杀请求,其中,网关服务器到达预设时刻时,接收用户通过客户端提交的多条秒杀请求;[0028]其中,所述预设时刻为秒杀活动开始的时刻。秒杀活动开始时,网关服务器接收用户通过客户端提交的秒杀请求,秒杀请求中包含:用户编号、商品信息、优惠信息等。可以理解的是,秒杀开始的时刻,会同时接收到大量秒杀请求,例如,10000条秒杀请求,需将这10000条秒杀请求分配至应用服务器集群中的每台应用服务器进行处理。[0029]在本实施例中,网关服务器根据DNS轮询机制,将10000条秒杀请求分别分配至每一台应用服务器。其中,网关服务器应用的是F5物理机。假设四台应用服务器组成应用服务器集群,IP地址分别为172•28•20•1、172•28•20•2、172•28•20•3、172•28•20•4,当用户请求访问时,网关服务器将循环调度IP地址的次序,将按172.28.20.1、172.28.20.2、172.28.20.3和172.28.20.4的顺序应答第一个用户的秒杀请求,下一个用户的秒杀请求将用旋转后的172•28•20•2、172•28•20•3、172•28•20•4和172.20•20•1这样的顺序应答,旋转过程将持续下去,成功实现DNS负载均衡。[0030]应用服务器接收网关服务器分配的秒杀请求之后,根据秒杀请求中携带的用户编号信息,将秒杀请求载入与用户编号信息对应的缓存服务器中。例如,秒杀请求中携带的用户编号信息中的后两位为“52”,确定缓存服务器集群中库存的键信息中用户编号后两位为“52”的缓存服务器,将该秒杀请求载入该缓存服务器中,供后续获取该缓存服务器上的虚拟库存信息。[0031]上述步骤将秒杀请求通过负载均衡分布至应用服务器集群中的每台应用服务器上,并利用缓存服务器集群,将并发的数秒杀请求有效地引导在缓存服务器集群中的不同缓存服务器上,避免单独的服务器并发能力有限的问题,实现分散秒杀请求的效果,提升系统的响应能力。[0032]S3、读取每条秒杀请求的具体信息,根据预设的验证规则,对所述每条秒杀请求进行资格验证;[0033]可以理解的是,为了减少应用服务器集群性能的消耗,当商品的实际库存为“〇”时,接收到用户发送的秒杀请求,直接返回已卖完的信息。具体地,该步骤包括:[0034]判断预设二级缓存中是否存在预设库存标识;[0035]当所述二级缓存中存在所述预设库存标识时,生成第一预警信息;[0036]当所述二级缓存中不存在所述预设库存标识时,判断所述一级缓存中是否存在所述预设库存标识;[0037]当所述一级缓存中存在所述预设库存标识时,生成第一预警信息,并将该预设库存标识保存至所述二级缓存中;[0038]当所述一级缓存中不存在所述预设库存标识时,将所述多个秒杀请求通过负载均衡分摊到所述应用服务器集群中的多台应用服务器。[0039]其中,预设二级缓存为应用服务器集群中每台应用服务器的内存,预设库存标识为“无库存”“库存为0”。依次按照二级缓存、一级缓存的顺序读取“无库存”“库存为〇”的库存标识,当二级缓存一级缓存中存在“无库存”“库存为0”的库存标识时,说明商品已经卖完了,生成第一预警信息并反馈至该秒杀请求对应的客户端,例如,“您抢购的商品已卖TC〇[0040]需要说明的是,当二级缓存中不存在“无库存”“库存为0”的库存标识、且一级缓存中存在“无库存”“库存为0”的库存标识时,生成第一预警信息的同时,还将该库存标识放置至二级缓存中,便于下次接收秒杀请求时直接从二级缓存中读取“无库存”“库存为〇”的库存标识,释放无效请求,减缓系统压力,同时,有效避免了商品超卖现象。[0041]需要说明的是,二级缓存中保存的数据的时效比一级缓存中保存的数据的时效短。但应用服务器从二级缓存读取数据的速度远大于从一级缓存中读取的速度。因此,将一级缓存中存储的“无库存”“库存为〇”的库存标识保存在二级缓存中,可提高后续读取“无库存”“库存为0”的库存标识的速度,更快地释放无效请求,提高系统的稳定性。[0042]可以理解的是,在十几秒的时间内,参加秒杀活动的商品库存就卖完了,之后的所有秒杀请求都是无效请求,并且每一条秒杀请求每执行一个校验步骤都需消耗服务器性能,并且是无效校验,因此需要拦截后续的多数请求。[0043]在本实施例中,通过每接收到一条秒杀请求都去二级缓存一级缓存中获取预设库存标识,阻挡后续校验步骤的流量,起到保护系统的作用。在其他实施例中,在生成“无库存”“库存为〇”的库存标识后,直接关闭用户提交秒杀请求的通道,用户无法提交秒杀请求,最大限度地减少无效请求的数量。[0044]当一级缓存、二级缓存中均不存在“无库存”“库存为0”的库存标识,表示商品还没有被抢完,初步说明接收到的秒杀请求有效,还需要通过用户资格验证过滤掉部分无效请求,仅对有效请求进行处理。具体地,所述“根据预设的验证规则,对所述每条秒杀请求进行资格验证”的步骤包括:[0045]从预设二级缓存中随机读取一条验证数据,包括验证问题及预设答案,将所述验证问题发送至所述秒杀请求对应的客户端,并接收用户输入的答案数据,将所述答案数据与所述预设答案进行比对;[0046]当所述答案数据与所述预设答案不一致时,生成第二预警信息,返回执行上一步骤;或者[0047]当所述答案数据与所述预设答案一致时,根据所述秒杀请求生成用户资格信息,并从所述一级缓存中查询该用户资格信息,当所述一级缓存中不存在该用户资格信息时,用户资格校验成功,将所述用户资格信息保存至一级缓存中,或者,当所述一级缓存中存在该用户资格信息时,生成第三预警信息。[0048]需要说明的是,在运营激活秒杀活动时,从预设的验证码库中读取预设数量(例如,10000条)的验证数据保存至二级缓存中,应用服务器集群中的不同应用服务器对应的二级缓存中的验证数据不一定相同。每一条验证数据包括验证问题及预设答案。[0049]以应用服务器集群中的应用服务器A为例,接收到网关服务器分配的秒杀请求后,当商品还没被抢完时,应用服务器A从二级缓存中随机调取一条验证数据,将该验证数据的验证问题发送至与该秒杀请求对应的客户端,同时,根据该秒杀请求中的资源前缀、商品编号、场次编号、用户编号生成键,根据键的参数将该条验证数据的预设答案保存至一级缓存中。[0050]接收到用户通过客户端输入的答案数据后,根据键的参数从一级缓存中获取预设答案,并与答案数据进行对比:当答数据案与预设答案不一致时,生成第二预警信息并反馈至该秒杀请求对应的客户端,例如“验证码错误”。然后,重新读取一条验证数据并执行验证码校验步骤。[0051]该步骤的目的在于,通过引入验证码库中的验证数据,在不增加人为识别的识别率的基础上,进一步的增加机器识别的难度,有效的阻挡机器请求对系统的压力。[0052]在通过验证码校验之后,获取上述根据秒杀请求中的资源前缀、商品编号、场次编号、用户编号生成的键作为用户资格信息,对用户资格信息进行判定。具体地,从一级缓存中查询该用户资格信息,如果一级缓存中不存在该用户资格信息,则认为当前用户没有参加过该商品、该场次的秒杀活动,也就是说当前用户具备参与参与资格,同时,将本次请求判定的该用户资格信息保存至一级缓存中。当所述一级缓存中存在该用户资格信息时,说明当前用户参加过该商品、该场次的秒杀活动,生成第三预警信息并反馈至该秒杀请求对应的客户端,例如“不能次重复秒杀该商品,不具备秒杀资格”。[0053]可以理解的是,为了防止单个用户超额抢购秒杀商品,为保存在一级缓存中的用户资格信息设置预设时间间隔(该预设时间间隔与用户支付的有效时间一致,例如,15分钟)的有效时间,有效时间远大于秒杀活动中商品被抢购完的时间,那么,用户想再抢购秒杀商品时,无法通过用户资格验证。另外,如果用户资格验证通过且后续验证均通过后,用户选择不支付或者在预设时间间隔内未支付,那么订单系统会在预设时间间隔之后关单,同时从一级缓存中释放掉该用户资格信息对应的参与记录。也就是说,用户在15分钟之后依然可以再次参加这个商品的秒杀,前提是这个商品还有库存。[0054]上述步骤通过对用户资格进行验证,进一步过滤掉了无效请求,解决了单用户刷单的问题,减缓了系统压力。[0055]S4、当所述秒杀请求的资格验证通过时,对与该秒杀请求对应的缓存服务器的虚拟库存进行扣减,并根据用户资格信息生成与该秒杀请求对应的预设令牌信息,将该预设令牌信息保存至预设一级缓存中;[0056]当该秒杀请求对应的用户具备秒杀资格时,根据用户编号的后两位获取该秒杀请求对应的缓存服务器上的虚拟库存,对虚拟库存进行一次扣减操作。然后,根据上述用户资格信息,生成与该用户资格信息对应的预设令牌信息,例如,根据该秒杀请求中包含的秒杀活动编号a,秒杀活动的场次编号r,秒杀活动的商品编号i,用户编号u,生成的令牌即token为:a:r:i:u,然后将该预设令牌信息保存至一级缓存中。[0057]可以理解的是,与用户资格相似的是,如果用户最终选择不支付或者在预设时间间隔内未支付,那么订单系统会在预设时间间隔之后关单,同时,也需要从一级缓存中释放掉该秒杀请求对应的预设令牌信息。因此,也需要给预设令牌时间设置一个预设时间间隔的有效时间,例如,15分钟。[0058]需要说明的是,当虚拟库存不为零时,才会发放令牌,实现放行获得去参与扣减真实库存的资格控制。当虚拟库存为零时,对虚拟库存进行一次扣减操作后即为负数,由于虚拟库存大于真实库存,当虚库库存不够时,说明商品的真实库存也不够,令牌发放失败,生成第一预警信息并反馈至该秒杀请求对应的客户端,例如,“当前商品已卖完”。[0059]进一步地,为了减少后续的秒杀请求对系统性能的消耗,生成并保存预设库存标识(“无库存”“库存为0”)至所述一级缓存中。[0060]S5、接收用户针对通过资格验证的秒杀请求提交的交易请求,根据所述交易请求生成实时令牌信息,对所述实时令牌信息进行校验,当所述实时令牌信息校验通过时,对数据库中的真实库存进行扣减,秒杀成功。[0061]用户通过资格验证之后的预设时间内,可进行后续的付忒操作。接收用尸基于秒杀请求提交的交易请求,交易请求中包含:秒杀活动编号a,秒杀活动的场次编号r,秒杀活动的商品编号i,用户编号u等信息,根据交易请求中包含的信息及预设_的令牌生成规则,生成该交易请求的实时令牌信息。具体地,所述“对所述实时令牌信息进行校验”的步骤包括:[0062]从所述一级缓存中获取该秒杀请求对应的预设令牌信息,当所述一级缓存中不存在所述预设令牌信息时,判定所述实施令牌信息无效;[0063]当所述一级缓存中存在所述预设令牌信息时,判断所述实时令牌信息是否与所述预设令牌信息一致;[0064]若不一致,判定所述实时令牌信息无效,提示令牌校验失败;或者[0065]若一致,判定所述实时令牌信息有效,提示令牌校验成功。[0066]一级缓存中不存在所述预设令牌信息时,说明该预设令牌信息已被释放,即超出了付款的有效时限。当实施令牌信息与预设令牌信息一致时,说明当前交易请求对应地秒杀请求通过了上述用户资格验证,为有效请求。[0067]该步骤的目的在于,链路下游请求的时候根据请求中包含的参数拼装出组合一致的键来获取用户下单的时候需要的令牌,以来防止绕过系统验证,直接请求到核心链路。[0068]令牌校验成功后,需对商品的真实库存进行扣减,当数据库中商品的真实库存不为零时,真实库存扣减成功则秒杀成功,交易才会成功,至此,交易完成,当真实库存因某种原因扣减失败时,预设令牌信息会失效,在预设时间间隔例如,15分钟后,用户将重新具备秒杀资格。[0069]需要说明的是,当商品的真实库存为零时,对真实库存进行一次扣减操作后即为负数,说明商品的真实库存不够,无法进行交易,生成第一预警信息并反馈至该交易请求对应的客户端,例如,“当前商品已卖完”。[0070]进一步地,为了减少后续的秒杀请求对系统性能的消耗,生成并保存预设库存标识(“无库存”“库存为〇”)至所述一级缓存中。[0071]在该步骤中,通过在用户下单支付时校验令牌,过滤掉无效令牌的请求,防止绕开链路请求。[0072]上述实施例提出的秒杀请求处理方法,通过对秒杀商品的库存进行库存散列,将散列后的库存保存至缓存服务器集群中的每一台缓存服务器上,利用网关服务器通过负载均衡将秒杀请求分配至应用服务器集群中的每台应用服务器,并将秒杀请求载入至相应的缓存服务器中,分散了秒杀请求,提升了系统的响应能力;通过对秒杀请求进行资格验证,过滤掉无效请求,减缓了系统核心服务的压力;构建一级缓存、二级缓存,服务器依次从二级缓存、一级缓存、数据库中获取相应信息,提高了秒杀请求处理效率。[0073]本发明还提供一种应用服务器集群。参照图2所示,为本发明应用服务器集群1的应用环境示意图。[0074]在本实施例中,应用服务器集群1中包含多台应用服务器2,所述应用服务器2接收网关服务器4分配的秒杀请求,其中,所述网关服务器用于接收用户通过客户端5发送的数据请求,例如秒杀请求,所述应用服务器2与缓存服务器集群3进行数据传输,例如,存储和读取,所述应用服务器2与客户端5进行数据传输,例如,接收用户输入的验证码,或者向客户端5反馈预警信息等。[0075]其中,所述缓存服务器集群3中每台缓存服务器31作为一级缓存,所述应用服务器2的内存作为二级缓存。[0076]参照图3所示,为图2中应用服务器2的较佳实施例的示意图。[0077]在本实施例中,应用服务器2可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器。[0078]该应用服务器2包括存储器11、处理器12,通信总线13,及网络接口14。[0079]其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是所述应用服务器2的内部存储单元,例如该应用服务器2的硬盘。存储器11在另一些实施例中也可以是所述应用服务器2的外部存储设备,例如该应用服务器2上配备的插接式硬盘,智能存储卡(SmartMediaCard,SMC,安全数字(SecureDigital,SD卡,闪存卡FlashCard等。进一步地,存储器11还可以既包括该应用服务器2的内部存储单元也包括外部存储设备。[0080]存储器11不仅可以用于存储安装于该应用服务器2的应用软件及各类数据,例如秒杀请求处理程序10等,还可以用于暂时地存储已经输出或者将要输出的数据。[0081]处理器12在一些实施例中可以是一中央处理器(CentralProcessingUnit,CPU、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如秒杀请求处理程序10等。[0082]通信总线13用于实现这些组件之间的连接通信。[0083]网络接口14可选的可以包括标准的有线接口、无线接口(如WI-H接口),通常用于在该应用服务器2与其他电子设备之间建立通信连接。[0084]图3仅示出了具有组件11-14的应用服务器2,本领域技术人员可以理解的是,图3示出的结构并不构成对应用服务器2的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。[0085]可选地,该应用服务器2还可以包括用户接口,用户接口可以包括显示器Display、输入单元比如键盘Keyboard,可选的用户接口还可以包括标准的有线接口、无线接口。[0086]可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管OrganicLight-EmittingDiode,0LED触摸器等。其中,显示器也可以称为显示屏或显示单元,用于显示在应用服务器2中处理的信息以及用于显示可视化的用户界面。[0087]在图3所示的应用服务器2的实施例中,作为一种计算机存储介质的存储器11中存储秒杀请求处理程序10的程序代码,处理器12执行秒杀请求处理程序10的程序代码时,实现如下步骤:[0088]A1、根据预设规则将秒杀商品的库存均匀分布至缓存服务器集群3中的多台缓存服务器31,并分别确定所述每台缓存服务器31对应的虚拟库存;[0089]预先确定一个缓存服务器集群3,其中,该缓存服务器集群3中包含m台缓存服务器31,并且,将缓存服务器集群3作为一级缓存。[0090]在进行秒杀活动之前,会预先确定秒杀活动中的秒杀商品及商品编号、库存、活动的场次等信息,上述信息保存在数据库(图中未标识)中。假设秒杀活动中包含1种商品,从数据库中读取该商品的实际库存为1〇〇〇〇,按照用户编号后两位00—99,将商品库存划分为100份,每份包含100个库存,根据hash算法,将这1〇〇份库存均勾分布至缓存服务器集群3中的m台缓存服务器31上。[0091]需要说明的是,分布至缓存服务器集群3中的每一台缓存服务器31上的库存为实际库存,但实际上保存在每一台缓存服务器31上的库存为虚拟库存。一般请情况下,虚拟库存略大于实际库存,可根据运营商需求进行设置。然后,分别确定所述每台缓存服务器31对应的虚拟库存,并将虚拟库存信息保存至一级库存中。[0092]假设秒杀活动中的商品i的库存为10000,那么,商品i在每台缓存服务器31中的键1^5〇分别定义为:;^611131:〇〇1^:1':;[:00〜;^611131:001^::1::;[:99,其中,:^011131:001;为资源目1|缀库存),r为秒杀活动的场次编号,i为秒杀活动的商品编号,“00”-“99”为用户编号后两位,每个键对应的存储的值value为100。也就是说,秒杀活动中不同场次和或不同商品,其对应的键都会不一样。[0093]可以理解的是,缓存服务器集群3中缓存服务器31的数量决定了这个缓存服务器集群3的消化能力,如果单台缓存服务器31的吞吐量为2万TPS,那么m台缓存服务器的吞吐量即为2m万TPS,因此,在本实施例中,m的取值需通过预估秒杀活动中的并发量来确定。[0094]A2、接收网关服务器4通过均衡负载分配的秒杀请求,其中,网关服务器4到达预设时刻时,接收用户通过客户端5提交的多条秒杀请求;[0095]其中,所述预设时刻为秒杀活动开始的时刻。秒杀活动开始时,网关服务器4接收用户通过客户端5提交的秒杀请求,秒杀请求中包含:用户编号、商品信息、优惠信息等。可以理解的是,秒杀开始的时刻,会同时接收到大量秒杀请求,例如,10000条秒杀请求,需将这10000条秒杀请求分配至应用服务器集群1中的每台应用服务器2进行处理。[0096]在本实施例中,网关服务器4根据DNS轮询机制,将10000条秒杀请求分别分配至每一台应用服务器2。其中,网关服务器4网关服务器4应用的是F5物理机。假设四台应用服务器2组成应用服务器集群1,IP地址分别为172.28.20.1、172.28.20.2、172.28.20.3、172.28.20.4,当用户请求访问时,网关服务器4将循环调度IP地址的次序,将按172.28.20_1、172.28.20.2、172_28_20.3和172.28.20.4的顺序应答第一个用户的秒杀请求,下一个用户的秒杀请求将用旋转后的172.28.20.2、172.28.20.3、172.28.20.4和I72•20•2〇•1这样的顺序应答,旋转过程将持续下去,成功实现DNS负载均衡。[0097]应用服务器2接收网关服务器4分配的秒杀请求之后,根据秒杀请求中携带的用户编号信息,将秒杀请求载入与用户编号信息对应的缓存服务器中。例如,秒杀请求中携带的用户编号信息中的后两位为“52”,确定缓存服务器集群3中库存的键信息中用户编号后两位为“52”的缓存服务器31,将该秒杀请求载入该缓存服务器31中,供后续获取该缓存服务器31上的虚拟库存信息。[0098]上述步骤将秒杀请求通过负载均衡分布至应用服务器集群〖中的每台应用服务器2上,并利用缓存服务器集群3,将并发的数秒杀请求有效地引导在缓存服务器集群3中的不同缓存服务器31上,避免单独的服务器并发能力有限的问题,实现分散秒杀请求的效果,提升系统的响应能力。[00"]A3、读取每条秒杀请求的具体信息,根据预设的验证规则,对所述每条秒杀请求进行资格验证;[0100]可以理解的是,为了减少应用服务器集群1性能的消耗,当商品的实际库存为“〇,,时,接收到用户发送的秒杀请求,直接返回已卖完的信息。具体地,该步骤包括:[0101]判断预设二级缓存中是否存在预设库存标识;[0102]当所述二级缓存中存在所述预设库存标识时,生成第一预警信息;[0103]当所述二级缓存中不存在所述预设库存标识时,判断所述一级缓存中是否存在所述预设库存标识;[0104]当所述一级缓存中存在所述预设库存标识时,生成第一预警信息,并将该预设库存标识保存至所述二级缓存中;[0105]当所述一级缓存中不存在所述预设库存标识时,将所述多个秒杀请求通过负载均衡分摊到所述应用服务器集群1中的多台应用服务器2。[0106]其中,预设二级缓存为应用服务器集群1中每台应用服务器2的内存,预设库存标识为“无库存”“库存为0”。依次按照二级缓存、一级缓存的顺序读取“无库存”“库存为〇”的库存标识,当二级缓存一级缓存中存在“无库存”“库存为0”的库存标识时,说明商品已经卖完了,生成第一预警信息并反馈至该秒杀请求对应的客户端5,例如,“您抢购的商品已卖完”。[0107]需要说明的是,当二级缓存中不存在“无库存”“库存为0”的库存标识、且一级缓存中存在“无库存”“库存为0”的库存标识时,生成第一预警信息的同时,还将该库存标识放置至二级缓存中,便于下次接收秒杀请求时直接从二级缓存中读取“无库存”“库存为0”的库存标识,释放无效请求,减缓系统压力,同时,有效避免了商品超卖现象。[0108]需要说明的是,二级缓存中保存的数据的时效比一级缓存中保存的数据的时效短。但应用服务器2从二级缓存读取数据的速度远大于从一级缓存中读取的速度。因此,将一级缓存中存储的“无库存”“库存为〇”的库存标识保存在二级缓存中,可提高后续读取“无库存”“库存为0”的库存标识的速度,更快地释放无效请求,提高系统的稳定性。[0109]当一级缓存、二级缓存中均不存在“无库存”“库存为0”的库存标识,表示商品还没有被抢完,初步说明接收到的秒杀请求有效,还需要通过用户资格验证过滤掉部分无效请求,仅对有效请求进行处理。[0110]需要说明的是,在运营激活秒杀活动时,从预设的验证码库中读取预设数量(例如,10000条)的验证数据保存至二级缓存中,应用服务器集群1中的不同应用服务器2对应的二级缓存中的验证数据不一定相同。每一条验证数据包括验证问题及预设答案。[0111]以应用服务器集群1中的应用服务器A为例,接收到网关服务器4分配的秒杀请求后,当商品还没被抢完时,应用服务器A从二级缓存中随机调取一条验证数据,将该验证数据的验证问题发送至与该秒杀请求对应的客户端5,同时,根据该秒杀请求中的资源前缀、商品编号、场次编号、用户编号生成键,根据键的参数将该条验证数据的预设答案保存至一级缓存中。[0112]接收到用户通过客户端5输入的答案数据后,根据键的参数从一级缓存中获取预设答案,并与答案数据进行对比:当答数据案与预设答案不一致时,生成第二预警信息并反馈至该秒杀请求对应的客户端5,例如“验证码错误”。然后,重新读取一条验证数据并执行验证码校验步骤。[0113]该步骤的目的在于,通过引入验证码库中的验证数据,在不增加人为识别的识别率的基础上,进一步的增加机器识别的难度,有效的阻挡机器请求对系统的压力。[0114]在通过验证码校验之后,获取上述根据秒杀请求中的资源前缀、商品编号、场次编号、用户编号生成的键作为用户资格信息,对用户资格信息进行判定。具体地,从一级缓存中查询该用户资格信息,如果一级缓存中不存在该用户资格信息,则认为当前用户没有参加过该商品、该场次的秒杀活动,也就是说当前用户具备参与参与资格,同时,将本次请求判定的该用户资格信息保存至一级缓存中。当所述一级缓存中存在该用户资格信息时,说明当前用户参加过该商品、该场次的秒杀活动,生成第三预警信息并反馈至该秒杀请求对应的客户端5,例如“不能次重复秒杀该商品,不具备秒杀资格”。[0115]可以理解的是,为了防止单个用户超额抢购秒杀商品,为保存在一级缓存中的用户资格信息设置预设时间间隔(该预设时间间隔与用户支付的有效时间一致,例如,15分钟)的有效时间,有效时间远大于秒杀活动中商品被抢购完的时间,那么,用户想再抢购秒杀商品时,无法通过用户资格验证。另外,如果用户资格验证通过且后续验证均通过后,用户选择不支付或者在预设时间间隔内未支付,那么订单系统会在预设时间间隔之后关单,同时从一级缓存中释放掉该用户资格信息对应的参与记录。也就是说,用户在15分钟之后依然可以再次参加这个商品的秒杀,前提是这个商品还有库存。[0116]上述步骤通过对用户资格进行验证,进一步过滤掉了无效请求,解决了单用户刷单的问题,减缓了系统压力。[0117]A4、当所述秒杀请求的资格验证通过时,对与该秒杀请求对应的缓存服务器的虚拟库存进行扣减,并根据用户资格信息生成与该秒杀请求对应的预设令牌信息,将该预设令牌信息保存至预设一级缓存中;[0118]当该秒杀请求对应的用户具备秒杀资格时,根据用户编号的后两位获取该秒杀请求对应的缓存服务器31上的虚拟库存,对虚拟库存进行一次扣减操作。然后,根据上述用户资格信息,生成与该用户资格信息对应的预设令牌信息,例如,根据该秒杀请求中包含的秒杀活动编号a,秒杀活动的场次编号r,秒杀活动的商品编号i,用户编号u,生成的令牌即token为:a:r:i:u,然后将该预设令牌信息保存至一级缓存中。[0119]可以理解的是,与用户资格相似的是,如果用户最终选择不支付或者在预设时间间隔内未支付,那么订单系统会在预设时间间隔之后关单,同时,也需要从一级缓存中释放掉该秒杀请求对应的预设令牌信息。因此,也需要给预设令牌时间设置一个预设时间间隔的有效时间,例如,15分钟。[0120]需要说明的是,当虚拟库存不为零时,才会发放令牌,实现放行获得去参与扣减真实库存的资格控制。当虚拟库存为零时,对虚拟库存进行一次扣减操作后即为负数,由于虚拟库存大于真实库存,当虚库库存不够时,说明商品的真实库存也不够,令牌发放失败,生成第一预警信息并反馈至该秒杀请求对应的客户端5,例如,“当前商品已卖完”。[0121]进一步地,为了减少后续的秒杀请求对系统性能的消耗,生成并保存预设库存标识(“无库存”“库存为0”)至所述一级缓存中。[0122]A5、接收用户针对通过资格验证的秒杀请求提交的交易请求,根据所述交易请求生成实时令牌信息,对所述实时令牌信息进行校验,当所述实时令牌信息校验通过时,对数据库中的真实库存进行扣减,秒杀成功。[0123]用户通过资格验证之后的预设时间内,可进行后续的付款操作。接收用户基于秒杀请求提交的交易请求,交易请求中包含:秒杀活动编号a,秒杀活动的场次编号r,秒杀活动的商品编号i,用户编号u等信息,根据交易请求中包含的信息及预设的令牌生成规则,生成该交易请求的实时令牌信息。[0124]具体地,从所述一级缓存中获取该秒杀请求对应的预设令牌信息,一级缓存中不存在所述预设令牌信息时,说明该预设令牌信息已被释放,即超出了付款的有效时限。当实施令牌信息与预设令牌信息一致时,说明当前交易请求对应地秒杀请求通过了上述用户资格验证,为有效请求。[0125]该步骤的目的在于,链路下游请求的时候根据请求中包含的参数拼装出组合一致的键来获取用户下单的时候需要的令牌,以来防止绕过系统验证,直接请求到核心链路。[0126]令牌校验成功后,需对商品的真实库存进行扣减,当数据库中商品的真实库存不为零时,真实库存扣减成功则秒杀成功,交易才会成功,至此,交易完成,当真实库存因某种原因扣减失败时,预设令牌信息会失效,在预设时间间隔例如,15分钟后,用户将重新具备秒杀资格。[0127]需要说明的是,当商品的真实库存为零时,对真实库存进行一次扣减操作后即为负数,说明商品的真实库存不够,无法进行交易,生成第一预警信息并反馈至该交易请求对应的客户端5,例如,“当前商品已卖完”。[0128]进一步地,为了减少后续的秒杀请求对系统性能的消耗,生成并保存预设库存标识(“无库存”“库存为〇”)至所述一级缓存中。[0129]在该步骤中,通过在用户下单支付时校验令牌,过滤掉无效令牌的请求,防止绕开链路请求。[0130]上述实施例提出的应用服务器集群1中的应用服务器2,通过对秒杀商品的库存进行库存散列,将散列后的库存保存至缓存服务器集群中的每一台缓存服务器上,利用网关服务器通过负载均衡将秒杀请求分配至应用服务器集群中的每台应用服务器,并将秒杀请求载入至相应的缓存服务器中,分散了秒杀请求,提升了系统的响应能力;通过对秒杀请求进行资格验证,过滤掉无效请求,减缓了系统核心服务的压力;构建一级缓存、二级缓存,月艮务器依次从一级缓存、一级缓存、数据库中获取相应彳目息,提尚了秒杀请求处理效率。[0131]可选地,在其他的实施例中,秒杀请求处理程序10还可以被分割为一个或者多个模块,一个或者多个模块被存储于存储器11中,并由一个或多个处理器本实施例为处理器12所执行,以完成本发明,本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段。例如,参照图4所示,为图3中秒杀请求处理程序10的模块示意图,该实施例中,秒杀请求处理程序10可以被分割为库存散列模块110、请求分配模块120、资格验证模块130、令牌发放模块140及令牌校验模块150,所述模块110-150所实现的功能或操作步骤均与上文类似,此处不再详述,示例性地,例如其中:[0132]库存散列模块110,用于根据预设规则将秒杀商品的库存均匀分布至缓存服务器集群中的多台缓存服务器,并分别确定每台缓存服务器对应的虚拟库存;[0133]请求分配模块120,用于接收网关服务器通过均衡负载分配的秒杀请求,其中,网关服务器到达预设时刻时,接收用户通过客户端提交的多条秒杀请求;[0134]资格验证模块130,用于读取每条秒杀请求的具体信息,根据预设的验证规则,对所述每条秒杀请求进行资格验证;[0135]令牌发放模块140,用于当所述秒杀请求的资格验证通过时,对与该秒杀请求对应的缓存服务器的虚拟库存进行扣减,并根据用户资格信息生成与该秒杀请求对应的预设令牌信息,将该预设令牌信息保存至预设一级缓存中;及[0136]令牌校验模块150,用于接收用户针对通过资格验证的秒杀请求提交的交易请求,根据所述交易请求生成实时令牌信息,对所述实时令牌信息进行校验,当所述实时令牌信息校验通过时,对数据库中的真实库存进行扣减,秒杀成功。H[0137]此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质中包括秒杀请求处理程序10,所述秒杀请求处理程序10被处理器执行时实现如下操作:[0138]A1、根据预设规则将秒杀商品的库存均匀分布至缓存服务器集群中的多台缓存服务器,并分别确定每台缓存服务器对应的虚拟库存;[0139]A2、接收网关服务器通过均衡负载分配的秒杀请求,其中,网关服务器到达预设时刻时,接收用户通过客户端提交的多条秒杀请求器;[0140]A3、读取每条秒杀请求的具体信息,根据预设的验证规则,对所述每条秒杀请求进行资格验证;[0141]A4、当所述秒杀请求的资格验证通过时,对与该秒杀请求对应的缓存服务器的虚拟库存进行扣减,并根据用户资格信息生成与该秒杀请求对应的预设令牌信息,将该预设令牌信息保存至预设一级缓存中;及[0142]A5、接收用户针对通过资格验证的秒杀请求提交的交易请求,根据所述交易请求生成实时令牌信息,对所述实时令牌信息进行校验,当所述实时令牌信息校验通过时,对数据库中的真实库存进行扣减,秒杀成功。[0143]本发明之计算机可读存储介质的具体实施方式与上述秒杀请求处理方法的具体实施方式大致相同,在此不再赘述。[0144]上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。[0145]需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。[0146]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质如ROMRAM、磁碟、光盘)中,包括若千指令用以使得一台终端设备可以是手机,计算机,服务器,或者网络设备等执行本发明各个实施例所述的方法。[0147]以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。

权利要求:1.一种秒杀请求处理方法,应用于应用服务器集群,其特征在于,该方法包括:51、根据预设规则将秒杀商品的库存均匀分布至缓存服务器集群中的多台缓存服务器,并分别确定每台缓存服务器对应的虚拟库存;52、接收网关服务器通过均衡负载分配的秒杀请求,其中,网关服务器到达预设时刻时,接收用户通过客户端提交的多条秒杀请求;53、读取每条秒杀请求的具体信息,根据预设的验证规则,对所述每条秒杀请求进行资格验证;54、当所述秒杀请求的资格验证通过时,对与该秒杀请求对应的缓存服务器的虚拟库存进行扣减,并根据用户资格信息生成与该秒杀请求对应的预设令牌信息,将该预设令牌信息保存至预设一级缓存中;及55、接收用户针对通过资格验证的秒杀请求提交的交易请求,根据所述交易请求生成实时令牌信息,对所述实时令牌信息进行校验,当所述实时令牌信息校验通过时,对数据库中的真实库存进行扣减,秒杀成功。2.如权利要求1所述的秒杀请求处理方法,其特征在于,该方法包括:当所述秒杀请求资格验证失败时,提示资格验证失败;及当所述实时令牌信息校验失败时,提示令牌校验失败。3.如权利要求2所述的秒杀请求处理方法,其特征在于,所述缓存服务器集群作为所述一级缓存,所述应用服务器集群中每台服务器的内存作为二级缓存,在步骤S3之前,该方法还包括:判断所述二级缓存中是否存在预设库存标识;当所述二级缓存中存在所述预设库存标识时,生成第一预警信息;当所述二级缓存中不存在所述预设库存标识时,判断所述一级缓存中是否存在所述预设库存标识;当所述一级缓存中存在所述预设库存标识时,生成第一预警信息,并将该预设库存标识保存至所述二级缓存中;或者当所述一级缓存中不存在所述预设库存标识时,将所述多条秒杀请求通过负载均衡分摊到所述服务器集群中的多台服务器。4.如权利要求1至3中任意一项所述的秒杀请求处理方法,其特征在于,所述步骤S4还包括:当所述虚拟库存为零时,生成第一预警信息,生成并保存预设库存标识至所述一级缓存中。5.如权利要求4所述的秒杀请求处理方法,其特征在于,所述步骤S5还包括:当所述真实库存为零时,生成第一预警信息,生成并保存预设库存标识至所述一级缓存中。6.如权利要求5所述的秒杀请求处理方法,其特征在于,所述“根据预设的验证规则,对所述每条秒杀请求进行资格验证”的步骤包括:、从预设二级缓存中随机读取一条验证数据,包括验证问题及预设答案,将所述验证问题发送至所述秒杀请求对应的客户端,并接收用户输入的答案数据,将所述答案数据与所述预设答案进行比对;当所述答案数据与所述预设答案不一致时,生成第二预警信息,返回执行上一步骤;或者当所述答案数据与所述预设答案一致时,根据所述秒杀请求生成用户资格信息,并从所述一级缓存中查询该用户资格信息,当所述一级缓存中不存在该用户资格信息时,用户资格校验成功,将所述用户资格信息保存至一级缓存中,或者,当所述一级缓存中存在该用户资格信息时,生成第三预警信息。7.如权利要求6所述的秒杀请求处理方法,其特征在于,所述“对所述实时令牌信息进行校验”的步骤包括:从所述一级缓存中获取该秒杀请求对应的预设令牌信息,当所述一级缓存中不存在所述预设令牌信息时,判定所述实施令牌信息无效;当所述一级缓存中存在所述预设令牌信息时,判断所述实时令牌信息是否与所述预设令牌信息一致;若不一致,判定所述实时令牌信息无效,提示令牌校验失败;或者若一致,判定所述实时令牌信息有效,提示令牌校验成功。8.—种应用服务器集群,其特征在于,该应用服务器集群包括多台应用服务器,所述服务器包括:存储器、处理器,所述存储器上存储有可在所述处理器上运行的秒杀请求处理程序,所述秒杀请求处理程序被所述处理器执行时,可实现如下步骤:A1、根据预设规则将秒杀商品的库存均匀分布至缓存服务器集群中的多台缓存服务器,并分别确定每台缓存服务器对应的虚拟库存;A2、接收网关服务器通过均衡负载分配的秒杀请求,其中,网关服务器到达预设时刻时,接收用户通过客户端提交的多条秒杀请求;A3、读取每条秒杀请求的具体信息,根据预设的验证规则,对所述每条秒杀请求进行资格验证;A4、当所述秒杀请求的资格验证通过时,对与该秒杀请求对应的缓存服务器的虚拟库存进行扣减,并根据用户资格信息生成与该秒杀请求对应的预设令牌信息,将该预设令牌信息保存至预设一级缓存中;及A5、接收用户针对通过资格验证的秒杀请求提交的交易请求,根据所述交易请求生成实时令牌信息,对所述实时令牌信息进行校验,当所述实时令牌信息校验通过时,对数据库中的真实库存进行扣减,秒杀成功。9.根据权利要求8所述的应用服务器集群,其特征在于,所述秒杀请求处理程序被所述处理器执行时,还可实现以下步骤:当所述秒杀请求资格验证失败时,提示资格验证失败;及当所述实时令牌信息校验失败时,提示令牌校验失败。10.—种计算机可读存储介质,其特征在于,所述计算机可读存储介质中包括秒杀请求处理程序,所述秒杀请求处理程序被处理器执行时,可实现如权利要求丨至7中任意一项所述的秒杀请求处理方法的步骤。

百度查询: 康键信息技术(深圳)有限公司 秒杀请求处理方法、应用服务器集群及存储介质

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。