本發(fā)明涉及一種基于NGINX訪問(wèn)頻率限制的方法以及系統(tǒng)。
背景技術(shù):
目前很多免費(fèi)或者收費(fèi)的服務(wù)都有訪問(wèn)頻率的限制,比如三大運(yùn)營(yíng)商的流量控制、地圖服務(wù)的訪問(wèn)次數(shù)限制等。這些都需要控制用戶訪問(wèn)的次數(shù)或者流量,所以如果能有一套訪問(wèn)頻率限制的方法,并且能支持高并發(fā)(不停的計(jì)算),能大大緩解服務(wù)的壓力。
其中,訪問(wèn)頻率控制,其實(shí)就有點(diǎn)類似數(shù)學(xué)的加減法;比如我們控制該服務(wù)該用戶只能訪問(wèn)頻率為同時(shí)100次,則每次的請(qǐng)求進(jìn)入加1,返回結(jié)果后減1。如果由后臺(tái)服務(wù)運(yùn)算的話,如果出現(xiàn)錯(cuò)誤需要回退之前的狀態(tài),會(huì)出現(xiàn)漏洞或者無(wú)法精準(zhǔn)控制,而且請(qǐng)求量多的時(shí)候,如此頻繁的計(jì)算導(dǎo)致的后果就是服務(wù)壓力增大,嚴(yán)重出現(xiàn)宕機(jī)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問(wèn)題,在于提供一種基于NGINX訪問(wèn)頻率限制的方法以及系統(tǒng),便于降低服務(wù)器壓力。
本發(fā)明之一是這樣實(shí)現(xiàn)的:一種基于NGINX訪問(wèn)頻率限制的方法,包括如下步驟:
步驟1、用戶發(fā)送訪問(wèn)請(qǐng)求;
步驟2、前端服務(wù)器接收用戶請(qǐng)求,并連接至數(shù)據(jù)庫(kù);
步驟3、從數(shù)據(jù)庫(kù)中得到該類請(qǐng)求當(dāng)前連接數(shù)s;若s小于閾值M,則將s加1或流量值,并將該訪問(wèn)請(qǐng)求發(fā)送至后端處理服務(wù)器;否,則將該訪問(wèn)請(qǐng)求進(jìn)行攔截。
進(jìn)一步地,所述步驟2進(jìn)一步具體為:nginx前端服務(wù)器接收用戶請(qǐng)求,并通過(guò)nginx的lua腳本連接至數(shù)據(jù)庫(kù)。
本發(fā)明之二是這樣實(shí)現(xiàn)的:一種基于NGINX訪問(wèn)頻率限制的系統(tǒng),包括如下模塊:
請(qǐng)求模塊,用于用戶發(fā)送訪問(wèn)請(qǐng)求;
接收模塊,用于前端服務(wù)器接收用戶請(qǐng)求,并連接至數(shù)據(jù)庫(kù);
限制模塊,用于從數(shù)據(jù)庫(kù)中得到該類請(qǐng)求當(dāng)前連接數(shù)s;若s小于閾值M,則將s加1或流量值,并將該訪問(wèn)請(qǐng)求發(fā)送至后端處理服務(wù)器;否,則將該訪問(wèn)請(qǐng)求進(jìn)行攔截。
進(jìn)一步地,所述接收模塊進(jìn)一步具體為:nginx前端服務(wù)器接收用戶請(qǐng)求,并通過(guò)nginx的lua腳本連接至數(shù)據(jù)庫(kù)。
本發(fā)明具有如下優(yōu)點(diǎn):本發(fā)明一種基于NGINX訪問(wèn)頻率限制的方法以及系統(tǒng),交由nginx控制訪問(wèn)頻率,減少后臺(tái)服務(wù)頻率計(jì)算。nginx支持高并發(fā),當(dāng)大量請(qǐng)求進(jìn)來(lái)時(shí),nginx能正常接收并高效的進(jìn)行計(jì)算,大大減少后臺(tái)服務(wù)壓力。
附圖說(shuō)明
下面參照附圖結(jié)合實(shí)施例對(duì)本發(fā)明作進(jìn)一步的說(shuō)明。
圖1為本發(fā)明方法執(zhí)行流程圖。
具體實(shí)施方式
如圖1所示,本發(fā)明基于NGINX訪問(wèn)頻率限制的方法,包括如下步驟:
步驟1、用戶發(fā)送訪問(wèn)請(qǐng)求;
步驟2、nginx前端服務(wù)器接收用戶請(qǐng)求,并通過(guò)nginx的lua腳本連接至數(shù)據(jù)庫(kù);
步驟3、從數(shù)據(jù)庫(kù)中得到該類請(qǐng)求當(dāng)前連接數(shù)s;若s小于閾值M,則將s加1或流量值,并將該訪問(wèn)請(qǐng)求發(fā)送至后端處理服務(wù)器;否,則將該訪問(wèn)請(qǐng)求進(jìn)行攔截。
本發(fā)明基于NGINX訪問(wèn)頻率限制的系統(tǒng),包括如下模塊:
請(qǐng)求模塊,用于用戶發(fā)送訪問(wèn)請(qǐng)求;
接收模塊,nginx前端服務(wù)器接收用戶請(qǐng)求,并通過(guò)nginx的lua腳本連接至數(shù)據(jù)庫(kù);
限制模塊,用于從數(shù)據(jù)庫(kù)中得到該類請(qǐng)求當(dāng)前連接數(shù)s;若s小于閾值M,則將s加1或流量值,并將該訪問(wèn)請(qǐng)求發(fā)送至后端處理服務(wù)器;否,則將該訪問(wèn)請(qǐng)求進(jìn)行攔截。
如圖1所示,本發(fā)明一種具體實(shí)施方式:
1、用戶發(fā)送請(qǐng)求request;
2、nginx接收到用戶請(qǐng)求;
3、nginx的lua腳本連接數(shù)據(jù)庫(kù),將該類請(qǐng)求當(dāng)前連接數(shù)s,并將數(shù)量加1或加上流量;(如果lua不支持的數(shù)據(jù)庫(kù),可將數(shù)據(jù)存入支持的數(shù)據(jù)庫(kù)中)
4、根據(jù)數(shù)據(jù)庫(kù)獲取該類請(qǐng)求或流量上限M;
5、判斷當(dāng)前連接數(shù)s是否大于上限數(shù)M;
6、如果s>=M,超過(guò)訪問(wèn)限制數(shù)進(jìn)行攔截;
7、如果s<M,繼續(xù)執(zhí)行下一步驟;
8、nginx通過(guò)反向代理將該請(qǐng)求發(fā)送給后端處理服務(wù)器;
9、后臺(tái)服務(wù)器處理并返回結(jié)果給用戶;
10、數(shù)據(jù)庫(kù)將該類請(qǐng)求數(shù)s減1或者減去流量值(該步驟是針對(duì)并發(fā)量的控制,如果只能限制簡(jiǎn)單的次數(shù)可以略過(guò)該步驟)。
雖然以上描述了本發(fā)明的具體實(shí)施方式,但是熟悉本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,我們所描述的具體的實(shí)施例只是說(shuō)明性的,而不是用于對(duì)本發(fā)明的范圍的限定,熟悉本領(lǐng)域的技術(shù)人員在依照本發(fā)明的精神所作的等效的修飾以及變化,都應(yīng)當(dāng)涵蓋在本發(fā)明的權(quán)利要求所保護(hù)的范圍內(nèi)。