CN112910947A - 一种基于lua的高并发限流秒杀技术 - Google Patents

一种基于lua的高并发限流秒杀技术 Download PDF

Info

Publication number
CN112910947A
CN112910947A CN202011624181.7A CN202011624181A CN112910947A CN 112910947 A CN112910947 A CN 112910947A CN 202011624181 A CN202011624181 A CN 202011624181A CN 112910947 A CN112910947 A CN 112910947A
Authority
CN
China
Prior art keywords
request
nginx
user
flow
lua
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.)
Pending
Application number
CN202011624181.7A
Other languages
English (en)
Inventor
黄嘉诚
罗义斌
杨冰
李军
朱学坤
陈剑
于东方
袁源
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing Lianchuang Internet Technology Co ltd
Original Assignee
Nanjing Lianchuang Internet Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nanjing Lianchuang Internet Technology Co ltd filed Critical Nanjing Lianchuang Internet Technology Co ltd
Priority to CN202011624181.7A priority Critical patent/CN112910947A/zh
Publication of CN112910947A publication Critical patent/CN112910947A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/565Conversion or adaptation of application format or content
    • H04L67/5651Reducing the amount or size of exchanged application data
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/12Applying verification of the received information
    • H04L63/126Applying verification of the received information the source of the received data

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer And Data Communications (AREA)

Abstract

一种基于lua的高并发秒杀限流方法,步骤如下,1)服务端遇到事务量即每秒事务量TPS或每秒请求量QPS成大流量事件;当超过额定设计事务量的30%以上时;2)服务端采用nginx拦截请求,并从流量计数器模块获取流量数据;3)nginx获取黑名单列表,进行ip合法性校验;4)nginx判断该用户请求频率;请求频率过高则直接作限流提示;5)通过nginx路由,将用户请求转发至后台服务,做进一步业务处理。每次用户请求完成后,到达服务端,计数器模块会做增长,若校验失败,直接跳转限流提示前端页面,做友好提示,告知用户流量太大,请稍后再试;当用户请求完成,此时应该讲计数请做‑1处理。

Description

