本發(fā)明涉及網(wǎng)關(guān)限流,尤其涉及一種網(wǎng)關(guān)限流方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)。
背景技術(shù):
1、隨著互聯(lián)網(wǎng)微服務(wù)技術(shù)的不斷發(fā)展,api網(wǎng)關(guān)已經(jīng)成為訪問各個(gè)微服務(wù)的統(tǒng)一入口,管控著網(wǎng)絡(luò)請(qǐng)求流量。目前api網(wǎng)關(guān)在承接超高并發(fā)請(qǐng)求時(shí)普遍采用分布式限流策略,在網(wǎng)關(guān)上配置微服務(wù)app、接口、用戶等多個(gè)單一維度并簡(jiǎn)單組合的流量策略,策略卻未充分考慮當(dāng)前網(wǎng)關(guān)實(shí)例本身性能,然后api網(wǎng)關(guān)直接通過一定過濾邏輯啟動(dòng)流量限制策略,并根據(jù)處理結(jié)果決定是轉(zhuǎn)發(fā)路由請(qǐng)求或拒絕請(qǐng)求。
2、然而,現(xiàn)階段的限流方法中,限流規(guī)則的維度比較簡(jiǎn)單且限流策略也不夠智能,網(wǎng)關(guān)服務(wù)器集群的宿主機(jī)硬件或網(wǎng)絡(luò)資源可能會(huì)有所不同,在高并發(fā)情況下,請(qǐng)求可能尚未達(dá)到計(jì)數(shù)器閾值或消耗光令牌桶的令牌,但是某網(wǎng)關(guān)服務(wù)器可能已經(jīng)達(dá)到了資源性能的“瓶頸”,進(jìn)而導(dǎo)致短時(shí)間內(nèi)無法響應(yīng)所有進(jìn)入該服務(wù)器的請(qǐng)求。因此,亟需一種能夠?qū)崿F(xiàn)多個(gè)限流維度的組合且更智能的網(wǎng)關(guān)限流方法。
3、上述內(nèi)容僅用于輔助理解本發(fā)明的技術(shù)方案,并不代表承認(rèn)上述內(nèi)容是現(xiàn)有技術(shù)。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的主要目的在于提供了一種網(wǎng)關(guān)限流方法、裝置、設(shè)備及存儲(chǔ)介質(zhì),旨在解決現(xiàn)有技術(shù)的限流規(guī)則的維度簡(jiǎn)單且不夠智能的技術(shù)問題。
2、為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種網(wǎng)關(guān)限流方法,所述方法包括以下步驟:
3、確定當(dāng)前請(qǐng)求所訪問的目標(biāo)api,獲取預(yù)先配置的api流控規(guī)則,所述api流控規(guī)則中包括強(qiáng)限流規(guī)則和弱限流規(guī)則;
4、獲取所述目標(biāo)api在所述強(qiáng)限流規(guī)則中的第一遍歷結(jié)果,并將所述第一遍歷結(jié)果寫入結(jié)果集;
5、判斷所述結(jié)果集中是否存在禁止指令;
6、若否,則獲取所述目標(biāo)api在所述弱限流規(guī)則中的第二遍歷結(jié)果,并通過所述第二遍歷結(jié)果更新所述結(jié)果集;
7、根據(jù)更新后的所述結(jié)果集中是否存在所述禁止指令判斷是否對(duì)所述當(dāng)前請(qǐng)求進(jìn)行限流。
8、可選地,所述獲取所述目標(biāo)api在所述強(qiáng)限流規(guī)則中的第一遍歷結(jié)果的步驟包括:
9、根據(jù)所述強(qiáng)限流規(guī)則確定所述目標(biāo)api對(duì)應(yīng)的限流維度;
10、基于所述限流維度生成所述限流維度的唯一標(biāo)識(shí);
11、根據(jù)所述唯一標(biāo)識(shí)在分布式緩存服務(wù)器中獲取所述唯一標(biāo)識(shí)對(duì)應(yīng)的固定時(shí)間窗口內(nèi)的第一流量值;
12、將所述第一流量值與最大流量閾值進(jìn)行對(duì)比,并根據(jù)對(duì)比結(jié)果執(zhí)行預(yù)設(shè)操作;
13、其中,所述預(yù)設(shè)操作包括:跳出對(duì)所述強(qiáng)限流規(guī)則的遍歷,將禁止指令寫入結(jié)果集,或?qū)⑺鑫ㄒ粯?biāo)識(shí)寫入標(biāo)識(shí)集并繼續(xù)對(duì)所述強(qiáng)限流規(guī)則進(jìn)行遍歷。
14、可選地,所述限流維度包括請(qǐng)求頭正則;
15、所述基于所述限流維度生成所述限流維度的唯一標(biāo)識(shí)的步驟,包括:
16、在限流維度為所述請(qǐng)求頭正則時(shí),獲取所述當(dāng)前請(qǐng)求的請(qǐng)求頭中預(yù)匹配字段對(duì)應(yīng)的實(shí)際值;
17、通過正則表達(dá)式對(duì)所述預(yù)匹配字段對(duì)應(yīng)的實(shí)際值進(jìn)行匹配,并基于匹配結(jié)果生成所述請(qǐng)求頭正則維度對(duì)應(yīng)的唯一標(biāo)識(shí)。
18、可選地,所述獲取所述目標(biāo)api在所述弱限流規(guī)則中的第二遍歷結(jié)果,并通過所述第二遍歷結(jié)果更新所述結(jié)果集的步驟包括:
19、確定所述目標(biāo)api對(duì)應(yīng)的限流維度,基于所述限流維度和所述弱限流規(guī)則生成所述限流維度的唯一標(biāo)識(shí);
20、根據(jù)所述唯一標(biāo)識(shí)在分布式緩存服務(wù)器中獲取對(duì)應(yīng)的固定時(shí)間窗口內(nèi)的第二流量值;
21、根據(jù)所述第二流量值確定所述限流維度對(duì)應(yīng)的流量比重,并將所述流量比重存放至流量影響因子集合;
22、獲取所述目標(biāo)api對(duì)應(yīng)的服務(wù)器中資源維度的實(shí)際值,并將所述實(shí)際值存放至所述流量影響因子集合;
23、遍歷所述流量影響因子集合確定所述流量影響因子集合中各元素的總和,將所述總和與預(yù)設(shè)限流要求閾值進(jìn)行對(duì)比;
24、根據(jù)對(duì)比結(jié)果判定所述當(dāng)前請(qǐng)求是否達(dá)到限流要求,并根據(jù)判定結(jié)果執(zhí)行預(yù)設(shè)操作;
25、其中,所述預(yù)設(shè)操作包括:跳出對(duì)所述弱限流規(guī)則的遍歷,將所述禁止指令寫入結(jié)果集,或?qū)⑺鱿蘖骶S度的唯一標(biāo)識(shí)寫入標(biāo)識(shí)集并繼續(xù)對(duì)所述弱限流規(guī)則進(jìn)行遍歷。
26、可選地,所述根據(jù)對(duì)比結(jié)果判定所述當(dāng)前請(qǐng)求是否達(dá)到限流要求,并根據(jù)判斷結(jié)果執(zhí)行預(yù)設(shè)操作的步驟包括:
27、在所述總和大于所述預(yù)設(shè)限流要求閾值時(shí),判定所述當(dāng)前請(qǐng)求達(dá)到限流要求,并執(zhí)行所述跳出對(duì)所述弱限流規(guī)則的遍歷,將所述禁止指令寫入所述結(jié)果集;
28、在所述總和小于所述預(yù)設(shè)限流要求閾值時(shí),將所述唯一標(biāo)識(shí)寫入標(biāo)識(shí)集并繼續(xù)對(duì)所述弱限流規(guī)則進(jìn)行遍歷。
29、可選地,所述根據(jù)更新后的所述結(jié)果集中是否存在所述禁止指令判斷是否對(duì)所述當(dāng)前請(qǐng)求進(jìn)行限流的步驟之后,還包括:
30、若更新后的結(jié)果集中不存在禁止指令,則對(duì)標(biāo)識(shí)集進(jìn)行遍歷,通過分布式緩存服務(wù)器對(duì)遍歷到的唯一標(biāo)識(shí)進(jìn)行原子性操作;
31、在進(jìn)行原子性操作后,將所述當(dāng)前請(qǐng)求路由至目標(biāo)服務(wù)器。
32、可選地,所述在進(jìn)行原子性操作后,將所述當(dāng)前請(qǐng)求路由至目標(biāo)服務(wù)器的步驟之后,還包括:
33、在所述目標(biāo)服務(wù)器對(duì)所述當(dāng)前請(qǐng)求進(jìn)行相應(yīng)后,通過分布式緩存服務(wù)器進(jìn)行對(duì)所述唯一標(biāo)識(shí)進(jìn)行原子性逆操作;
34、根據(jù)逆操作后的唯一標(biāo)識(shí)重置所述標(biāo)識(shí)集。
35、此外,為實(shí)現(xiàn)上述目的,本發(fā)明還提出一種網(wǎng)關(guān)限流裝置,所述裝置包括:
36、規(guī)則確定模塊,用于確定當(dāng)前請(qǐng)求所訪問的目標(biāo)api,獲取預(yù)先配置的api流控規(guī)則,所述api流控規(guī)則中包括強(qiáng)限流規(guī)則和弱限流規(guī)則;
37、第一獲取模塊,用于獲取所述目標(biāo)api在所述強(qiáng)限流規(guī)則中的第一遍歷結(jié)果,并將所述第一遍歷結(jié)果寫入結(jié)果集;
38、指令判斷模塊,用于判斷所述結(jié)果集中是否存在禁止指令;
39、第二獲取模塊,用于若否,則獲取所述目標(biāo)api在所述弱限流規(guī)則中的第二遍歷結(jié)果,并通過所述第二遍歷結(jié)果更新所述結(jié)果集;
40、結(jié)果判斷模塊,用于根據(jù)更新后的所述結(jié)果集中是否存在所述禁止指令判斷是否對(duì)所述當(dāng)前請(qǐng)求進(jìn)行限流。
41、此外,為實(shí)現(xiàn)上述目的,本發(fā)明還提出一種網(wǎng)關(guān)限流設(shè)備,所述設(shè)備包括:存儲(chǔ)器、處理器及存儲(chǔ)在所述存儲(chǔ)器上并可在所述處理器上運(yùn)行的網(wǎng)關(guān)限流程序,所述網(wǎng)關(guān)限流程序配置為實(shí)現(xiàn)如上文所述的網(wǎng)關(guān)限流方法的步驟。
42、此外,為實(shí)現(xiàn)上述目的,本發(fā)明還提出一種存儲(chǔ)介質(zhì),所述存儲(chǔ)介質(zhì)上存儲(chǔ)有網(wǎng)關(guān)限流程序,所述網(wǎng)關(guān)限流程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如上文所述的網(wǎng)關(guān)限流方法的步驟。
43、本發(fā)明公開了一種網(wǎng)關(guān)限流方法、裝置、設(shè)備及存儲(chǔ)介質(zhì),該方法包括:確定當(dāng)前請(qǐng)求所訪問的目標(biāo)api,獲取預(yù)先配置的api流控規(guī)則,api流控規(guī)則中包括強(qiáng)限流規(guī)則和弱限流規(guī)則;獲取目標(biāo)api在強(qiáng)限流規(guī)則中的第一遍歷結(jié)果,并將第一遍歷結(jié)果寫入結(jié)果集;判斷結(jié)果集中是否存在禁止指令;若否,則獲取目標(biāo)api在弱限流規(guī)則中的第二遍歷結(jié)果,并通過第二遍歷結(jié)果更新結(jié)果集;根據(jù)更新后的結(jié)果集中是否存在禁止指令判斷是否對(duì)當(dāng)前請(qǐng)求進(jìn)行限流。通過上述方式,獲取基于api的強(qiáng)弱兩級(jí)控流規(guī)則,通過強(qiáng)限流規(guī)則進(jìn)行遍歷,然后通過弱限流規(guī)則進(jìn)行遍歷,能夠?qū)崿F(xiàn)多個(gè)限流維度的組合,進(jìn)行更智能的限流。