本申請涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及一種網(wǎng)絡(luò)訪問請求控制方法和裝置。
背景技術(shù):
大型電商網(wǎng)絡(luò)的架構(gòu)是一個復(fù)雜的分布式網(wǎng)狀架構(gòu),日均訪問量上億次,每次用戶請求處理往往會依賴幾十,甚至上百個子系統(tǒng)。要保證整體系統(tǒng)穩(wěn)定,現(xiàn)有的做法都是盡量保證每個子系統(tǒng)的穩(wěn)定性,不同子系統(tǒng)采用各自方法對自身訪問入口、出口以及中間過程進(jìn)行控制處理,沒有一個統(tǒng)一的做法,流量增大后,很難保證所有子系統(tǒng)都是完全可靠的,并且這種方式也沒有考慮到分布式鏈路的特點(diǎn),不同子系統(tǒng)的保護(hù)措施甚至?xí)l(fā)系統(tǒng)之間的沖突。從控制手段上來看,對于突發(fā)流量(例如:爬蟲抓取等),現(xiàn)在的做法一般是在入口做全局流量限制,但實(shí)際情況是,入口應(yīng)用往往同時提供許多服務(wù)(最常見的情況是一個應(yīng)用處理多個統(tǒng)一資源定位符(Uniform Resource Locator;以下簡稱:URL)請求),每個服務(wù)的服務(wù)能力也是不同的,這樣的流量控制方法不具有針對性,存在實(shí)施方案不統(tǒng)一,控制粒度過粗的問題。
技術(shù)實(shí)現(xiàn)要素:
本申請的目的旨在至少在一定程度上解決相關(guān)技術(shù)中的技術(shù)問題之一。
為此,本申請的第一個目的在于提出一種網(wǎng)絡(luò)訪問請求控制方法。該方法可以根據(jù)網(wǎng)絡(luò)訪問請求所屬的類別對網(wǎng)絡(luò)訪問請求進(jìn)行控制,并可以針對分布式系統(tǒng)的不同層次采用不同流控方案,保障了大流量下,分布式系統(tǒng)的穩(wěn)定性和可靠性。
本申請的第二個目的在于提出一種網(wǎng)絡(luò)訪問請求控制裝置。
為了實(shí)現(xiàn)上述目的,本申請第一方面實(shí)施例的網(wǎng)絡(luò)訪問請求控制方法,包括:對網(wǎng)站接收的網(wǎng)絡(luò)訪問請求進(jìn)行識別,獲得所述網(wǎng)絡(luò)訪問請求所屬的類別;根據(jù)所述網(wǎng)絡(luò)訪問請求所屬的類別對所述網(wǎng)絡(luò)訪問請求進(jìn)行控制。
本申請實(shí)施例的網(wǎng)絡(luò)訪問請求控制方法,對網(wǎng)站接收的網(wǎng)絡(luò)訪問請求進(jìn)行識別,獲得上述網(wǎng)絡(luò)訪問請求所屬的類別,然后根據(jù)上述網(wǎng)絡(luò)訪問請求所屬的類別對上述網(wǎng)絡(luò)訪問請求進(jìn)行控制,從而可以根據(jù)網(wǎng)絡(luò)訪問請求所屬的類別對網(wǎng)絡(luò)訪問請求進(jìn)行控制,并可以針 對分布式系統(tǒng)的不同層次采用不同流控方案,保障了大流量下,分布式系統(tǒng)的穩(wěn)定性和可靠性。
為了實(shí)現(xiàn)上述目的,本申請第二方面實(shí)施例的網(wǎng)絡(luò)訪問請求控制裝置,包括:識別模塊,用于對網(wǎng)站接收的網(wǎng)絡(luò)訪問請求進(jìn)行識別,獲得所述網(wǎng)絡(luò)訪問請求所屬的類別;控制模塊,用于根據(jù)所述識別模塊獲得的所述網(wǎng)絡(luò)訪問請求所屬的類別對所述網(wǎng)絡(luò)訪問請求進(jìn)行控制。
本申請實(shí)施例的網(wǎng)絡(luò)訪問請求控制裝置,識別模塊對網(wǎng)站接收的網(wǎng)絡(luò)訪問請求進(jìn)行識別,獲得上述網(wǎng)絡(luò)訪問請求所屬的類別,然后控制模塊根據(jù)上述網(wǎng)絡(luò)訪問請求所屬的類別對上述網(wǎng)絡(luò)訪問請求進(jìn)行控制,從而可以根據(jù)網(wǎng)絡(luò)訪問請求所屬的類別對網(wǎng)絡(luò)訪問請求進(jìn)行控制,并可以針對分布式系統(tǒng)的不同層次采用不同流控方案,保障了大流量下,分布式系統(tǒng)的穩(wěn)定性和可靠性。
本申請附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本申請的實(shí)踐了解到。
附圖說明
本申請上述的和/或附加的方面和優(yōu)點(diǎn)從下面結(jié)合附圖對實(shí)施例的描述中將變得明顯和容易理解,其中:
圖1為本申請網(wǎng)絡(luò)訪問請求控制方法一個實(shí)施例的流程圖;
圖2為本申請網(wǎng)絡(luò)訪問請求控制方法另一個實(shí)施例的流程圖;
圖3為本申請網(wǎng)絡(luò)訪問請求控制方法再一個實(shí)施例的流程圖;
圖4為本申請網(wǎng)絡(luò)訪問請求控制方法再一個實(shí)施例的流程圖;
圖5為本申請網(wǎng)絡(luò)訪問請求控制方法再一個實(shí)施例的流程圖;
圖6為本申請網(wǎng)絡(luò)訪問請求控制方法的實(shí)現(xiàn)架構(gòu)一個實(shí)施例的示意圖;
圖7為本申請網(wǎng)絡(luò)訪問請求控制裝置一個實(shí)施例的結(jié)構(gòu)示意圖;
圖8為本申請網(wǎng)絡(luò)訪問請求控制裝置另一個實(shí)施例的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面詳細(xì)描述本申請的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實(shí)施例是示例性的,僅用于解釋本申請,而不能理解為對本申請的限制。相反,本申請的實(shí)施例包括落入所附加權(quán)利要求書的精神和內(nèi)涵范圍內(nèi)的所有變化、修改和等同物。
在開始介紹本申請?zhí)峁┑木W(wǎng)絡(luò)訪問請求控制方法之前,首先對網(wǎng)絡(luò)訪問請求進(jìn)行多維度劃分以及對分布式系統(tǒng)進(jìn)行分層。
經(jīng)過分析,大型電子商務(wù)網(wǎng)站(以下簡稱:電商網(wǎng)站)的網(wǎng)絡(luò)訪問請求可以按來源分為一般用戶訪問請求、爬蟲訪問請求和無效訪問請求。其中,用戶訪問請求是指正常的用戶請求,用戶訪問請求是電商網(wǎng)站的命脈;爬蟲訪問請求是指各大搜索引擎為了獲取電商網(wǎng)站的信息,不定時的發(fā)起的抓取網(wǎng)頁信息的網(wǎng)絡(luò)訪問請求,其抓取情況會影響電商網(wǎng)站在搜索引擎中的排名;無效訪問請求是指非用戶和非爬蟲的網(wǎng)絡(luò)訪問請求,該類網(wǎng)絡(luò)訪問請求往往是突發(fā)行為,并且對電商網(wǎng)站沒有意義。
電商網(wǎng)站分布式系統(tǒng)按照職責(zé)不同,可以分為物理層、域名系統(tǒng)(Domain Name System;以下簡稱:DNS)層、網(wǎng)頁(web)服務(wù)器層(包括開放式系統(tǒng)互聯(lián)(Open System Interconnection;以下簡稱:OSI網(wǎng)絡(luò)模型)、頁面應(yīng)用層和服務(wù)應(yīng)用層。特別地,相對于其他類別的網(wǎng)站,大型電商網(wǎng)站由大量的商業(yè)邏輯和業(yè)務(wù)邏輯組成,所以提供各種功能點(diǎn)的內(nèi)部服務(wù)應(yīng)用數(shù)量眾多,調(diào)用關(guān)系也交錯復(fù)雜。
圖1為本申請網(wǎng)絡(luò)訪問請求控制方法一個實(shí)施例的流程圖,如圖1所示,該網(wǎng)絡(luò)訪問請求控制方法可以包括:
步驟101,對網(wǎng)站接收的網(wǎng)絡(luò)訪問請求進(jìn)行識別,獲得上述網(wǎng)絡(luò)訪問請求所屬的類別。
步驟102,根據(jù)上述網(wǎng)絡(luò)訪問請求所屬的類別對上述網(wǎng)絡(luò)訪問請求進(jìn)行控制。
上述網(wǎng)絡(luò)訪問請求控制方法中,對網(wǎng)站接收的網(wǎng)絡(luò)訪問請求進(jìn)行識別,獲得上述網(wǎng)絡(luò)訪問請求所屬的類別,然后根據(jù)上述網(wǎng)絡(luò)訪問請求所屬的類別對上述網(wǎng)絡(luò)訪問請求進(jìn)行控制,從而可以根據(jù)網(wǎng)絡(luò)訪問請求所屬的類別對網(wǎng)絡(luò)訪問請求進(jìn)行控制,并可以針對分布式系統(tǒng)的不同層次采用不同流控方案,保障了大流量下,分布式系統(tǒng)的穩(wěn)定性和可靠性。
圖2為本申請網(wǎng)絡(luò)訪問請求控制方法另一個實(shí)施例的流程圖,本實(shí)施例中,上述網(wǎng)絡(luò)訪問請求所屬的類別可以為:用戶訪問請求;如圖2所示,步驟102可以包括:
步驟201,對上述網(wǎng)站接收的用戶訪問請求進(jìn)行域名解析,根據(jù)DNS層的限流策略返回服務(wù)集群的入口IP地址。
具體地,根據(jù)DNS層的限流策略返回服務(wù)集群的入口IP地址可以為:如果達(dá)到默認(rèn)服務(wù)集群的限流閾值,則根據(jù)優(yōu)先級返回除上述默認(rèn)服務(wù)集群之外的其他服務(wù)集群的入口IP地址;如果未達(dá)到默認(rèn)服務(wù)集群的限流閾值,則返回上述默認(rèn)服務(wù)集群的入口IP地址。
其中,默認(rèn)服務(wù)集群的限流閾值可以在具體實(shí)現(xiàn)時,根據(jù)系統(tǒng)性能和/或?qū)崿F(xiàn)需求等自行設(shè)定,本實(shí)施例對上述默認(rèn)服務(wù)集群的限流閾值的大小不作限定。
步驟202,將上述用戶訪問請求發(fā)送到上述入口IP地址對應(yīng)的服務(wù)集群的web服務(wù)器 層。
步驟203,判斷上述用戶訪問請求是否觸發(fā)web服務(wù)器層的限流策略。如果是,則執(zhí)行步驟213;如果否,則執(zhí)行步驟204。
步驟204,判斷上述用戶訪問請求是否觸發(fā)頁面應(yīng)用層的限流策略。如果是,則執(zhí)行步驟213;如果否,則執(zhí)行步驟205。
步驟205,判斷上述用戶訪問請求的內(nèi)部業(yè)務(wù)邏輯是否依賴其他服務(wù)。如果是,則執(zhí)行步驟206;如果否,則執(zhí)行步驟212。
步驟206,依次驗(yàn)證上述用戶訪問請求的內(nèi)部業(yè)務(wù)邏輯所依賴的服務(wù)的調(diào)用是否滿足降級策略。如果是,則執(zhí)行步驟207;如果否,則執(zhí)行步驟209。
步驟207,對滿足降級策略的服務(wù)進(jìn)行降級。
步驟208,當(dāng)降級的服務(wù)調(diào)用實(shí)現(xiàn)的是優(yōu)先級不高于預(yù)定閾值的業(yè)務(wù)邏輯時,直接完成上述降級的服務(wù)的調(diào)用;當(dāng)上述降級的服務(wù)調(diào)用實(shí)現(xiàn)的是優(yōu)先級高于預(yù)定閾值的業(yè)務(wù)邏輯時,對上述降級的服務(wù)的調(diào)用執(zhí)行限流回退邏輯,完成上述降級的服務(wù)的調(diào)用。
其中,上述預(yù)定閾值可以在具體實(shí)現(xiàn)時根據(jù)系統(tǒng)性能和/或?qū)崿F(xiàn)需求等自行設(shè)定,本實(shí)施例對上述預(yù)定閾值的大小不作限定。
其中,優(yōu)先級高于預(yù)定閾值的業(yè)務(wù)邏輯可以為核心業(yè)務(wù)邏輯;對上述降級的服務(wù)的調(diào)用執(zhí)行限流回退(fallback)邏輯可以為:發(fā)送回退通知,保障分布式事務(wù)等。
步驟209,判斷上述用戶訪問請求的內(nèi)部業(yè)務(wù)邏輯所依賴的服務(wù)的調(diào)用是否觸發(fā)服務(wù)應(yīng)用層的限流策略。如果是,則執(zhí)行步驟210;如果否,則執(zhí)行步驟211。
步驟210,執(zhí)行上述限流策略,對上述用戶訪問請求的內(nèi)部業(yè)務(wù)邏輯所依賴的服務(wù)的調(diào)用進(jìn)行限制。然后返回執(zhí)行步驟205。
步驟211,執(zhí)行上述用戶訪問請求的內(nèi)部業(yè)務(wù)邏輯所依賴的服務(wù)的內(nèi)部邏輯。然后返回執(zhí)行步驟206。
步驟212,繼續(xù)執(zhí)行頁面業(yè)務(wù)邏輯,返回上述用戶訪問請求所請求的頁面。結(jié)束本次流程。
步驟213,拒絕執(zhí)行上述用戶訪問請求,并提示已對上述用戶訪問請求進(jìn)行限流。結(jié)束本次流程。
具體地,提示已對上述用戶訪問請求進(jìn)行限流可以為:將上述用戶訪問請求跳轉(zhuǎn)到限流友好提示頁面。
進(jìn)一步地,步驟211之后,還可以等待上述用戶訪問請求的內(nèi)部業(yè)務(wù)邏輯所依賴的服務(wù)的調(diào)用的執(zhí)行,并判斷是否存在上述用戶訪問請求的內(nèi)部業(yè)務(wù)邏輯被所依賴的服務(wù)限流 的情況,如果存在,則執(zhí)行步驟208;如果不存在,則執(zhí)行步驟212。
圖3為本申請網(wǎng)絡(luò)訪問請求控制方法再一個實(shí)施例的流程圖,本實(shí)施例中,上述網(wǎng)絡(luò)訪問請求所屬的類別可以為:爬蟲訪問請求;如圖3所示,步驟102可以包括:
步驟301,判斷爬蟲是否遵守網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)(Robots Exclusion Protocol;以下簡稱:Robots)協(xié)議;如果是,則執(zhí)行步驟302;如果否,則執(zhí)行步驟307。
步驟302,接收上述爬蟲發(fā)起的文件獲取請求。
具體地,上述文件獲取請求可以為Robots.txt文件獲取請求。
步驟303,判斷web服務(wù)器層是否存在需動態(tài)配置的網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)協(xié)議文本(Robots.txt)文件;如果存在,則執(zhí)行步驟304;如果不存在,則執(zhí)行步驟305。
步驟304,向上述爬蟲返回根據(jù)動態(tài)配置生成的Robots.txt文件。然后,執(zhí)行步驟306。
步驟305,向上述爬蟲返回默認(rèn)的Robots.txt文件。然后,執(zhí)行步驟306。
步驟306,接收上述爬蟲根據(jù)上述Robots.txt文件發(fā)送的爬蟲訪問請求。然后執(zhí)行步驟308。
步驟307,接收上述爬蟲發(fā)送的爬蟲訪問請求。然后執(zhí)行步驟308。
步驟308,對上述爬蟲訪問請求進(jìn)行域名解析,根據(jù)DNS層的限流策略返回服務(wù)集群的入口IP地址。
具體地,根據(jù)DNS層的限流策略返回服務(wù)集群的入口IP地址可以為:如果達(dá)到默認(rèn)服務(wù)集群的限流閾值,則根據(jù)優(yōu)先級返回除上述默認(rèn)服務(wù)集群之外的其他服務(wù)集群的入口IP地址;如果未達(dá)到默認(rèn)服務(wù)集群的限流閾值,則返回上述默認(rèn)服務(wù)集群的入口IP地址。
其中,默認(rèn)服務(wù)集群的限流閾值可以在具體實(shí)現(xiàn)時,根據(jù)系統(tǒng)性能和/或?qū)崿F(xiàn)需求等自行設(shè)定,本實(shí)施例對上述默認(rèn)服務(wù)集群的限流閾值的大小不作限定。
步驟309,將上述爬蟲訪問請求發(fā)送到上述入口IP地址對應(yīng)的服務(wù)集群的web服務(wù)器層。
步驟310,判斷上述爬蟲訪問請求是否觸發(fā)web服務(wù)器網(wǎng)絡(luò)層的網(wǎng)絡(luò)爬蟲限流策略。如果否,則執(zhí)行步驟311;如果是,則執(zhí)行步驟314。
步驟311,獲取上述爬蟲訪問請求的用戶代理(user-agent)信息。
步驟312,根據(jù)上述用戶代理信息判斷上述爬蟲訪問請求是否觸發(fā)web服務(wù)器應(yīng)用層的限流策略;如果否,則執(zhí)行步驟313;如果是,則執(zhí)行步驟314。
步驟313,繼續(xù)對上述爬蟲訪問請求執(zhí)行與上述用戶訪問請求相同的限流策略。
具體地,繼續(xù)對上述爬蟲訪問請求執(zhí)行與上述用戶訪問請求相同的限流策略的過程可以參見本申請圖2所示實(shí)施例中步驟204~步驟213描述的過程,在此不再贅述。
步驟314,拒絕執(zhí)行上述爬蟲訪問請求,并提示已對上述爬蟲訪問請求進(jìn)行限流。
具體地,提示已對上述爬蟲訪問請求進(jìn)行限流可以為:將上述爬蟲訪問請求跳轉(zhuǎn)到限流友好提示頁面。
圖4為本申請網(wǎng)絡(luò)訪問請求控制方法再一個實(shí)施例的流程圖,本實(shí)施例中,上述網(wǎng)絡(luò)訪問請求所屬的類別可以為:無效訪問請求;如圖4所示,步驟102可以為:
步驟401,對上述網(wǎng)站接收的訪問請求進(jìn)行域名解析,根據(jù)DNS層的限流策略返回服務(wù)集群的入口IP地址。
具體地,根據(jù)DNS層的限流策略返回服務(wù)集群的入口IP地址可以為:如果達(dá)到默認(rèn)服務(wù)集群的限流閾值,則根據(jù)優(yōu)先級返回除上述默認(rèn)服務(wù)集群之外的其他服務(wù)集群的入口IP地址;如果未達(dá)到默認(rèn)服務(wù)集群的限流閾值,則返回上述默認(rèn)服務(wù)集群的入口IP地址。
其中,默認(rèn)服務(wù)集群的限流閾值可以在具體實(shí)現(xiàn)時,根據(jù)系統(tǒng)性能和/或?qū)崿F(xiàn)需求等自行設(shè)定,本實(shí)施例對上述默認(rèn)服務(wù)集群的限流閾值的大小不作限定。
步驟402,將上述訪問請求發(fā)送到上述入口IP地址對應(yīng)的服務(wù)集群的web服務(wù)器層,以使上述web服務(wù)器層獲取最新的無效訪問請求列表。
步驟403,判斷上述訪問請求是否存在上述無效訪問請求列表中。如果是,則執(zhí)行步驟404;如果否,則執(zhí)行步驟405。
步驟404,停止對上述訪問請求的處理。
步驟405,在頁面應(yīng)用層對上述訪問請求進(jìn)行處理之前,識別上述訪問請求所屬的網(wǎng)絡(luò)訪問請求是否為無效訪問請求。如果是,則執(zhí)行步驟404;如果否,則執(zhí)行步驟406。
步驟406,確定上述訪問請求所屬的網(wǎng)絡(luò)訪問請求為用戶訪問請求,執(zhí)行與上述用戶訪問請求相同的限流策略。后續(xù)執(zhí)行過程可以參見本申請圖2所示實(shí)施例步驟204~步驟213描述的過程,在此不再贅述。
圖2、圖3和圖4所示實(shí)施例分別從3個網(wǎng)絡(luò)訪問請求維度介紹了不同層次的靜態(tài)流控體系,主要通過動態(tài)配置各層的流控配置來避免預(yù)期出現(xiàn)問題,但實(shí)際場景中,可能出現(xiàn)網(wǎng)絡(luò)訪問請求突增超出預(yù)期的問題,所以,需要制定好預(yù)案配置,出現(xiàn)嚴(yán)重超出系統(tǒng)穩(wěn)定性閾值的情況時,動態(tài)調(diào)整限流策略。特別注意,對于大型電商網(wǎng)站來講,用戶訪問請求優(yōu)先級最高,爬蟲訪問請求次之。
圖5為本申請網(wǎng)絡(luò)訪問請求控制方法再一個實(shí)施例的流程圖,本實(shí)施例對限流策略的動態(tài)調(diào)整過程進(jìn)行介紹,本實(shí)施例介紹的限流策略的動態(tài)調(diào)整過程可以在步驟102之前,如圖5所示,可以包括:
步驟501,獲取服務(wù)集群當(dāng)前的整體訪問請求。
步驟502,判斷上述整體訪問請求是否大于集群穩(wěn)定性閾值。如果是,則執(zhí)行步驟503;如果否,則執(zhí)行步驟512。
其中,上述集群穩(wěn)定性閾值可以在具體實(shí)現(xiàn)時,根據(jù)系統(tǒng)性能和/或?qū)崿F(xiàn)需求等自行設(shè)定,本實(shí)施例對上述集群穩(wěn)定性閾值的大小不作限定。
步驟503,判斷是否可以將上述服務(wù)集群的網(wǎng)絡(luò)訪問請求跳轉(zhuǎn)到除上述服務(wù)集群之外的其他服務(wù)集群;如果是,則執(zhí)行步驟504;如果否,則執(zhí)行步驟505。
步驟504,根據(jù)優(yōu)先級將上述服務(wù)集群的網(wǎng)絡(luò)訪問請求跳轉(zhuǎn)到其他服務(wù)集群。然后執(zhí)行步驟501。
步驟505,判斷是否可以對上述服務(wù)集群進(jìn)行物理層擴(kuò)容。如果是,則執(zhí)行步驟506;如果否,則執(zhí)行步驟507。
步驟506,對上述服務(wù)集群進(jìn)行物理層擴(kuò)容,并更新集群穩(wěn)定性閾值。然后執(zhí)行步驟501。
步驟507,判斷是否可以進(jìn)行爬蟲訪問請求限制。如果是,則執(zhí)行步驟508;如果否,則執(zhí)行步驟509。
步驟508,根據(jù)爬蟲優(yōu)先級對爬蟲訪問請求進(jìn)行限制。然后執(zhí)行步驟501。
具體地,根據(jù)爬蟲優(yōu)先級對爬蟲訪問請求進(jìn)行限制可以為:根據(jù)爬蟲優(yōu)先級調(diào)整流控配置來限制爬蟲訪問請求,其中,爬蟲優(yōu)先級可以根據(jù)實(shí)際業(yè)務(wù)優(yōu)先級動態(tài)調(diào)整。
步驟509,判斷是否可以進(jìn)行用戶訪問請求限制;如果是,則執(zhí)行步驟510;如果否,則執(zhí)行步驟511。
步驟510,根據(jù)業(yè)務(wù)優(yōu)先級對用戶訪問請求進(jìn)行限制。然后執(zhí)行步驟501。
具體地,根據(jù)業(yè)務(wù)優(yōu)先級對用戶訪問請求進(jìn)行限制可以為:根據(jù)業(yè)務(wù)優(yōu)先級調(diào)整URL流控配置來限制用戶訪問請求。
步驟511,進(jìn)行人工干預(yù)處理。然后執(zhí)行步驟512。
步驟512,完成對限流策略的調(diào)整。
從圖2~圖5所示實(shí)施例提供的網(wǎng)絡(luò)訪問請求控制方法可以看出,本申請?zhí)峁┑木W(wǎng)絡(luò)訪問請求控制方法可以將網(wǎng)絡(luò)訪問請求劃分為不同維度,基于業(yè)務(wù)優(yōu)先級進(jìn)行細(xì)粒度流控,并可以針對分布式系統(tǒng)劃分層次,利用不同層次優(yōu)勢,采用不同技術(shù)方案進(jìn)行限流降級。另外,本申請采用統(tǒng)一平臺配置化管理,靜態(tài)設(shè)置,動態(tài)管理,動靜結(jié)合,保證了時效性和穩(wěn)定性。
本申請圖1~圖5所示實(shí)施例提供的網(wǎng)絡(luò)訪問請求控制方法可以通過圖6所示的系統(tǒng)架構(gòu)實(shí)現(xiàn),圖6為本申請網(wǎng)絡(luò)訪問請求控制方法的實(shí)現(xiàn)架構(gòu)一個實(shí)施例的示意圖,如圖6所 示,該系統(tǒng)架構(gòu)可以包括:配置平臺、配置數(shù)據(jù)交互中心、DNS服務(wù)器、CDN服務(wù)器、web服務(wù)器和應(yīng)用服務(wù)器。
其中,配置平臺的主要功能包括:第一,開發(fā)人員可以在該配置平臺上對分布式系統(tǒng)各層的網(wǎng)絡(luò)訪問請求進(jìn)行查看和動態(tài)修改限流策略(其中,動態(tài)修改限流策略的流程可以參見本申請圖5所示實(shí)施例的描述),然后實(shí)時與DNS服務(wù)器、web服務(wù)器和應(yīng)用服務(wù)器等進(jìn)行配置數(shù)據(jù)交換;第二、配置平臺結(jié)合網(wǎng)絡(luò)訪問請求識別子系統(tǒng),對子系統(tǒng)識別出來的無效訪問請求來源進(jìn)行記錄;第三、爬蟲配置功能,對網(wǎng)絡(luò)訪問請求識別子系統(tǒng)識別出的真正爬蟲訪問請求來源進(jìn)行配置;第四、限流配置功能,對URL和/或服務(wù)等根據(jù)每秒查詢率(Query Per Second;以下簡稱:QPS)和/或響應(yīng)時間(Response Time;以下簡稱:RT)進(jìn)行配置;
配置數(shù)據(jù)交互中心是配置平臺對外的統(tǒng)一出口,用于與部署在不同服務(wù)器上的流控插件進(jìn)行數(shù)據(jù)交互。
流控插件用于實(shí)現(xiàn)具體流控功判斷功能,各服務(wù)器通過流控插件與配置數(shù)據(jù)交互中心定時交互,獲取最新的限流策略。
CDN服務(wù)器用于存放靜態(tài)文件,以及限流后跳轉(zhuǎn)的用戶友好提示頁面。
圖7為本申請網(wǎng)絡(luò)訪問請求控制裝置一個實(shí)施例的結(jié)構(gòu)示意圖,本實(shí)施例中的網(wǎng)絡(luò)訪問請求控制裝置可以設(shè)置在網(wǎng)站中,實(shí)現(xiàn)本申請圖1所示實(shí)施例的流程,如圖7所示,該網(wǎng)絡(luò)訪問請求控制裝置可以包括:識別模塊71和控制模塊72;
其中,識別模塊71,用于對網(wǎng)站接收的網(wǎng)絡(luò)訪問請求進(jìn)行識別,獲得上述網(wǎng)絡(luò)訪問請求所屬的類別;在具體實(shí)現(xiàn)時,識別模塊71可以設(shè)置在圖6所示的系統(tǒng)架構(gòu)中的配置平臺上。
控制模塊72,用于根據(jù)識別模塊71獲得的上述網(wǎng)絡(luò)訪問請求所屬的類別對上述網(wǎng)絡(luò)訪問請求進(jìn)行控制。在具體實(shí)現(xiàn)時,控制模塊72可以作為圖6所示的系統(tǒng)架構(gòu)中的流控插件,設(shè)置在DNS服務(wù)器、web服務(wù)器和應(yīng)用服務(wù)器上。
上述網(wǎng)絡(luò)訪問請求控制裝置中,識別模塊71對網(wǎng)站接收的網(wǎng)絡(luò)訪問請求進(jìn)行識別,獲得上述網(wǎng)絡(luò)訪問請求所屬的類別,然后控制模塊72根據(jù)上述網(wǎng)絡(luò)訪問請求所屬的類別對上述網(wǎng)絡(luò)訪問請求進(jìn)行控制,從而可以根據(jù)網(wǎng)絡(luò)訪問請求所屬的類別對網(wǎng)絡(luò)訪問請求進(jìn)行控制,并可以針對分布式系統(tǒng)的不同層次采用不同流控方案,保障了大流量下,分布式系統(tǒng)的穩(wěn)定性和可靠性。
圖8為本申請網(wǎng)絡(luò)訪問請求控制裝置另一個實(shí)施例的結(jié)構(gòu)示意圖,與圖7所示的網(wǎng)絡(luò)訪問請求控制裝置相比,不同之處在于,本實(shí)施例的一種實(shí)現(xiàn)方式中,識別模塊71獲得的 上述網(wǎng)絡(luò)訪問請求所屬的類別可以為:用戶訪問請求;控制模塊72可以包括:解析子模塊721、發(fā)送子模塊722和執(zhí)行子模塊723;
其中,解析子模塊721,用于對上述網(wǎng)站接收的用戶訪問請求進(jìn)行域名解析,根據(jù)DNS層的限流策略返回服務(wù)集群的入口IP地址;其中,解析子模塊721,具體用于當(dāng)達(dá)到默認(rèn)服務(wù)集群的限流閾值時,根據(jù)優(yōu)先級返回除上述默認(rèn)服務(wù)集群之外的其他服務(wù)集群的入口IP地址;當(dāng)未達(dá)到默認(rèn)服務(wù)集群的限流閾值時,返回上述默認(rèn)服務(wù)集群的入口IP地址。其中,默認(rèn)服務(wù)集群的限流閾值可以在具體實(shí)現(xiàn)時,根據(jù)系統(tǒng)性能和/或?qū)崿F(xiàn)需求等自行設(shè)定,本實(shí)施例對上述默認(rèn)服務(wù)集群的限流閾值的大小不作限定。
發(fā)送子模塊722,用于將上述用戶訪問請求發(fā)送到上述入口IP地址對應(yīng)的服務(wù)集群的網(wǎng)頁服務(wù)器層;
執(zhí)行子模塊723,用于當(dāng)上述用戶訪問請求未觸發(fā)網(wǎng)頁服務(wù)器層的限流策略,并且未觸發(fā)頁面應(yīng)用層的限流策略,并且上述用戶訪問請求的內(nèi)部業(yè)務(wù)邏輯不依賴其他服務(wù)時,繼續(xù)執(zhí)行頁面業(yè)務(wù)邏輯,返回上述用戶訪問請求所請求的頁面。
進(jìn)一步地,控制模塊72還可以包括:
限流子模塊724,用于在發(fā)送子模塊722將上述用戶訪問請求發(fā)送到上述入口IP地址對應(yīng)的服務(wù)集群的網(wǎng)頁服務(wù)器層之后,如果上述用戶訪問請求觸發(fā)了網(wǎng)頁服務(wù)器層的限流策略,或者上述用戶訪問請求未觸發(fā)網(wǎng)頁服務(wù)器層的限流策略,但觸發(fā)了頁面應(yīng)用層的限流策略,則拒絕執(zhí)行上述用戶訪問請求,并提示已對上述用戶訪問請求進(jìn)行限流。
進(jìn)一步地,控制模塊72還可以包括:驗(yàn)證子模塊725、降級子模塊726和調(diào)用子模塊727;
驗(yàn)證子模塊725,用于當(dāng)上述用戶訪問請求的內(nèi)部業(yè)務(wù)邏輯依賴其他服務(wù)時,依次驗(yàn)證上述用戶訪問請求的內(nèi)部業(yè)務(wù)邏輯所依賴的服務(wù)的調(diào)用是否滿足降級策略;
降級子模塊726,用于當(dāng)上述用戶訪問請求的內(nèi)部業(yè)務(wù)邏輯所依賴的服務(wù)的調(diào)用滿足降級策略時,對滿足降級策略的服務(wù)進(jìn)行降級;
調(diào)用子模塊727,用于當(dāng)降級的服務(wù)調(diào)用實(shí)現(xiàn)的是優(yōu)先級不高于預(yù)定閾值的業(yè)務(wù)邏輯時,直接完成上述降級的服務(wù)的調(diào)用;當(dāng)上述降級的服務(wù)調(diào)用實(shí)現(xiàn)的是優(yōu)先級高于預(yù)定閾值的業(yè)務(wù)邏輯時,對上述降級的服務(wù)的調(diào)用執(zhí)行限流回退邏輯,完成上述降級的服務(wù)的調(diào)用。
其中,上述預(yù)定閾值可以在具體實(shí)現(xiàn)時根據(jù)系統(tǒng)性能和/或?qū)崿F(xiàn)需求等自行設(shè)定,本實(shí)施例對上述預(yù)定閾值的大小不作限定。
其中,優(yōu)先級高于預(yù)定閾值的業(yè)務(wù)邏輯可以為核心業(yè)務(wù)邏輯;對上述降級的服務(wù)的調(diào)用執(zhí)行限流回退(fallback)邏輯可以為:發(fā)送回退通知,保障分布式事務(wù)等。
進(jìn)一步地,控制模塊72還可以包括:判斷子模塊728;
判斷子模塊728,用于當(dāng)上述用戶訪問請求的內(nèi)部業(yè)務(wù)邏輯所依賴的服務(wù)的調(diào)用不滿足降級策略時,判斷上述用戶訪問請求的內(nèi)部業(yè)務(wù)邏輯所依賴的服務(wù)的調(diào)用是否觸發(fā)服務(wù)應(yīng)用層的限流策略;
限流子模塊724,用于當(dāng)上述用戶訪問請求的內(nèi)部業(yè)務(wù)邏輯所依賴的服務(wù)的調(diào)用觸發(fā)服務(wù)應(yīng)用層的限流策略時,執(zhí)行上述限流策略,對上述用戶訪問請求的內(nèi)部業(yè)務(wù)邏輯所依賴的服務(wù)的調(diào)用進(jìn)行限制;
執(zhí)行子模塊723,用于當(dāng)上述用戶訪問請求的內(nèi)部業(yè)務(wù)邏輯所依賴的服務(wù)的調(diào)用未觸發(fā)服務(wù)應(yīng)用層的限流策略時,執(zhí)行上述用戶訪問請求的內(nèi)部業(yè)務(wù)邏輯所依賴的服務(wù)的內(nèi)部邏輯。
本實(shí)施例的另一種實(shí)現(xiàn)方式中,識別模塊71獲得的網(wǎng)絡(luò)訪問請求所屬的類別包括:爬蟲訪問請求;控制模塊72可以包括:判斷子模塊728、接收子模塊729、解析子模塊721、發(fā)送子模塊722、獲取子模塊7210和限流子模塊724;
其中,判斷子模塊728,用于判斷爬蟲是否遵守網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)協(xié)議;
接收子模塊729,用于當(dāng)判斷子模塊728確定爬蟲不遵守網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)協(xié)議時,接收上述爬蟲發(fā)送的爬蟲訪問請求;
解析子模塊721,還用于對上述爬蟲訪問請求進(jìn)行域名解析,根據(jù)DNS層的限流策略返回服務(wù)集群的入口IP地址;
發(fā)送子模塊722,還用于將上述爬蟲訪問請求發(fā)送到上述入口IP地址對應(yīng)的服務(wù)集群的網(wǎng)頁服務(wù)器層;
判斷子模塊728,還用于判斷上述爬蟲訪問請求是否觸發(fā)網(wǎng)頁服務(wù)器網(wǎng)絡(luò)層的網(wǎng)絡(luò)爬蟲限流策略;
獲取子模塊7210,用于當(dāng)判斷子模塊728確定上述爬蟲訪問請求未觸發(fā)網(wǎng)頁服務(wù)器網(wǎng)絡(luò)層的網(wǎng)絡(luò)爬蟲限流策略時,獲取上述爬蟲訪問請求的用戶代理信息;
判斷子模塊728,還用于根據(jù)獲取子模塊7210獲取的用戶代理信息判斷上述爬蟲訪問請求是否觸發(fā)網(wǎng)頁服務(wù)器應(yīng)用層的限流策略;
限流子模塊724,用于當(dāng)判斷子模塊728確定上述爬蟲訪問請求未觸發(fā)網(wǎng)頁服務(wù)器應(yīng)用層的限流策略時,繼續(xù)對上述爬蟲訪問請求執(zhí)行與上述用戶訪問請求相同的限流策略。
進(jìn)一步地,接收子模塊729,還用于當(dāng)爬蟲遵守網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)協(xié)議時,接收上述爬蟲發(fā)起的文件獲取請求;
判斷子模塊728,還用于判斷網(wǎng)頁服務(wù)器層是否存在需動態(tài)配置的網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)協(xié)議文本文件;
發(fā)送子模塊722,還用于當(dāng)判斷子模塊728確定網(wǎng)頁服務(wù)器層存在需動態(tài)配置的網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)協(xié)議文本文件時,向上述爬蟲返回根據(jù)動態(tài)配置生成的網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)協(xié)議文本文件;當(dāng)判斷子模塊728確定網(wǎng)頁服務(wù)器層不存在需動態(tài)配置的網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)協(xié)議文本文件時,向上述爬蟲返回默認(rèn)的網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)協(xié)議文本文件;
接收子模塊729,還用于接收上述爬蟲根據(jù)上述網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)協(xié)議文本文件發(fā)送的爬蟲訪問請求。
本實(shí)現(xiàn)方式中,限流子模塊724,還用于當(dāng)上述爬蟲訪問請求觸發(fā)網(wǎng)頁服務(wù)器網(wǎng)絡(luò)層的網(wǎng)絡(luò)爬蟲限流策略時,拒絕執(zhí)行上述爬蟲訪問請求,并提示已對上述爬蟲訪問請求進(jìn)行限流。
限流子模塊724,還用于當(dāng)上述爬蟲訪問請求觸發(fā)網(wǎng)頁服務(wù)器應(yīng)用層的限流策略時,拒絕執(zhí)行上述爬蟲訪問請求,并提示已對上述爬蟲訪問請求進(jìn)行限流。
本實(shí)施例的再一種實(shí)現(xiàn)方式中,識別模塊71獲得的網(wǎng)絡(luò)訪問請求所屬的類別包括:無效訪問請求;
解析子模塊721,還用于對上述網(wǎng)站接收的訪問請求進(jìn)行域名解析,根據(jù)DNS層的限流策略返回服務(wù)集群的入口IP地址;
發(fā)送子模塊722,還用于將上述訪問請求發(fā)送到上述入口IP地址對應(yīng)的服務(wù)集群的網(wǎng)頁服務(wù)器層,以使上述網(wǎng)頁服務(wù)器層獲取最新的無效訪問請求列表;
控制模塊72還可以包括:判斷子模塊728和限流子模塊724;
其中,判斷子模塊728,用于判斷上述訪問請求是否存在上述無效訪問請求列表中;
限流子模塊724,用于當(dāng)判斷子模塊728確定上述訪問請求存在上述無效網(wǎng)絡(luò)訪問請求列表中時,停止對上述訪問請求的處理。
識別模塊71,還用于當(dāng)判斷子模塊728確定上述訪問請求不存在于上述無效訪問請求列表中時,在頁面應(yīng)用層對上述訪問請求進(jìn)行處理之前,識別上述訪問請求所屬的網(wǎng)絡(luò)訪問請求是否為無效訪問請求;
限流子模塊724,還用于當(dāng)識別模塊71識別上述訪問請求所屬的網(wǎng)絡(luò)訪問請求為無效訪問請求時,停止對上述訪問請求的處理;以及當(dāng)識別模塊71識別上述訪問請求所屬的網(wǎng)絡(luò)訪問請求不是無效訪問請求時,確定上述訪問請求所屬的網(wǎng)絡(luò)訪問請求為用戶訪問請求,執(zhí)行與上述用戶訪問請求相同的限流策略。
進(jìn)一步地,上述網(wǎng)絡(luò)訪問請求控制裝置還可以包括:獲取模塊73、判斷模塊74和調(diào)整模塊75;在具體實(shí)現(xiàn)時,上述獲取模塊73、判斷模塊74和調(diào)整模塊75可以設(shè)置在圖6所示的系統(tǒng)架構(gòu)中的配置平臺上。
獲取模塊73,用于獲取服務(wù)集群當(dāng)前的整體訪問請求;
判斷模塊74,用于判斷獲取模塊73獲取的整體訪問請求是否大于集群穩(wěn)定性閾值;其中,上述集群穩(wěn)定性閾值可以在具體實(shí)現(xiàn)時,根據(jù)系統(tǒng)性能和/或?qū)崿F(xiàn)需求等自行設(shè)定, 本實(shí)施例對上述集群穩(wěn)定性閾值的大小不作限定。
調(diào)整模塊75,用于當(dāng)獲取模塊73獲取的整體訪問請求不大于集群穩(wěn)定性閾值時,完成對限流策略的調(diào)整。
進(jìn)一步地,上述網(wǎng)絡(luò)訪問請求控制裝置還可以包括:跳轉(zhuǎn)模塊76、擴(kuò)容模塊77和限制模塊78;在具體實(shí)現(xiàn)時,上述跳轉(zhuǎn)模塊76、擴(kuò)容模塊77和限制模塊78可以設(shè)置在圖6所示的系統(tǒng)架構(gòu)中的配置平臺上。
其中,判斷模塊74,還用于當(dāng)獲取模塊73獲取的整體訪問請求大于集群穩(wěn)定性閾值時,判斷是否可以將上述服務(wù)集群的網(wǎng)絡(luò)訪問請求跳轉(zhuǎn)到除上述服務(wù)集群之外的其他服務(wù)集群;
跳轉(zhuǎn)模塊76,用于當(dāng)判斷模塊74確定可以將上述服務(wù)集群的網(wǎng)絡(luò)訪問請求跳轉(zhuǎn)到除上述服務(wù)集群之外的其他服務(wù)集群時,根據(jù)優(yōu)先級將上述服務(wù)集群的網(wǎng)絡(luò)訪問請求跳轉(zhuǎn)到其他服務(wù)集群。
判斷模塊74,還用于當(dāng)確定不可以將上述服務(wù)集群的網(wǎng)絡(luò)訪問請求跳轉(zhuǎn)到除上述服務(wù)集群之外的其他服務(wù)集群時,判斷是否可以對上述服務(wù)集群進(jìn)行物理層擴(kuò)容;
擴(kuò)容模塊77,還用于當(dāng)判斷模塊74確定可以對上述服務(wù)集群進(jìn)行物理層擴(kuò)容時,對上述服務(wù)集群進(jìn)行物理層擴(kuò)容,并更新集群穩(wěn)定性閾值。
判斷模塊74,還用于當(dāng)確定不可以對所述服務(wù)集群進(jìn)行物理層擴(kuò)容時,判斷是否可以進(jìn)行爬蟲訪問請求限制;
限制模塊78,用于當(dāng)判斷模塊74確定可以進(jìn)行爬蟲訪問請求限制時,根據(jù)爬蟲優(yōu)先級對爬蟲訪問請求進(jìn)行限制。
判斷模塊74,還用于當(dāng)確定不可以進(jìn)行爬蟲訪問請求限制時,判斷是否可以進(jìn)行用戶訪問請求限制;
限制模塊78,還用于當(dāng)判斷模塊74確定可以進(jìn)行用戶訪問請求限制時,根據(jù)業(yè)務(wù)優(yōu)先級對用戶訪問請求進(jìn)行限制。
上述網(wǎng)絡(luò)訪問請求控制裝置可以將網(wǎng)絡(luò)訪問請求劃分為不同維度,基于業(yè)務(wù)優(yōu)先級進(jìn)行細(xì)粒度流控,并可以針對分布式系統(tǒng)劃分層次,利用不同層次優(yōu)勢,采用不同技術(shù)方案進(jìn)行限流降級。另外,上述網(wǎng)絡(luò)訪問請求控制裝置采用統(tǒng)一平臺配置化管理,靜態(tài)設(shè)置,動態(tài)管理,動靜結(jié)合,保證了時效性和穩(wěn)定性。
需要說明的是,在本申請的描述中,術(shù)語“第一”、“第二”等僅用于描述目的,而不能理解為指示或暗示相對重要性。此外,在本申請的描述中,除非另有說明,“多個”的含義是兩個或兩個以上。
流程圖中或在此以其他方式描述的任何過程或方法描述可以被理解為,表示包括一個或更多個用于實(shí)現(xiàn)特定邏輯功能或過程的步驟的可執(zhí)行指令的代碼的模塊、片段或部分,并且本申請的優(yōu)選實(shí)施方式的范圍包括另外的實(shí)現(xiàn),其中可以不按所示出或討論的順序, 包括根據(jù)所涉及的功能按基本同時的方式或按相反的順序,來執(zhí)行功能,這應(yīng)被本申請的實(shí)施例所屬技術(shù)領(lǐng)域的技術(shù)人員所理解。
應(yīng)當(dāng)理解,本申請的各部分可以用硬件、軟件、固件或它們的組合來實(shí)現(xiàn)。在上述實(shí)施方式中,多個步驟或方法可以用存儲在存儲器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來實(shí)現(xiàn)。例如,如果用硬件來實(shí)現(xiàn),和在另一實(shí)施方式中一樣,可用本領(lǐng)域公知的下列技術(shù)中的任一項或他們的組合來實(shí)現(xiàn):具有用于對數(shù)據(jù)信號實(shí)現(xiàn)邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(Programmable Gate Array;以下簡稱:PGA),現(xiàn)場可編程門陣列(Field Programmable Gate Array;以下簡稱:FPGA)等。
本技術(shù)領(lǐng)域的普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法攜帶的全部或部分步驟是可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲于一種計算機(jī)可讀存儲介質(zhì)中,該程序在執(zhí)行時,包括方法實(shí)施例的步驟之一或其組合。
此外,本申請各個實(shí)施例中的各功能模塊可以集成在一個處理模塊中,也可以是各個模塊單獨(dú)物理存在,也可以兩個或兩個以上模塊集成在一個模塊中。上述集成的模塊既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的形式實(shí)現(xiàn)。所述集成的模塊如果以軟件功能模塊的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時,也可以存儲在一個計算機(jī)可讀取存儲介質(zhì)中。
上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。
在本說明書的描述中,參考術(shù)語“一個實(shí)施例”、“一些實(shí)施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)包含于本申請的至少一個實(shí)施例或示例中。在本說明書中,對上述術(shù)語的示意性表述不一定指的是相同的實(shí)施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)可以在任何的一個或多個實(shí)施例或示例中以合適的方式結(jié)合。
盡管上面已經(jīng)示出和描述了本申請的實(shí)施例,可以理解的是,上述實(shí)施例是示例性的,不能理解為對本申請的限制,本領(lǐng)域的普通技術(shù)人員在本申請的范圍內(nèi)可以對上述實(shí)施例進(jìn)行變化、修改、替換和變型。