一种基于lua的高并发限流秒杀技术
技术领域
本发明涉及IT/计算机、大数据技术、软件中间件技术的应用。
背景技术:
Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua 在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替 XML,Ini等文件格式,并且更容易理解和维护。
Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。
在移动互联网发展的大背景下,企业互联网架构的转型升级,主要为了解决业务快速发展背景下,造成的大并发问题。往往企业在硬件服务器资源方面的投入,是有周期性规划的,无法实现在业务量增长的情况下,快速解决资源瓶颈的问题,因此,在一定资源下,如何利用现有条件,实现业务的连续性,是IT技术的核心。
当服务器遇到TPS(每秒事务量),QPS(每秒请求量)成大流量时,如果这个量造成了系统的压力,影响了系统的性能,那么这个量就可以称之为大流量了。
应对大流量的一些常见手段是缓存(就是让数据尽早进入缓存,离程序近一点,不要大量频繁的访问DB);或采用降级:如果不是核心链路,那么就把这个服务降级掉。 APP拿到数据后,做个性化排序展示,如果在大流量下,这个排序就可以降级。
高并发限流技术,是解决业务系统流量快速增长的一种切实可行的方法。目前主流的限流技术,需要满足流量在应用层面的拦截,降低服务层面的压力,从而实现服务器cpu、内存资源的最大化利用,降低系统硬件资源的崩溃风险。
Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。nginx的负载均衡策略可以划分为两大类:内置策略和扩展策略。内置策略包含加权轮询和ip hash,在默认情况下这两种策略会编译进nginx内核,只需在nginx 配置;Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大, 将来自用户的请求转发给不同的服务器。Nginx负载均衡策略负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。
发明内容
本发明目的是,提出一种基于lua的高并发秒杀限流方法;为了减少服务器资源的信息处理压力,本发明选择使用nginx作为高并发秒杀处理的容器载体,尤其是利用nginx支持 lua脚本语言,lua是一个简洁、轻量、可扩展的脚本语言,Nginx+Lua优势,充分的结合Nginx的并发处理优势和Lua的轻量、可扩展性、易部署性。Lua属于脚本语言,编译之后即可运行;Nginx具备优雅重启的功能;更新修改Lua脚本之后,重启Nginx即可完成更新发布。
本发明的技术方案是,一种基于lua的高并发秒杀限流方法,步骤如下,
1)服务端遇到TPS(每秒事务量),QPS(每秒请求量)成大流量事件(事务量或请求量之一,例如超过额定设计事务量的30%以上,更具体的是,针对客户端用户发起的抢购请求;
2)服务端采用nginx拦截请求,并从流量计数器模块获取流量数据;
3)nginx获取黑名单列表,进行ip合法性校验;
4)nginx判断该用户请求频率(1分钟内);请求频率过高则直接作限流提示;
5)通过nginx路由,将用户请求转发至后台服务,做进一步业务处理。
每次用户请求完成后,到达服务端,计数器模块会做增长,若校验失败,直接跳转限流提示前端页面,做友好提示,告知用户流量太大,请稍后再试。
当用户请求完成,此时应该讲计数请做-1处理。
有益效果:本发明基于lua的高并发秒杀限流方法;选择使用nginx作为高并发秒杀处理的容器载体,尤其是利用nginx支持lua脚本语言,Nginx+Lua优势,充分的结合Nginx的并发处理优势和Lua的轻量、可扩展性、易部署性。更新修改Lua脚本之后,重启Nginx 即可完成更新发布新的高并发秒杀限流方案。减少服务器资源的信息处理压力。
附图说明
图1为本发明整体处理流程图。
具体实现方式
本发明的软件部署:采用多个nginx部署分布式集群,利用轮询机制来防止出现单点故障。
本发明步骤执行时准备条件完成:1)nginx已完成部署,并已集成编写的lua脚本;2) nginx已打开访问日志模块,日志形成文本文件;3)频率限制模块已配置好初始值;4)ip黑名单已完成设置(数组方式);5)限流页面已完成在nginx的部署,并有独立的链接地址。
本发明的执行步骤:
1)用户端发起抢购请求(秒杀请求);
2)nginx拦截客户端用户http请求,从流量计数器模块获取流量数据;并开始在计数器进行流量访问量的增量计数;
3)nginx获取黑名单列表,进行ip合法性校验:截取请求头ip信息,与本地ip黑名单库进行对比,若属于黑名单ip,进行拦截操作,直接禁止http请求;
4)nginx判断该用户请求频率(1分钟内):从日志库筛选近1分钟,该ip访问次数,若流量频率超出次数限制,直接禁止http请求,并将该ip写入黑名单ip;
符合流量频率与非黑名单限制后,判断计数器,若请求数量已达到阈值,将请求引导至友好提示页面;请求数未达阈值,将用户请求转向真正的路由地址;通过nginx路由,将用户请求转发至后台服务端做进一步业务处理。
第4)的实施细节如下:
4-1)nginx拦截会话
通过lua的request模块,获取客户端头部信息,再从头部信息过滤出ip地址:
local headers=ngx.req.get_headers()
local ip=headers["X-REAL-IP"]or headers["X_FORWARDED_FOR"]orngx.var.remote_addr or“0.0.0.0”
取出ip信息后将进行下一步的操作,与黑名单ip列表库进行对比,若无黑名单信息,进入会话计数操作
同时记录用户请求地址,保存在上下文中,以便通过验证后的放行操作:
local request_uri=ngx.var.request_uri
4-2)会话计数
需通过redis将客户请求次数保存下来,数据通过以下元素组成:ip地址、访问时间戳 (毫秒级)
4-3)会话放行
根据第一步的操作,nginx会将用户的请求地址保存在内存中(通过上下文保存,无需中间件存储),如果未达到黑名单限制,则放行,将地址跳转至用户的原始请求地址:
return ngx.redirect(request_uri);
4-4)黑名单IP列表的存储
通过以下元素组成:nginx实例的ID、ip地址
每次用户请求完成后,到达服务端,计数器模块会做增长,若校验失败,直接跳转限流提示前端页面,做友好提示,告知用户流量太大,请稍后再试。
当用户请求完成,后台服务端返回结果后,将计数值做-1操作。
实施方式细节:
1)通过流量计数器来定义服务端遇到大流量事件:
流量计数器由以下字段组成:nginx实例ID、时间戳(毫秒级)、流量数。
其中流量数范围根据业务扩展需求自定义:如[0,20000],即,每秒最多承受2万个并发。计数器当前值保存在共享内存如redis中。
2)合法性校验:
用lua编写合法性校验脚本,用request模块获取请求头,获取访问者ip信息,ip黑名单数据存放在共享内存中,通过ip数据的对比,返回是否合法;
3)频率校验
用户(客户端)在一分钟之内的请求日志数据(包括访问时间、访问内容链接),均会被nginx保存下来,通过lua的文本访问模块,快速检索用户一分钟内的访问次数,返回是否符合正常频率。如不符合正常频率,给出限流提示前端页面,做友好提示,告知用户流量太大,请稍后再试。
4)路由转发
通过lua-request模块,直接请求(服务端)后台服务器地址,将数据返回给用户,当获取服务器数据返回时,同时操作计数器模块,做-1操作。

