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