摘要:背景抽奖接口为了防止高并发拖累系统通过来限流如最多同时允许个用户进来抽奖超过个则默认返回未中奖实现代码进来一个一个请求就加限流一个请求完成就减一中配置
背景
实现抽奖接口为了防止高并发拖累系统 通过nginx来限流 如最多同时允许100个用户进来抽奖 超过100个则默认返回未中奖
lua 代码
# init_r.lua local shared_data = ngx.shared.dict shared_data:set("draw", 0) # draw_r.lua local request_uri = ngx.var.request_uri; if string.sub(request_uri,1,22) == "/activity/lottery/draw" then local val, err = ngx.shared.dict:incr("draw", 1); #进来一个一个请求就加1 if val > 100 then #限流100 ngx.say("{"success" : true,"data" : {"awardType" : "00" }}") ngx.log(ngx.ERR,"draw limit val is:"..val) return ngx.exit(200) end return end # draw_decr.lua local request_uri = ngx.var.request_uri; if string.sub(request_uri,1,22) == "/activity/lottery/draw" then local newval, err = ngx.shared.dict:incr("draw", -1); #一个请求完成就减一 if newval < 0 then ngx.shared.dict:set("draw", 0); end return end
nginx中配置
init_by_lua_file /etc/nginx/init_r.lua; location / { default_type application/json; rewrite_by_lua_file /etc/nginx/draw_r.lua; log_by_lua_file /etc/nginx/draw_decr.lua; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/39391.html
摘要:限流算法最简单粗暴的限流算法就是计数器法了,而比较常用的有漏桶算法和令牌桶算法计数器计数器法是限流算法里最简单也是最容易实现的一种算法。 运营研发团队 李乐 高并发系统有三把利器:缓存、降级和限流; 限流的目的是通过对并发访问/请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务(定向到错误页)、排队等待(秒杀)、降级(返回兜底数据或默认数据); 高并发系统常见的限流有:限制总并发...
摘要:令牌桶算法对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。使用以及源码解析开源工具包提供了限流工具类,该类基于令牌桶算法实现流量限制,使用十分方便,而且十分高效。 前言 在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时...
摘要:涉及变量接口时间单位允许访问多少次递增间隔时间递增步长当前可访问次数的访问时间当前时间参照漏桶算法需要注意的点条件一线程一存在不能访问添加,设置为线程二过去时间所有的条件二参考计算器算法条件二实现。算法升级参考漏桶算法升级实现。 最近写了一个限流的插件,所以避免不了的接触到了一些限流算法。本篇文章就来分析一下这几种常见的限流算法 分析之前 依我个人的理解来说限流的话应该灵活到可以针对...
阅读 2579·2021-10-25 09:45
阅读 1242·2021-10-14 09:43
阅读 2299·2021-09-22 15:23
阅读 1522·2021-09-22 14:58
阅读 1935·2019-08-30 15:54
阅读 3540·2019-08-30 13:00
阅读 1357·2019-08-29 18:44
阅读 1573·2019-08-29 16:59