Claims (6)

1.一种基于lua的高并发秒杀限流方法,其特征是,步骤如下,
1)服务端遇到事务量即每秒事务量TPS或每秒请求量QPS成大流量事件;当超过额定设计事务量的30%以上时;
2)服务端采用nginx拦截请求,并从流量计数器模块获取流量数据;
3)nginx获取黑名单列表,进行ip合法性校验;
4)nginx判断该用户请求频率;请求频率过高则直接作限流提示;
5)通过nginx路由,将用户请求转发至后台服务,做进一步业务处理。
每次用户请求完成后,到达服务端,计数器模块会做增长,若校验失败,直接跳转限流提示前端页面,做友好提示,告知用户流量太大,请稍后再试;
当用户请求完成,此时应该讲计数请做-1处理。
2.根据权利要求1所述的基于lua的高并发秒杀限流方法,其特征是,采用多个nginx部署分布式集群,利用轮询机制来防止出现单点故障。
3.根据权利要求1所述的基于lua的高并发秒杀限流方法,其特征是,准备条件完成的条件下进行:1)nginx已完成部署,并已集成编写的lua脚本;2)nginx已打开访问日志模块,日志形成文本文件;3)频率限制模块已配置好初始值;4)ip黑名单已完成设置数组方式;5)限流页面已完成在nginx的部署,并有独立的链接地址。
4.根据权利要求1所述的基于lua的高并发秒杀限流方法,其特征是,流程的细节是,用户端发起抢购请求;nginx拦截客户端用户http请求,从流量计数器模块获取流量数据;并开始在计数器进行流量访问量的增量计数;nginx获取黑名单列表,进行ip合法性校验:截取请求头ip信息,与本地ip黑名单库进行对比,若属于黑名单ip,进行拦截操作,直接禁止http请求;nginx判断该用户请求频率:从日志库筛选近1分钟,该ip访问次数,若流量频率超出次数限制,直接禁止http请求,并将该ip写入黑名单ip;符合流量频率与非黑名单限制后,判断计数器,若请求数量已达到阈值,将请求引导至友好提示页面;请求数未达阈值,将用户请求转向真正的路由地址;通过nginx路由,将用户请求转发至后台服务端做进一步业务处理;每次用户请求完成后,到达服务端,计数器模块会做增长,若校验失败,直接跳转限流提示前端页面,做友好提示,告知用户流量太大,请稍后再试;当用户请求完成,后台服务端返回结果后,将计数值做-1操作。
5.根据权利要求1所述的基于lua的高并发秒杀限流方法,其特征是,通过流量计数器来定义服务端遇到大流量事件:流量计数器由以下字段组成:nginx实例ID、时间戳为毫秒级、流量数;其中流量数范围根据业务扩展需求自定义:[0,20000],即,每秒最多承受2万个并发;计数器当前值保存在共享内存redis中。
6.根据权利要求1所述的基于lua的高并发秒杀限流方法,其特征是,
合法性校验为,用lua编写合法性校验脚本,用request模块获取请求头,获取访问者ip信息,ip黑名单数据存放在共享内存中,通过ip数据的对比,返回是否合法;
频率校验为,用户在一分钟之内的请求日志数据、包括访问时间、访问内容链接,均会被nginx保存下来,通过lua的文本访问模块,快速检索用户一分钟内的访问次数,返回是否符合正常频率。如不符合正常频率,给出限流提示前端页面,做友好提示,告知用户流量太大,请稍后再试;
路由转发,通过lua-request模块,直接请求后台服务器地址,将数据返回给用户,当获取服务器数据返回时,同时操作计数器模块,做-1操作。
CN202011624181.7A 2020-12-31 2020-12-31 一种基于lua的高并发限流秒杀技术 Pending CN112910947A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011624181.7A CN112910947A (zh) 2020-12-31 2020-12-31 一种基于lua的高并发限流秒杀技术

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011624181.7A CN112910947A (zh) 2020-12-31 2020-12-31 一种基于lua的高并发限流秒杀技术

