摘要:背景抽獎(jiǎng)接口為了防止高并發(fā)拖累系統(tǒng)通過(guò)來(lái)限流如最多同時(shí)允許個(gè)用戶進(jìn)來(lái)抽獎(jiǎng)超過(guò)個(gè)則默認(rèn)返回未中獎(jiǎng)實(shí)現(xiàn)代碼進(jìn)來(lái)一個(gè)一個(gè)請(qǐng)求就加限流一個(gè)請(qǐng)求完成就減一中配置
背景
實(shí)現(xiàn)抽獎(jiǎng)接口為了防止高并發(fā)拖累系統(tǒng) 通過(guò)nginx來(lái)限流 如最多同時(shí)允許100個(gè)用戶進(jìn)來(lái)抽獎(jiǎng) 超過(guò)100個(gè)則默認(rèn)返回未中獎(jiǎng)
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); #進(jìn)來(lái)一個(gè)一個(gè)請(qǐng)求就加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); #一個(gè)請(qǐng)求完成就減一 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; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/39391.html
摘要:下面是幾種常見(jiàn)的限流技術(shù)一限流算法常用的限流算法有令牌桶,漏桶令牌桶令牌桶算法是網(wǎng)絡(luò)流量整形和速率限制中最常使用的一種算法。 就秒殺接口來(lái)說(shuō),當(dāng)訪問(wèn)頻率或者并發(fā)請(qǐng)求超過(guò)其承受范圍的時(shí)候,這時(shí)候我們就要考慮限流來(lái)保證接口的可用性,以防止非預(yù)期的請(qǐng)求對(duì)系統(tǒng)壓力過(guò)大而引起的系統(tǒng)癱瘓。通常的策略就是拒絕多余的訪問(wèn),或者讓多余的訪問(wèn)排隊(duì)等待服務(wù)。下面是幾種常見(jiàn)的限流技術(shù) 一、限流算法常用的限流算...
摘要:限流算法最簡(jiǎn)單粗暴的限流算法就是計(jì)數(shù)器法了,而比較常用的有漏桶算法和令牌桶算法計(jì)數(shù)器計(jì)數(shù)器法是限流算法里最簡(jiǎn)單也是最容易實(shí)現(xiàn)的一種算法。 運(yùn)營(yíng)研發(fā)團(tuán)隊(duì) 李樂(lè) 高并發(fā)系統(tǒng)有三把利器:緩存、降級(jí)和限流; 限流的目的是通過(guò)對(duì)并發(fā)訪問(wèn)/請(qǐng)求進(jìn)行限速來(lái)保護(hù)系統(tǒng),一旦達(dá)到限制速率則可以拒絕服務(wù)(定向到錯(cuò)誤頁(yè))、排隊(duì)等待(秒殺)、降級(jí)(返回兜底數(shù)據(jù)或默認(rèn)數(shù)據(jù)); 高并發(fā)系統(tǒng)常見(jiàn)的限流有:限制總并發(fā)...
摘要:令牌桶算法對(duì)于很多應(yīng)用場(chǎng)景來(lái)說(shuō),除了要求能夠限制數(shù)據(jù)的平均傳輸速率外,還要求允許某種程度的突發(fā)傳輸。使用以及源碼解析開(kāi)源工具包提供了限流工具類,該類基于令牌桶算法實(shí)現(xiàn)流量限制,使用十分方便,而且十分高效。 前言 在開(kāi)發(fā)高并發(fā)系統(tǒng)時(shí)有三把利器用來(lái)保護(hù)系統(tǒng):緩存、降級(jí)和限流 緩存 緩存的目的是提升系統(tǒng)訪問(wèn)速度和增大系統(tǒng)處理容量 降級(jí) 降級(jí)是當(dāng)服務(wù)出現(xiàn)問(wèn)題或者影響到核心流程時(shí),需要暫時(shí)...
摘要:涉及變量接口時(shí)間單位允許訪問(wèn)多少次遞增間隔時(shí)間遞增步長(zhǎng)當(dāng)前可訪問(wèn)次數(shù)的訪問(wèn)時(shí)間當(dāng)前時(shí)間參照漏桶算法需要注意的點(diǎn)條件一線程一存在不能訪問(wèn)添加,設(shè)置為線程二過(guò)去時(shí)間所有的條件二參考計(jì)算器算法條件二實(shí)現(xiàn)。算法升級(jí)參考漏桶算法升級(jí)實(shí)現(xiàn)。 最近寫(xiě)了一個(gè)限流的插件,所以避免不了的接觸到了一些限流算法。本篇文章就來(lái)分析一下這幾種常見(jiàn)的限流算法 分析之前 依我個(gè)人的理解來(lái)說(shuō)限流的話應(yīng)該靈活到可以針對(duì)...
閱讀 2589·2021-10-25 09:45
閱讀 1249·2021-10-14 09:43
閱讀 2307·2021-09-22 15:23
閱讀 1532·2021-09-22 14:58
閱讀 1942·2019-08-30 15:54
閱讀 3550·2019-08-30 13:00
閱讀 1364·2019-08-29 18:44
閱讀 1578·2019-08-29 16:59