本申請(qǐng)涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種流量控制方法、裝置和系統(tǒng)。
背景技術(shù):
隨著互聯(lián)網(wǎng)的普及,越來越多的用戶使用互聯(lián)網(wǎng)進(jìn)行信息查詢、網(wǎng)絡(luò)購物等。當(dāng)客戶端的使用人數(shù)很多時(shí),會(huì)給服務(wù)端造成很大的流量壓力?,F(xiàn)有技術(shù)中,通常是在服務(wù)端設(shè)置一個(gè)閾值,當(dāng)流量超出該閾值時(shí),服務(wù)端向客戶端發(fā)送錯(cuò)誤碼,客戶端接收到錯(cuò)誤碼后在一段時(shí)間內(nèi)停止向服務(wù)端發(fā)送網(wǎng)絡(luò)請(qǐng)求。
但是,在服務(wù)端僅設(shè)置一個(gè)閾值的方案會(huì)存在用戶體驗(yàn)差、單一的閾值難以合理設(shè)置、服務(wù)端容易被突發(fā)流量沖垮等問題。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)旨在至少在一定程度上解決相關(guān)技術(shù)中的技術(shù)問題之一。
為此,本申請(qǐng)的一個(gè)目的在于提出一種流量控制方法,該方法可以解決流量控制時(shí)僅設(shè)置單一閾值時(shí)存在的上述問題。
本申請(qǐng)的另一個(gè)目的在于提出一種流量控制裝置。
本申請(qǐng)的另一個(gè)目的在于提出一種流量控制系統(tǒng)。
為達(dá)到上述目的,本申請(qǐng)第一方面實(shí)施例提出的流量控制方法,包括:檢測當(dāng)前的網(wǎng)絡(luò)流量值;比較當(dāng)前的網(wǎng)絡(luò)流量值與預(yù)設(shè)的多個(gè)閾值;當(dāng)當(dāng)前的網(wǎng)絡(luò)流量值大于第一閾值并小于第二閾值時(shí),向發(fā)起網(wǎng)絡(luò)請(qǐng)求的客戶端返回第一限流通知;當(dāng)當(dāng)前的網(wǎng)絡(luò)流量值大于第二閾值時(shí),向發(fā)起網(wǎng)絡(luò)請(qǐng)求的客戶端返回第二限流通知;其中,第一閾值小于第二閾值;所述第一限流通知中包括網(wǎng)絡(luò)請(qǐng)求的調(diào)整后的發(fā)送時(shí)間間隔和第一有效時(shí)間,以使所述客戶端在所述第一有效時(shí)間內(nèi),根據(jù)所述發(fā)送時(shí)間間隔發(fā)送網(wǎng)絡(luò)請(qǐng)求;所述第二限流通知中包括:第二有效時(shí)間,以使所述客戶端在所述第二有效時(shí)間內(nèi)停止發(fā)送網(wǎng)絡(luò)請(qǐng)求。
本申請(qǐng)第一方面實(shí)施例提出的流量控制方法,通過設(shè)置多個(gè)閾值,可以實(shí)現(xiàn)分級(jí)流量控制,從而解決單一閾值存在的一些問題。
為達(dá)到上述目的,本申請(qǐng)第二方面實(shí)施例提出的流量控制方法,包括:接收服務(wù)端發(fā) 送的限流通知,所述限流通知是服務(wù)端比較當(dāng)前的網(wǎng)絡(luò)流量值與預(yù)設(shè)的多個(gè)閾值后得到的;其中,當(dāng)當(dāng)前的網(wǎng)絡(luò)流量值大于第一閾值并小于第二閾值時(shí),所述限流通知是包括網(wǎng)絡(luò)請(qǐng)求的調(diào)整后的發(fā)送時(shí)間間隔和第一有效時(shí)間的第一限流通知,當(dāng)當(dāng)前的網(wǎng)絡(luò)流量值大于第二閾值時(shí),所述限流通知是包括第二有效時(shí)間的第二限流通知;其中,第一閾值小于第二閾值;根據(jù)所述限流通知進(jìn)行流量控制;其中,當(dāng)所述限流通知是第一限流通知時(shí),在所述第一有效時(shí)間內(nèi),根據(jù)所述發(fā)送時(shí)間間隔發(fā)送網(wǎng)絡(luò)請(qǐng)求,當(dāng)所述限流通知是第二限流通知時(shí),在所述第二有效時(shí)間內(nèi)停止發(fā)送網(wǎng)絡(luò)請(qǐng)求。
本申請(qǐng)第二方面實(shí)施例提出的流量控制方法,通過設(shè)置多個(gè)閾值,可以實(shí)現(xiàn)分級(jí)流量控制,從而解決單一閾值存在的一些問題。
為達(dá)到上述目的,本申請(qǐng)第三方面實(shí)施例提出的流量控制裝置,包括:檢測模塊,用于檢測當(dāng)前的網(wǎng)絡(luò)流量值;確定模塊,用于比較當(dāng)前的網(wǎng)絡(luò)流量值與預(yù)設(shè)的多個(gè)閾值;發(fā)送模塊,用于當(dāng)當(dāng)前的網(wǎng)絡(luò)流量值大于第一閾值并小于第二閾值時(shí),向發(fā)起網(wǎng)絡(luò)請(qǐng)求的客戶端返回第一限流通知;當(dāng)當(dāng)前的網(wǎng)絡(luò)流量值大于第二閾值時(shí),向發(fā)起網(wǎng)絡(luò)請(qǐng)求的客戶端返回第二限流通知;其中,第一閾值小于第二閾值;所述第一限流通知中包括網(wǎng)絡(luò)請(qǐng)求的調(diào)整后的發(fā)送時(shí)間間隔和第一有效時(shí)間,以使所述客戶端在所述第一有效時(shí)間內(nèi),根據(jù)所述發(fā)送時(shí)間間隔發(fā)送網(wǎng)絡(luò)請(qǐng)求;所述第二限流通知中包括:第二有效時(shí)間,以使所述客戶端在所述第二有效時(shí)間內(nèi)停止發(fā)送網(wǎng)絡(luò)請(qǐng)求。
本申請(qǐng)第三方面實(shí)施例提出的流量控制裝置,通過設(shè)置多個(gè)閾值,可以實(shí)現(xiàn)分級(jí)流量控制,從而解決單一閾值存在的一些問題。
為達(dá)到上述目的,本申請(qǐng)第四方面實(shí)施例提出的流量控制裝置,包括:接收模塊,用于接收服務(wù)端發(fā)送的限流通知,所述限流通知是服務(wù)端比較當(dāng)前的網(wǎng)絡(luò)流量值與預(yù)設(shè)的多個(gè)閾值后得到的;其中,當(dāng)當(dāng)前的網(wǎng)絡(luò)流量值大于第一閾值并小于第二閾值時(shí),所述限流通知是包括網(wǎng)絡(luò)請(qǐng)求的調(diào)整后的發(fā)送時(shí)間間隔和第一有效時(shí)間的第一限流通知,當(dāng)當(dāng)前的網(wǎng)絡(luò)流量值大于第二閾值時(shí),所述限流通知是包括第二有效時(shí)間的第二限流通知;其中,第一閾值小于第二閾值;控制模塊,用于根據(jù)所述限流通知進(jìn)行流量控制;其中,當(dāng)所述限流通知是第一限流通知時(shí),在所述第一有效時(shí)間內(nèi),根據(jù)所述發(fā)送時(shí)間間隔發(fā)送網(wǎng)絡(luò)請(qǐng)求,當(dāng)所述限流通知是第二限流通知時(shí),在所述第二有效時(shí)間內(nèi)停止發(fā)送網(wǎng)絡(luò)請(qǐng)求。
本申請(qǐng)第四方面實(shí)施例提出的流量控制裝置,通過設(shè)置多個(gè)閾值,可以實(shí)現(xiàn)分級(jí)流量控制,從而解決單一閾值存在的一些問題。
為達(dá)到上述目的,本申請(qǐng)第五方面實(shí)施例提出的流量控制系統(tǒng),包括:本申請(qǐng)第三方面實(shí)施例提出的流量控制裝置,以及,本申請(qǐng)第四方面實(shí)施例提出的流量控制裝置。
本申請(qǐng)第五方面實(shí)施例提出的流量控制系統(tǒng),通過設(shè)置多個(gè)閾值,可以實(shí)現(xiàn)分級(jí)流量 控制,從而解決單一閾值存在的一些問題。
本申請(qǐng)附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本申請(qǐng)的實(shí)踐了解到。
附圖說明
本申請(qǐng)上述的和/或附加的方面和優(yōu)點(diǎn)從下面結(jié)合附圖對(duì)實(shí)施例的描述中將變得明顯和容易理解,其中:
圖1是本申請(qǐng)一實(shí)施例提出的流量控制方法的流程示意圖;
圖2是本申請(qǐng)另一實(shí)施例提出的流量控制方法的流程示意圖;
圖3是本申請(qǐng)另一實(shí)施例提出的流量控制方法的流程示意圖;
圖4是本申請(qǐng)另一實(shí)施例提出的流量控制裝置的結(jié)構(gòu)示意圖;
圖5是本申請(qǐng)另一實(shí)施例提出的流量控制裝置的結(jié)構(gòu)示意圖;
圖6是本申請(qǐng)另一實(shí)施例提出的流量控制裝置的結(jié)構(gòu)示意圖;
圖7是本申請(qǐng)另一實(shí)施例提出的流量控制系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面詳細(xì)描述本申請(qǐng)的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號(hào)表示相同或類似的模塊或具有相同或類似功能的模塊。下面通過參考附圖描述的實(shí)施例是示例性的,僅用于解釋本申請(qǐng),而不能理解為對(duì)本申請(qǐng)的限制。相反,本申請(qǐng)的實(shí)施例包括落入所附加權(quán)利要求書的精神和內(nèi)涵范圍內(nèi)的所有變化、修改和等同物。
圖1是本申請(qǐng)一實(shí)施例提出的流量控制方法的流程示意圖,該方法以服務(wù)端的執(zhí)行流程為例,該方法包括:
S11:檢測當(dāng)前的網(wǎng)絡(luò)流量值。
其中,網(wǎng)絡(luò)流量值可以用每秒網(wǎng)絡(luò)請(qǐng)求個(gè)數(shù)(query per second,QPS)表示,每個(gè)服務(wù)器可以實(shí)時(shí)檢測自身的QPS,從而得到當(dāng)前的網(wǎng)絡(luò)流量值。每個(gè)服務(wù)器在檢測自身的QPS時(shí),例如,服務(wù)器接收客戶端發(fā)送的網(wǎng)絡(luò)請(qǐng)求,對(duì)1秒內(nèi)的網(wǎng)絡(luò)請(qǐng)求進(jìn)行數(shù)量統(tǒng)計(jì),從而得到QPS。
S12:比較當(dāng)前的網(wǎng)絡(luò)流量值與預(yù)設(shè)的多個(gè)閾值。
本實(shí)施例中,設(shè)置的多個(gè)閾值以包括第一閾值和第二閾值為例,其中,第一閾值小于第二閾值。
S13:當(dāng)當(dāng)前的網(wǎng)絡(luò)流量值大于第一閾值并小于第二閾值時(shí),向發(fā)起網(wǎng)絡(luò)請(qǐng)求的客戶端返回第一限流通知;當(dāng)當(dāng)前的網(wǎng)絡(luò)流量值大于第二閾值時(shí),向發(fā)起網(wǎng)絡(luò)請(qǐng)求的客戶端返回 第二限流通知;其中,第一閾值小于第二閾值。
所述第一限流通知中包括網(wǎng)絡(luò)請(qǐng)求的調(diào)整后的發(fā)送時(shí)間間隔和第一有效時(shí)間,以使所述客戶端在所述第一有效時(shí)間內(nèi),根據(jù)所述發(fā)送時(shí)間間隔發(fā)送網(wǎng)絡(luò)請(qǐng)求;所述第二限流通知中包括:第二有效時(shí)間,以使所述客戶端在所述第二有效時(shí)間內(nèi)停止發(fā)送網(wǎng)絡(luò)請(qǐng)求。
其中,客戶端和服務(wù)端可以預(yù)先配置一致的限流策略,從而客戶端可以根據(jù)服務(wù)端發(fā)送的限流通知消息以及預(yù)設(shè)的限流策略進(jìn)行相應(yīng)的流量控制。
為了簡化說明,當(dāng)前的網(wǎng)絡(luò)流量值與預(yù)設(shè)的多個(gè)閾值的比較結(jié)果與限流策略之間的關(guān)系可以用狀態(tài)與限流策略之間的關(guān)系表示。
例如,在設(shè)置第一閾值和第二閾值后,第一閾值和第二閾值可以將狀態(tài)分為三種,分別用正常狀態(tài)、低壓限流狀態(tài)和高壓限流狀態(tài)表示。
具體的,如果當(dāng)前的網(wǎng)絡(luò)流量值小于第一閾值,則確定當(dāng)前所處的狀態(tài)是正常狀態(tài),如果當(dāng)前的網(wǎng)絡(luò)流量值大于第一閾值,且小于第二閾值,則確定當(dāng)前所處的狀態(tài)是低壓限流狀態(tài),如果當(dāng)前的網(wǎng)絡(luò)流量值大于第二閾值,則確定當(dāng)前所處的狀態(tài)是高壓限流狀態(tài)。
如表1所示,狀態(tài)與限流策略之間的關(guān)系可以包括:
表1
一些實(shí)施例中,本實(shí)施例的服務(wù)端具體是指單臺(tái)服務(wù)器,相應(yīng)的,預(yù)設(shè)的閾值是根據(jù)單臺(tái)限流閾值以及預(yù)設(shè)系數(shù)確定的,所述單臺(tái)限流閾值是根據(jù)集群整體能力值與集群服務(wù)器總數(shù)確定的。
其中,服務(wù)端通常對(duì)外表現(xiàn)的是集群整體能力值,例如,當(dāng)前的QPS大于集群整體能力值m時(shí),確定當(dāng)前所處的狀態(tài)是高壓限流狀態(tài),如果機(jī)器服務(wù)器總數(shù)是n,則上述的第二閾值對(duì)應(yīng)的單臺(tái)限流閾值是m/n,另外,可以對(duì)應(yīng)不同的服務(wù)器設(shè)置不同的預(yù)設(shè)系數(shù),從而用m/n乘以相應(yīng)的預(yù)設(shè)系數(shù),得到每臺(tái)服務(wù)器對(duì)應(yīng)的第二閾值。類似的,第一閾值也可以根據(jù)相應(yīng)的單臺(tái)限流閾值和預(yù)設(shè)系數(shù)確定。
本實(shí)施例中,通過設(shè)置多個(gè)閾值,可以實(shí)現(xiàn)分級(jí)流量控制,從而解決單一閾值存在的一些問題。進(jìn)一步的,通過客戶端根據(jù)服務(wù)端發(fā)送的第一限流通知或第二限流通知和預(yù)設(shè) 的限流策略進(jìn)行流量控制,可以實(shí)現(xiàn)客戶端與服務(wù)端聯(lián)動(dòng),兼顧用戶體驗(yàn)和系統(tǒng)安全,實(shí)現(xiàn)系統(tǒng)柔性可用。進(jìn)一步的,通過單臺(tái)服務(wù)器的執(zhí)行,可以提高反應(yīng)速度。
一些實(shí)施例中,流量控制可以分為全局控制模式和分業(yè)務(wù)控制模式,相應(yīng)的,上述的網(wǎng)絡(luò)流量值可以包括:全局網(wǎng)絡(luò)流量值和/或分業(yè)務(wù)的網(wǎng)絡(luò)流量值。
圖2是本申請(qǐng)另一實(shí)施例提出的流量控制方法的流程示意圖,本實(shí)施例以網(wǎng)絡(luò)流量值包括全局網(wǎng)絡(luò)流量值和分業(yè)務(wù)的網(wǎng)絡(luò)流量值為例,該方法包括:
S21:服務(wù)器接收客戶端發(fā)送的網(wǎng)絡(luò)請(qǐng)求。
本實(shí)施例以服務(wù)端的單臺(tái)服務(wù)器的執(zhí)行為例。
相對(duì)于服務(wù)器集群方式,單臺(tái)服務(wù)器可以獨(dú)立執(zhí)行,不需要集群內(nèi)的服務(wù)器進(jìn)行狀態(tài)同步,從而可以保證流量控制的及時(shí)迅速。
S22:服務(wù)器統(tǒng)計(jì)得到全局QPS,以及,獲取全局流量控制的多個(gè)閾值。
例如,服務(wù)器中分別對(duì)應(yīng)全局流量控制和分業(yè)務(wù)的流量控制設(shè)置全局QPS計(jì)數(shù)器和分業(yè)務(wù)QPS計(jì)數(shù)器,進(jìn)一步的,對(duì)應(yīng)不同的業(yè)務(wù),可以采用不同的分業(yè)務(wù)QPS計(jì)數(shù)器。
在統(tǒng)計(jì)全局QPS時(shí),例如,每接收到一個(gè)網(wǎng)絡(luò)請(qǐng)求,將全局QPS計(jì)數(shù)器的原有計(jì)數(shù)值加1,統(tǒng)計(jì)一秒內(nèi)的請(qǐng)求次數(shù),從而得到全局QPS,并在每秒結(jié)束后清零,以便對(duì)后續(xù)的QPS進(jìn)行統(tǒng)計(jì)。在時(shí)間上以服務(wù)器的時(shí)間為準(zhǔn)。
另外,全局QPS和分業(yè)務(wù)QPS的初始值可以設(shè)置為0。
其中,服務(wù)器內(nèi)可以預(yù)先配置全局流量控制對(duì)應(yīng)的多個(gè)閾值,以及,分業(yè)務(wù)控制對(duì)應(yīng)的多個(gè)閾值。全局流量控制對(duì)應(yīng)的多個(gè)閾值與分業(yè)務(wù)控制對(duì)應(yīng)的多個(gè)閾值可以相同或不同,不同的分業(yè)務(wù)控制對(duì)應(yīng)的多個(gè)閾值可以相同或不同。
S23:比較全局QPS與全局流量控制的多個(gè)閾值。
假設(shè)全局流量控制的多個(gè)閾值用T11和T12表示,其中,T11小于T12,則可以將全局QPS分別與T11和T12進(jìn)行比較。
另外,可以理解的是,T11和T12可以將全局狀態(tài)分為三種,分別稱為全局正常狀態(tài)、全局高壓限流狀態(tài)和全局低壓限流狀態(tài),如果全局QPS小于或等于T11,則確定為全局正常狀態(tài),如果全局QPS大于T11且小于或等于T12,則確定為全局低壓限流狀態(tài),如果全局QPS大于T12,則確定為全局高壓限流狀態(tài)。S24:如果全局QPS大于T11,則向客戶端發(fā)送全局限流通知。
其中,全局限流通知可以分為全局高壓限流通知和全局低壓限流通知,與上述的第一限流通知和第二限流通知對(duì)應(yīng),全局高壓限流通知和全局低壓限流通知可以理解為是全局流量控制時(shí)的第二限流通知和第一限流通知,具體的,當(dāng)全局QPS大于T12時(shí),服務(wù)端向客戶端發(fā)送全局高壓限流通知,當(dāng)全局QPS大于T11并小于T12時(shí),服務(wù)端向客戶端發(fā)送 全局低壓限流通知。
限流通知中可以包括狀態(tài)碼,以區(qū)分全局限流通知和分業(yè)務(wù)限流通知,另外,還可以包括狀態(tài)信息及相應(yīng)的參數(shù)信息等,以區(qū)分高壓限流和低壓限流。
如表2所示,全局限流通知的格式是:
表2
其中,狀態(tài)碼用于區(qū)分全局限流通知和分業(yè)務(wù)限流通知,本實(shí)施例中,以4xx表示全局限流通知,4xy表示分業(yè)務(wù)限流通知為例。
x-delay是狀態(tài)信息,例如,-1表示高壓限流狀態(tài),為正整數(shù)表示低壓限流狀態(tài),且客戶端發(fā)送網(wǎng)絡(luò)請(qǐng)求的時(shí)間間隔是該正整數(shù)。
x-expire是有效時(shí)間。
S25:如果全局QPS小于T11,則確定所述網(wǎng)絡(luò)請(qǐng)求屬于的業(yè)務(wù),并統(tǒng)計(jì)得到所述業(yè)務(wù)對(duì)應(yīng)的分業(yè)務(wù)QPS,以及,獲取所述業(yè)務(wù)對(duì)應(yīng)的分業(yè)務(wù)流量控制的多個(gè)閾值。
其中,可以預(yù)先配置網(wǎng)絡(luò)請(qǐng)求與業(yè)務(wù)之間的關(guān)聯(lián)關(guān)系,從而可以確定每個(gè)網(wǎng)絡(luò)請(qǐng)求屬于的業(yè)務(wù),如交易、支付等業(yè)務(wù)。
在確定出相應(yīng)的業(yè)務(wù)后,通過相應(yīng)業(yè)務(wù)對(duì)應(yīng)的分業(yè)務(wù)QPS計(jì)數(shù)器,類似對(duì)全局QPS的統(tǒng)計(jì),可以得到分業(yè)務(wù)QPS。另外,服務(wù)器內(nèi)可以預(yù)先配置每種業(yè)務(wù)對(duì)應(yīng)的分業(yè)務(wù)流量控制的多個(gè)閾值,從而可以獲取該業(yè)務(wù)對(duì)應(yīng)的分業(yè)務(wù)流量控制的多個(gè)閾值,例如,用T21和T22表示。
S26:比較所述分業(yè)務(wù)QPS與所述分業(yè)務(wù)流量控制的多個(gè)閾值。
假設(shè)分業(yè)務(wù)流量控制的多個(gè)閾值用T21和T22表示,其中,T21小于T22,則可以將分業(yè)務(wù)QPS分別與T21和T22進(jìn)行比較。
另外,可以理解的是,T21和T22可以將分業(yè)務(wù)狀態(tài)分為三種,分別稱為分業(yè)務(wù)正常狀態(tài)、分業(yè)務(wù)高壓限流狀態(tài)和分業(yè)務(wù)低壓限流狀態(tài),如果分業(yè)務(wù)QPS小于或等于T21,則確定為分業(yè)務(wù)正常狀態(tài),如果分業(yè)務(wù)QPS大于T21且小于或等于T22,則確定為分業(yè)務(wù)低壓限流狀態(tài),如果分業(yè)務(wù)QPS大于T22,則確定為分業(yè)務(wù)高壓限流狀態(tài)。
S27:如果分業(yè)務(wù)QPS大于T21,則向客戶端發(fā)送分業(yè)務(wù)限流通知。
其中,分業(yè)務(wù)限流通知可以分為分業(yè)務(wù)高壓限流通知和分業(yè)務(wù)低壓限流通知,與上述的第一限流通知和第二限流通知對(duì)應(yīng),分業(yè)務(wù)高壓限流通知和分業(yè)務(wù)低壓限流通知可以理解為是分業(yè)務(wù)流量控制時(shí)的第二限流通知和第一限流通知,具體的,當(dāng)分業(yè)務(wù)QPS大于T22 時(shí),服務(wù)端向客戶端發(fā)送分業(yè)務(wù)高壓限流通知,當(dāng)全局QPS大于T21并小于T22時(shí),服務(wù)端向客戶端發(fā)送分業(yè)務(wù)低壓限流通知。
限流通知中可以包括狀態(tài)碼,以區(qū)分全局限流通知和分業(yè)務(wù)限流通知,另外,還可以包括狀態(tài)信息及相應(yīng)的參數(shù)信息等,以區(qū)分高壓限流和低壓限流。
如表3所示,分業(yè)務(wù)限流通知的格式是:
表3
其中,狀態(tài)碼用于區(qū)分全局限流通知和分業(yè)務(wù)限流通知,本實(shí)施例中,以4xx表示全局限流通知,4xy表示分業(yè)務(wù)限流通知為例。
x-delay是狀態(tài)信息,例如,-1表示高壓限流狀態(tài),為正整數(shù)表示低壓限流狀態(tài),且客戶端發(fā)送網(wǎng)絡(luò)請(qǐng)求的時(shí)間間隔是該正整數(shù)。
x-expire是有效時(shí)間。
x-api是業(yè)務(wù)標(biāo)識(shí)。
S28:如果分業(yè)務(wù)QPS小于T21,則正常處理所述網(wǎng)絡(luò)請(qǐng)求。
本實(shí)施例中,在低壓限流時(shí),客戶端可以以較低的頻率繼續(xù)發(fā)送網(wǎng)絡(luò)請(qǐng)求,不影響核心功能的使用,提升限流狀態(tài)下的用戶體驗(yàn)。當(dāng)服務(wù)端流量觸發(fā)高壓限流時(shí),客戶端在有效時(shí)間內(nèi)停止向服務(wù)端發(fā)送網(wǎng)絡(luò)請(qǐng)求,以減輕服務(wù)端的壓力,保證系統(tǒng)安全。
圖3是本申請(qǐng)另一實(shí)施例提出的流量控制方法的流程示意圖,該方法以客戶端的執(zhí)行流程為例,該方法包括:
S31:接收服務(wù)端發(fā)送的限流通知,所述限流通知是服務(wù)端比較當(dāng)前的網(wǎng)絡(luò)流量值與預(yù)設(shè)的多個(gè)閾值后得到的。
其中,當(dāng)當(dāng)前的網(wǎng)絡(luò)流量值大于第一閾值并小于第二閾值時(shí),所述限流通知是包括網(wǎng)絡(luò)請(qǐng)求的調(diào)整后的發(fā)送時(shí)間間隔和第一有效時(shí)間的第一限流通知,當(dāng)當(dāng)前的網(wǎng)絡(luò)流量值大于第二閾值時(shí),所述限流通知是包括第二有效時(shí)間的第二限流通知;其中,第一閾值小于第二閾值。
S32:根據(jù)所述限流通知進(jìn)行流量控制;
其中,當(dāng)所述限流通知是第一限流通知時(shí),在所述第一有效時(shí)間內(nèi),根據(jù)所述發(fā)送時(shí)間間隔發(fā)送網(wǎng)絡(luò)請(qǐng)求,當(dāng)所述限流通知是第二限流通知時(shí),在所述第二有效時(shí)間內(nèi)停止發(fā)送網(wǎng)絡(luò)請(qǐng)求。
其中,如果有效時(shí)間內(nèi)收到同類的限流通知,則用最新收到的限流通知更新原有的限流通知,根據(jù)最新收到的限流通知進(jìn)行流量控制。
一些實(shí)施例中,所述限流通知包括:全局限流通知,和/或,分業(yè)務(wù)限流通知。
一些實(shí)施例中,所述根據(jù)所述限流通知進(jìn)行流量控制,包括:
獲取待發(fā)送的網(wǎng)絡(luò)請(qǐng)求;
如果所述待發(fā)送的網(wǎng)絡(luò)請(qǐng)求匹配到的限流通知包括:全局限流通知和分業(yè)務(wù)限流通知,根據(jù)所述全局限流通知和所述分業(yè)務(wù)限流通知,分別確定下一次發(fā)送時(shí)間,得到兩個(gè)下一次發(fā)送時(shí)間;
在兩個(gè)下一次發(fā)送時(shí)間中的最大值對(duì)應(yīng)的時(shí)間,向服務(wù)端發(fā)送所述待發(fā)送的網(wǎng)絡(luò)請(qǐng)求。
例如,客戶端接收到全局限流通知和分業(yè)務(wù)限流通知后,分別進(jìn)行保存,并計(jì)算相應(yīng)的下一次的發(fā)送時(shí)間。
例如:當(dāng)前時(shí)間為t_now,客戶端本地有兩條規(guī)則:
(a)全局規(guī)則:發(fā)包最小延遲100ms,有效時(shí)間未結(jié)束,上一次發(fā)送時(shí)間為t1,則下一次發(fā)送時(shí)間為r1=max(t1+100ms,t_now);
(b)分業(yè)務(wù)規(guī)則(當(dāng)前待發(fā)請(qǐng)求屬于該業(yè)務(wù)):發(fā)包最小延遲200ms,有效時(shí)間未結(jié)束,上一次發(fā)送時(shí)間為t2,則下一次發(fā)送時(shí)間為r2=max(t2+200ms,t_now);
如果待發(fā)送的網(wǎng)絡(luò)請(qǐng)求只匹配全局規(guī)則,那么最終可發(fā)送時(shí)間點(diǎn)為r1;如果同時(shí)匹配全局和分業(yè)務(wù)兩條規(guī)則,那么最終的可發(fā)送時(shí)間點(diǎn)為max(r1,r2)。
本實(shí)施例中,通過設(shè)置多個(gè)閾值,可以實(shí)現(xiàn)分級(jí)流量控制,從而解決單一閾值存在的一些問題。
圖4是本申請(qǐng)另一實(shí)施例提出的流量控制裝置的結(jié)構(gòu)示意圖,該裝置40包括:檢測模塊41、確定模塊42和發(fā)送模塊43。
檢測模塊41,用于檢測當(dāng)前的網(wǎng)絡(luò)流量值;
其中,網(wǎng)絡(luò)流量值可以用每秒網(wǎng)絡(luò)請(qǐng)求個(gè)數(shù)(query per second,QPS)表示,每個(gè)服務(wù)器可以實(shí)時(shí)檢測自身的QPS,從而得到當(dāng)前的網(wǎng)絡(luò)流量值。每個(gè)服務(wù)器在檢測自身的QPS時(shí),例如,服務(wù)器接收客戶端發(fā)送的網(wǎng)絡(luò)請(qǐng)求,對(duì)1秒內(nèi)的網(wǎng)絡(luò)請(qǐng)求進(jìn)行數(shù)量統(tǒng)計(jì),從而得到QPS。
確定模塊42,用于比較當(dāng)前的網(wǎng)絡(luò)流量值與預(yù)設(shè)的多個(gè)閾值;
本實(shí)施例中,設(shè)置的多個(gè)閾值以包括第一閾值和第二閾值為例,其中,第一閾值小于第二閾值。
發(fā)送模塊43,用于當(dāng)當(dāng)前的網(wǎng)絡(luò)流量值大于第一閾值并小于第二閾值時(shí),向發(fā)起網(wǎng)絡(luò)請(qǐng)求的客戶端返回第一限流通知;當(dāng)當(dāng)前的網(wǎng)絡(luò)流量值大于第二閾值時(shí),向發(fā)起網(wǎng)絡(luò)請(qǐng)求 的客戶端返回第二限流通知;其中,第一閾值小于第二閾值;
所述第一限流通知中包括網(wǎng)絡(luò)請(qǐng)求的調(diào)整后的發(fā)送時(shí)間間隔和第一有效時(shí)間,以使所述客戶端在所述第一有效時(shí)間內(nèi),根據(jù)所述發(fā)送時(shí)間間隔發(fā)送網(wǎng)絡(luò)請(qǐng)求;所述第二限流通知中包括:第二有效時(shí)間,以使所述客戶端在所述第二有效時(shí)間內(nèi)停止發(fā)送網(wǎng)絡(luò)請(qǐng)求。
其中,客戶端和服務(wù)端可以預(yù)先配置一致的限流策略,從而客戶端可以根據(jù)服務(wù)端發(fā)送的限流通知消息以及預(yù)設(shè)的限流策略進(jìn)行相應(yīng)的流量控制。
為了簡化說明,當(dāng)前的網(wǎng)絡(luò)流量值與預(yù)設(shè)的多個(gè)閾值的比較結(jié)果與限流策略之間的關(guān)系可以用狀態(tài)與限流策略之間的關(guān)系表示。
例如,在設(shè)置第一閾值和第二閾值后,第一閾值和第二閾值可以將狀態(tài)分為三種,分別用正常狀態(tài)、低壓限流狀態(tài)和高壓限流狀態(tài)表示。
具體的,如果當(dāng)前的網(wǎng)絡(luò)流量值小于第一閾值,則確定當(dāng)前所處的狀態(tài)是正常狀態(tài),如果當(dāng)前的網(wǎng)絡(luò)流量值大于第一閾值,且小于第二閾值,則確定當(dāng)前所處的狀態(tài)是低壓限流狀態(tài),如果當(dāng)前的網(wǎng)絡(luò)流量值大于第二閾值,則確定當(dāng)前所處的狀態(tài)是高壓限流狀態(tài)。
狀態(tài)與限流策略之間的關(guān)系可以如表1所示。
一些實(shí)施例中,當(dāng)所述限流通知分為全局限流通知和分業(yè)務(wù)限流通知時(shí),所述限流通知中還包括:用于區(qū)分全局限流通知和分業(yè)務(wù)限流通知的狀態(tài)碼。
一些實(shí)施例中,所述閾值是根據(jù)單臺(tái)限流閾值以及預(yù)設(shè)系數(shù)確定的,所述單臺(tái)限流閾值是根據(jù)集群整體能力值與集群服務(wù)器總數(shù)確定的。
其中,服務(wù)端通常對(duì)外表現(xiàn)的是集群整體能力值,例如,當(dāng)前的QPS大于集群整體能力值m時(shí),確定當(dāng)前所處的狀態(tài)是高壓限流狀態(tài),如果機(jī)器服務(wù)器總數(shù)是n,則上述的第二閾值對(duì)應(yīng)的單臺(tái)限流閾值是m/n,另外,可以對(duì)應(yīng)不同的服務(wù)器設(shè)置不同的預(yù)設(shè)系數(shù),從而用m/n乘以相應(yīng)的預(yù)設(shè)系數(shù),得到每臺(tái)服務(wù)器對(duì)應(yīng)的第二閾值。類似的,第一閾值也可以根據(jù)相應(yīng)的單臺(tái)限流閾值和預(yù)設(shè)系數(shù)確定。
本實(shí)施例中,通過設(shè)置多個(gè)閾值,可以實(shí)現(xiàn)分級(jí)流量控制,從而解決單一閾值存在的一些問題。進(jìn)一步的,通過客戶端根據(jù)服務(wù)端發(fā)送的第一限流通知或第二限流通知和預(yù)設(shè)的限流策略進(jìn)行流量控制,可以實(shí)現(xiàn)客戶端與服務(wù)端聯(lián)動(dòng),兼顧用戶體驗(yàn)和系統(tǒng)安全,實(shí)現(xiàn)系統(tǒng)柔性可用。進(jìn)一步的,通過單臺(tái)服務(wù)器的執(zhí)行,可以提高反應(yīng)速度。
一些實(shí)施例中,流量控制可以分為全局控制模式和分業(yè)務(wù)控制模式,相應(yīng)的,上述的網(wǎng)絡(luò)流量值可以包括:全局網(wǎng)絡(luò)流量值和/或分業(yè)務(wù)的網(wǎng)絡(luò)流量值。
當(dāng)所述網(wǎng)絡(luò)流量值包括:全局網(wǎng)絡(luò)流量值和分業(yè)務(wù)的網(wǎng)絡(luò)流量值,且所述網(wǎng)絡(luò)流量值是QPS時(shí),參見圖5,確定模塊42包括:第一單元421和第二單元422,發(fā)送模塊43包括:第三單元431和第四單元432,另外,還可以包括:處理模塊44。
第一單元421,用于接收到客戶端發(fā)送的網(wǎng)絡(luò)請(qǐng)求后,統(tǒng)計(jì)得到全局QPS,以及,獲取全局流量控制的多個(gè)閾值;以及,比較全局QPS與全局流量控制的多個(gè)閾值;
第三單元431,用于如果全局QPS大于全局流量控制的多個(gè)閾值中的最小閾值,則向客戶端發(fā)送全局限流通知;
其中,全局限流通知可以具體是全局高壓限流通知或全局低壓限流通知。
第二單元422,用于如果全局QPS小于全局流量控制的多個(gè)閾值中的最小閾值,則確定所述網(wǎng)絡(luò)請(qǐng)求屬于的業(yè)務(wù),并統(tǒng)計(jì)得到所述業(yè)務(wù)對(duì)應(yīng)的分業(yè)務(wù)QPS,以及,獲取所述業(yè)務(wù)對(duì)應(yīng)的分業(yè)務(wù)流量控制的多個(gè)閾值;以及,比較所述分業(yè)務(wù)QPS與所述分業(yè)務(wù)流量控制的多個(gè)閾值;
第四單元432,用于如果分業(yè)務(wù)QPS大于分業(yè)務(wù)流量控制的多個(gè)閾值中的最小閾值,則向客戶端發(fā)送分業(yè)務(wù)限流通知;
其中,分業(yè)務(wù)限流通知可以具體是分業(yè)務(wù)高壓限流通知或分業(yè)務(wù)低壓限流通知。
處理模塊44,用于如果分業(yè)務(wù)QPS小于分業(yè)務(wù)流量控制的多個(gè)閾值中的最小閾值,則正常處理所述網(wǎng)絡(luò)請(qǐng)求。
具體內(nèi)容可以參見方法實(shí)施例中的相應(yīng)描述,在此不再贅述。
本實(shí)施例中,在低壓限流時(shí),客戶端可以以較低的頻率繼續(xù)發(fā)送網(wǎng)絡(luò)請(qǐng)求,不影響核心功能的使用,提升限流狀態(tài)下的用戶體驗(yàn)。當(dāng)服務(wù)端流量觸發(fā)高壓限流時(shí),客戶端在有效時(shí)間內(nèi)停止向服務(wù)端發(fā)送網(wǎng)絡(luò)請(qǐng)求,以減輕服務(wù)端的壓力,保證系統(tǒng)安全。
圖6是本申請(qǐng)另一實(shí)施例提出的流量控制裝置的結(jié)構(gòu)示意圖,該裝置60包括:接收模塊61和控制模塊62。
接收模塊61,用于接收服務(wù)端發(fā)送的限流通知,所述限流通知是服務(wù)端比較當(dāng)前的網(wǎng)絡(luò)流量值與預(yù)設(shè)的多個(gè)閾值后得到的;
其中,當(dāng)當(dāng)前的網(wǎng)絡(luò)流量值大于第一閾值并小于第二閾值時(shí),所述限流通知是包括網(wǎng)絡(luò)請(qǐng)求的調(diào)整后的發(fā)送時(shí)間間隔和第一有效時(shí)間的第一限流通知,當(dāng)當(dāng)前的網(wǎng)絡(luò)流量值大于第二閾值時(shí),所述限流通知是包括第二有效時(shí)間的第二限流通知;其中,第一閾值小于第二閾值。
控制模塊62,用于根據(jù)所述限流通知進(jìn)行流量控制;
其中,當(dāng)所述限流通知是第一限流通知時(shí),在所述第一有效時(shí)間內(nèi),根據(jù)所述發(fā)送時(shí)間間隔發(fā)送網(wǎng)絡(luò)請(qǐng)求,當(dāng)所述限流通知是第二限流通知時(shí),在所述第二有效時(shí)間內(nèi)停止發(fā)送網(wǎng)絡(luò)請(qǐng)求。
其中,如果有效時(shí)間內(nèi)收到同類的限流通知,則用最新收到的限流通知更新原有的限 流通知,根據(jù)最新收到的限流通知進(jìn)行流量控制。
一些實(shí)施例中,所述限流通知包括:全局限流通知,和/或,分業(yè)務(wù)限流通知。
一些實(shí)施例中,控制模塊62具體用于:
獲取待發(fā)送的網(wǎng)絡(luò)請(qǐng)求;
如果所述待發(fā)送的網(wǎng)絡(luò)請(qǐng)求匹配到的限流通知包括:全局限流通知和分業(yè)務(wù)限流通知,根據(jù)所述全局限流通知和所述分業(yè)務(wù)限流通知,分別確定下一次發(fā)送時(shí)間,得到兩個(gè)下一次發(fā)送時(shí)間;
在兩個(gè)下一次發(fā)送時(shí)間中的最大值對(duì)應(yīng)的時(shí)間,向服務(wù)端發(fā)送所述待發(fā)送的網(wǎng)絡(luò)請(qǐng)求。
例如,客戶端接收到全局限流通知和分業(yè)務(wù)限流通知后,分別進(jìn)行保存,并計(jì)算相應(yīng)的下一次的發(fā)送時(shí)間。
例如:當(dāng)前時(shí)間為t_now,客戶端本地有兩條規(guī)則:
(a)全局規(guī)則:發(fā)包最小延遲100ms,有效時(shí)間未結(jié)束,上一次發(fā)送時(shí)間為t1,則下一次發(fā)送時(shí)間為r1=max(t1+100ms,t_now);
(b)分業(yè)務(wù)規(guī)則(當(dāng)前待發(fā)請(qǐng)求屬于該業(yè)務(wù)):發(fā)包最小延遲200ms,有效時(shí)間未結(jié)束,上一次發(fā)送時(shí)間為t2,則下一次發(fā)送時(shí)間為r2=max(t2+200ms,t_now);
如果待發(fā)送的網(wǎng)絡(luò)請(qǐng)求只匹配全局規(guī)則,那么最終可發(fā)送時(shí)間點(diǎn)為r1;如果同時(shí)匹配全局和分業(yè)務(wù)兩條規(guī)則,那么最終的可發(fā)送時(shí)間點(diǎn)為max(r1,r2)。
本實(shí)施例中,通過設(shè)置多個(gè)閾值,可以實(shí)現(xiàn)分級(jí)流量控制,從而解決單一閾值存在的一些問題。
圖7是本申請(qǐng)另一實(shí)施例提出的流量控制系統(tǒng)的結(jié)構(gòu)示意圖,該系統(tǒng)70包括:客戶端裝置71和服務(wù)端裝置72。
其中,客戶端裝置71可以如圖4或圖5所示,服務(wù)端裝置72可以如圖6所示。
本實(shí)施例中,通過設(shè)置多個(gè)閾值,可以實(shí)現(xiàn)分級(jí)流量控制,從而解決單一閾值存在的一些問題。
需要說明的是,在本申請(qǐng)的描述中,術(shù)語“第一”、“第二”等僅用于描述目的,而不能理解為指示或暗示相對(duì)重要性。此外,在本申請(qǐng)的描述中,除非另有說明,“多個(gè)”的含義是指至少兩個(gè)。
流程圖中或在此以其他方式描述的任何過程或方法描述可以被理解為,表示包括一個(gè)或更多個(gè)用于實(shí)現(xiàn)特定邏輯功能或過程的步驟的可執(zhí)行指令的代碼的模塊、片段或部分,并且本申請(qǐng)的優(yōu)選實(shí)施方式的范圍包括另外的實(shí)現(xiàn),其中可以不按所示出或討論的順序,包括根據(jù)所涉及的功能按基本同時(shí)的方式或按相反的順序,來執(zhí)行功能,這應(yīng)被本申請(qǐng)的實(shí)施例所屬技術(shù)領(lǐng)域的技術(shù)人員所理解。
應(yīng)當(dāng)理解,本申請(qǐng)的各部分可以用硬件、軟件、固件或它們的組合來實(shí)現(xiàn)。在上述實(shí)施方式中,多個(gè)步驟或方法可以用存儲(chǔ)在存儲(chǔ)器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來實(shí)現(xiàn)。例如,如果用硬件來實(shí)現(xiàn),和在另一實(shí)施方式中一樣,可用本領(lǐng)域公知的下列技術(shù)中的任一項(xiàng)或他們的組合來實(shí)現(xiàn):具有用于對(duì)數(shù)據(jù)信號(hào)實(shí)現(xiàn)邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(PGA),現(xiàn)場可編程門陣列(FPGA)等。
本技術(shù)領(lǐng)域的普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法攜帶的全部或部分步驟是可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),包括方法實(shí)施例的步驟之一或其組合。
此外,在本申請(qǐng)各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理模塊中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)模塊中。上述集成的模塊既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的形式實(shí)現(xiàn)。所述集成的模塊如果以軟件功能模塊的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),也可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。
上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤或光盤等。
在本說明書的描述中,參考術(shù)語“一個(gè)實(shí)施例”、“一些實(shí)施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)包含于本申請(qǐng)的至少一個(gè)實(shí)施例或示例中。在本說明書中,對(duì)上述術(shù)語的示意性表述不一定指的是相同的實(shí)施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)可以在任何的一個(gè)或多個(gè)實(shí)施例或示例中以合適的方式結(jié)合。
盡管上面已經(jīng)示出和描述了本申請(qǐng)的實(shí)施例,可以理解的是,上述實(shí)施例是示例性的,不能理解為對(duì)本申請(qǐng)的限制,本領(lǐng)域的普通技術(shù)人員在本申請(qǐng)的范圍內(nèi)可以對(duì)上述實(shí)施例進(jìn)行變化、修改、替換和變型。