Publications (1)

Publication Number Publication Date
CN112910947A true CN112910947A (zh) 2021-06-04

Family

ID=76111957

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011624181.7A Pending CN112910947A (zh) 2020-12-31 2020-12-31 一种基于lua的高并发限流秒杀技术

Country Status (1)

Country Link
CN (1) CN112910947A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114567636A (zh) * 2022-01-20 2022-05-31 银盛通信有限公司 一种基于移动转售系统百万级并发续期的方法
CN114844693A (zh) * 2022-04-27 2022-08-02 深圳云创数安科技有限公司 轻量级的通信数据加密方法、装置、设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103379090A (zh) * 2012-04-12 2013-10-30 腾讯科技(北京)有限公司 一种开放平台访问的频率控制方法和系统、频率服务器
CN105160572A (zh) * 2015-09-30 2015-12-16 努比亚技术有限公司 控制订单生成的装置、方法及秒杀系统
CN106302390A (zh) * 2016-07-27 2017-01-04 福建富士通信息软件有限公司 一种基于nginx访问频率限制的方法以及系统
CN110276182A (zh) * 2019-06-10 2019-09-24 必成汇(成都)科技有限公司 Api分布式限流的实现方法
CN110415124A (zh) * 2019-07-31 2019-11-05 深圳市思迪信息技术股份有限公司 证券营销活动限流防刷方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103379090A (zh) * 2012-04-12 2013-10-30 腾讯科技(北京)有限公司 一种开放平台访问的频率控制方法和系统、频率服务器
CN105160572A (zh) * 2015-09-30 2015-12-16 努比亚技术有限公司 控制订单生成的装置、方法及秒杀系统
CN106302390A (zh) * 2016-07-27 2017-01-04 福建富士通信息软件有限公司 一种基于nginx访问频率限制的方法以及系统
CN110276182A (zh) * 2019-06-10 2019-09-24 必成汇(成都)科技有限公司 Api分布式限流的实现方法
CN110415124A (zh) * 2019-07-31 2019-11-05 深圳市思迪信息技术股份有限公司 证券营销活动限流防刷方法及装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114567636A (zh) * 2022-01-20 2022-05-31 银盛通信有限公司 一种基于移动转售系统百万级并发续期的方法
CN114844693A (zh) * 2022-04-27 2022-08-02 深圳云创数安科技有限公司 轻量级的通信数据加密方法、装置、设备及存储介质
CN114844693B (zh) * 2022-04-27 2024-03-26 深圳云创数安科技有限公司 轻量级的通信数据加密方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
US20220405342A1 (en) Progressive prefetching
KR102541295B1 (ko) 온-디맨드 네트워크 코드 실행 시스템에서의 운영 체제 커스터마이제이션
US11297159B2 (en) Extensible, asynchronous, centralized analysis and optimization of server responses to client requests
US9009222B2 (en) Verifying the transfer of a data file
US10594827B1 (en) Cache hinting systems
US7552189B2 (en) System and method for using virtual directories to service URL requests URL requests in application servers
US9383987B1 (en) Systems and methods for providing software updates
US8310943B2 (en) Method and system for transmission-based billing applications
US7436816B2 (en) Method and system for transmission-based billing of applications
EP3837604B1 (en) In situ triggered function as a service within a service mesh
CN106487708B (zh) 网络访问请求控制方法和装置
US20030172172A1 (en) Method and system of performing transactions using shared resources and different applications
US20110060812A1 (en) Cache server with extensible programming framework
US20040044731A1 (en) System and method for optimizing internet applications
US8826298B2 (en) Method and apparatus that enables a web-based client-server application to be used offline
US20030120752A1 (en) Dynamic web page caching system and method
US20090328026A1 (en) Update system, program execution device, and computer program
US20090254707A1 (en) Partial Content Caching
CN112910947A (zh) 一种基于lua的高并发限流秒杀技术
US20120227032A1 (en) Method, apparatus, and system for invoking widget
RU2316131C2 (ru) Способ хранения страниц в памяти мобильного устройства (варианты) и мобильное устройство для его осуществления
CN113595925A (zh) 一种智能网关动态限流实现方法
CN109117609A (zh) 一种请求拦截方法及装置
CN112350978A (zh) 一种业务处理方法、系统、设备及存储介质
CN111416836B (zh) 基于Nginx的服务器维护方法、装置、计算机设备及存储介质

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20210604

RJ01 Rejection of invention patent application after publication