资讯专栏INFORMATION COLUMN

Nginx一种限流方案

mayaohua / 2551人阅读

摘要:背景抽奖接口为了防止高并发拖累系统通过来限流如最多同时允许个用户进来抽奖超过个则默认返回未中奖实现代码进来一个一个请求就加限流一个请求完成就减一中配置

背景

抽奖接口为了防止高并发拖累系统 通过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

相关文章

  • 几种限流技术

    摘要:下面是几种常见的限流技术一限流算法常用的限流算法有令牌桶,漏桶令牌桶令牌桶算法是网络流量整形和速率限制中最常使用的一种算法。 就秒杀接口来说,当访问频率或者并发请求超过其承受范围的时候,这时候我们就要考虑限流来保证接口的可用性,以防止非预期的请求对系统压力过大而引起的系统瘫痪。通常的策略就是拒绝多余的访问,或者让多余的访问排队等待服务。下面是几种常见的限流技术 一、限流算法常用的限流算...

    Warren 评论0 收藏0
  • Nginx源码研究】nginx限流模块详解

    摘要:限流算法最简单粗暴的限流算法就是计数器法了,而比较常用的有漏桶算法和令牌桶算法计数器计数器法是限流算法里最简单也是最容易实现的一种算法。 运营研发团队 李乐 高并发系统有三把利器:缓存、降级和限流; 限流的目的是通过对并发访问/请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务(定向到错误页)、排队等待(秒杀)、降级(返回兜底数据或默认数据); 高并发系统常见的限流有:限制总并发...

    voyagelab 评论0 收藏0
  • 使用Guava RateLimiter限流以及源码解析

    摘要:令牌桶算法对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。使用以及源码解析开源工具包提供了限流工具类,该类基于令牌桶算法实现流量限制,使用十分方便,而且十分高效。 前言 在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时...

    simpleapples 评论0 收藏0
  • 大型网站限流算法的实现和改造

    摘要:涉及变量接口时间单位允许访问多少次递增间隔时间递增步长当前可访问次数的访问时间当前时间参照漏桶算法需要注意的点条件一线程一存在不能访问添加,设置为线程二过去时间所有的条件二参考计算器算法条件二实现。算法升级参考漏桶算法升级实现。 最近写了一个限流的插件,所以避免不了的接触到了一些限流算法。本篇文章就来分析一下这几种常见的限流算法 分析之前 依我个人的理解来说限流的话应该灵活到可以针对...

    DC_er 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<