CN112910947A - 一种基于lua的高并发限流秒杀技术 - Google Patents
一种基于lua的高并发限流秒杀技术 Download PDFInfo
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/565—Conversion or adaptation of application format or content
- H04L67/5651—Reducing the amount or size of exchanged application data
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/12—Applying verification of the received information
- H04L63/126—Applying 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
技术领域
本发明涉及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操作。
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)
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)
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 | 深圳市思迪信息技术股份有限公司 | 证券营销活动限流防刷方法及装置 |
-
2020
- 2020-12-31 CN CN202011624181.7A patent/CN112910947A/zh active Pending
Patent Citations (5)
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)
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 |