本申請涉及計算機應(yīng)用技術(shù)領(lǐng)域,具體而言,涉及處理數(shù)據(jù)請求的方法、裝置及服務(wù)集群。
背景技術(shù):
隨著互聯(lián)網(wǎng)的逐漸發(fā)展,上網(wǎng)的成本和門檻變的越來越低,網(wǎng)站的流量隨之快速的增長,網(wǎng)站的服務(wù)器經(jīng)常會遇到在某天的某個時刻流量突然增大的情況例如在秒殺開始前一刻,突然增大的流量會導(dǎo)致后臺服務(wù)器處理不及時,部分請求用戶會出現(xiàn)超時或者失敗等情況,無法成功獲取數(shù)據(jù)會導(dǎo)致頁面上出現(xiàn)空白一片的情況,嚴重影響用戶體驗。如果不及時降低服務(wù)器的壓力,甚至?xí)斐烧麄€接口掛掉,所有的用戶請求失敗的嚴重事故。
一種相關(guān)技術(shù)是通過增加服務(wù)器機器數(shù)量來提高后臺的處理能力。但是流量峰值通常都是在特定的時候和特定的場景下出現(xiàn),如果按照最大流量的標準配置服務(wù)器,會導(dǎo)致平時大量服務(wù)器的閑置。
還有一種相關(guān)技術(shù)是通常是在后臺緩存一份兜底數(shù)據(jù),然后在redis(是一個開源的使用ansic語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、key-value數(shù)據(jù)庫)等緩存中設(shè)置一個開關(guān),服務(wù)器每隔一段時間去獲取一下開關(guān),管理員一旦發(fā)現(xiàn)流量超過閾值后打開降級開關(guān),所有用戶的請求直接返回兜底數(shù)據(jù),不再進行后臺的邏輯處理,降低對服務(wù)器的壓力。但是,這種方案是將降級開關(guān)放在緩存中,每隔一段時間去獲取一次緩存,因此開關(guān)為開標識之后需要隔一段時間才能生效,其次,一旦開關(guān)為開標識之后,所有的用戶都只能得到兜底數(shù)據(jù),不能根據(jù)流量和服務(wù)器情況靈活配置。另外,如果后臺服務(wù)掛了,用戶仍然可能獲取不到數(shù)據(jù),出現(xiàn)空白頁面的情況,因此降級不實時,不夠靈活,可靠性也不高。
技術(shù)實現(xiàn)要素:
本申請公開處理數(shù)據(jù)請求的方法,能夠?qū)崿F(xiàn)后臺服務(wù)動態(tài)降級,能夠根據(jù)流量和服務(wù)器情況靈活配置。
本發(fā)明的其他特性和優(yōu)點將通過下面的詳細描述變得顯然,或部分地通過本發(fā)明的實踐而習(xí)得。
根據(jù)本發(fā)明的第二方面,提供一種處理數(shù)據(jù)請求的方法,包括:
http和反向代理服務(wù)器接收客戶端的http訪問請求,根據(jù)所述http訪問請求獲取訪問信息,向服務(wù)集群發(fā)送包含所述訪問信息的數(shù)據(jù)請求;
所述服務(wù)集群用于獲取包含訪問信息的數(shù)據(jù)請求,根據(jù)所述訪問信息和降級比例開關(guān)確定是否需要對所述數(shù)據(jù)請求進行降級,若需要降級,則從兜底緩存中獲取請求結(jié)果,若不需要降級,則根據(jù)所述數(shù)據(jù)請求獲取實時數(shù)據(jù)。
根據(jù)一些實施例,所述http和反向代理服務(wù)器根據(jù)所述http訪問請求獲取訪問信息包括:
所述http和反向代理服務(wù)器獲取所述http訪問請求的用戶標識信息、以及獲取接收所述http訪問請求的時間戳。
根據(jù)一些實施例,所述方法還包括:
通知服務(wù)器監(jiān)聽用于存儲所述降級比例開關(guān)的redis緩存是否有修改,若監(jiān)聽到所述redis緩存有修改,向所述服務(wù)集群發(fā)送通知消息;
所述服務(wù)集接收到所述通知消息時從所述redis緩存中讀取所述降級比例開關(guān),將所述降級比例開關(guān)存放到所述服務(wù)集群的本地緩存中。
根據(jù)一些實施例,所述方法還包括:所述http和反向代理服務(wù)器根據(jù)配置信息獲取靜態(tài)兜底開關(guān),若所述靜態(tài)兜底開關(guān)為關(guān)標識則根據(jù)管理員預(yù)先配置的靜態(tài)兜底數(shù)據(jù)獲取請求結(jié)果;
若所述靜態(tài)兜底開關(guān)為開標識則根據(jù)所述http訪問請求獲取訪問信息,向所述服務(wù)集群發(fā)送包含所述訪問信息的數(shù)據(jù)請求,并將所述服務(wù)集群返回的請求結(jié)果存儲到所述靜態(tài)兜底數(shù)據(jù)中。
根據(jù)一些實施例,所述方法還包括,若所述客戶端向所述http和反向代理服務(wù)器請求所述http訪問請求失敗,則根據(jù)本地緩存獲取請求結(jié)果;若向所述http和反向代理服務(wù)器請求所述http訪問請求成功,將獲取的請求結(jié)果存儲到所述本地緩存中。
根據(jù)一些實施例,所述http和反向代理服務(wù)器為nginx集群。
根據(jù)本發(fā)明的第二方面,提供一種處理數(shù)據(jù)請求的方法,包括:
獲取包含訪問信息的數(shù)據(jù)請求;
根據(jù)所述訪問信息和降級比例開關(guān)確定是否需要對所述數(shù)據(jù)請求進行降級;
若需要降級,則從兜底緩存中獲取請求結(jié)果,若不需要降級,則根據(jù)所述數(shù)據(jù)請求獲取實時數(shù)據(jù)。
根據(jù)一些實施例,所述降級比例開關(guān)包括元素為開標識或關(guān)標識的數(shù)組。
根據(jù)一些實施例,根據(jù)所述訪問信息和降級比例開關(guān)確定是否需要對所述數(shù)據(jù)請求進行降級包括:
根據(jù)所述訪問信息進行hash運算得到hash值;
以所述hash值為索引從所述數(shù)組中獲取對應(yīng)的元素;
若獲取的元素為開標識,則確定不需要對所述數(shù)據(jù)請求進行降級,若獲取的元素為關(guān)標識,則確定需要對所述數(shù)據(jù)請求進行降級。
根據(jù)一些實施例,所述訪問信息包括用戶標識信息和/或訪問時間戳。
根據(jù)一些實施例:
當通知服務(wù)器監(jiān)聽到用于存儲所述降級比例開關(guān)的redis緩存有修改時發(fā)送通知消息;
接收所述通知服務(wù)器發(fā)送的通知消息時,從所述redis緩存中讀取所述降級比例開關(guān),將所述降級比例開關(guān)存放到本地緩存中。
根據(jù)一些實施例,接收所述通知服務(wù)器發(fā)送的通知消息包括:接收所述通知服務(wù)器通過zookeeper發(fā)送的通知消息。
根據(jù)一些實施例,http和反向代理服務(wù)器用于根據(jù)客戶端的http訪問請求獲取所述訪問信息;
獲取包含訪問信息的數(shù)據(jù)請求包括:從所述http和反向代理服務(wù)器接收包含所述訪問信息的數(shù)據(jù)請求。
根據(jù)一些實施例,所述http和反向代理服務(wù)器還用于根據(jù)配置信息獲取靜態(tài)兜底開關(guān),若所述靜態(tài)兜底開關(guān)為關(guān)標識則根據(jù)管理員預(yù)先配置的靜態(tài)兜底數(shù)據(jù)獲取請求結(jié)果,不向服務(wù)集群發(fā)送所述包含所述訪問信息的數(shù)據(jù)請求。
根據(jù)一些實施例,所述http和反向代理服務(wù)器為nginx集群。
需要說明的是,nginx集群接受客戶端的請求之后,可以使用服務(wù)器集群的實時數(shù)據(jù)或者管理員預(yù)先配置好的靜態(tài)兜底數(shù)據(jù)。
根據(jù)一些實施例,所述客戶端用于:若向所述http和反向代理服務(wù)器請求所述http訪問請求失敗,則根據(jù)本地緩存獲取請求結(jié)果;若向所述http和反向代理服務(wù)器請求所述http訪問請求成功,則將獲取的請求結(jié)果存儲到所述本地緩存中。
根據(jù)本發(fā)明的第三方面,提供一種處理數(shù)據(jù)請求的裝置,其包括:
請求獲取單元,用于獲取包含訪問信息的數(shù)據(jù)請求;
降級判定單元,用于根據(jù)所述訪問信息和降級比例開關(guān)確定是否需要對所述數(shù)據(jù)請求進行降級;
請求處理單元,用于若需要降級,則從兜底緩存中獲取請求結(jié)果,若不需要降級,則根據(jù)所述數(shù)據(jù)請求獲取實時數(shù)據(jù)。
根據(jù)一些實施例,所述降級比例開關(guān)包括元素為開標識或關(guān)標識的數(shù)組。
根據(jù)一些實施例,所述降級判定單元用于:
根據(jù)所述訪問信息進行hash運算得到hash值;
以所述hash值為索引從所述數(shù)組中獲取對應(yīng)的元素;
若獲取的元素為開標識,則確定不需要對所述數(shù)據(jù)請求進行降級,若獲取的元素為關(guān)標識,則確定需要對所述數(shù)據(jù)請求進行降級。
根據(jù)一些實施例,所述訪問信息包括用戶標識信息和/或訪問時間戳。
根據(jù)一些實施例:
當通知服務(wù)器監(jiān)聽到用于存儲所述降級比例開關(guān)的redis緩存有修改時發(fā)送通知消息;
所述裝置還包括開關(guān)更新單元,用于接收所述通知服務(wù)器發(fā)送的通知消息時,從所述redis緩存中讀取所述降級比例開關(guān),將所述降級比例開關(guān)存放到本地緩存中。
根據(jù)一些實施例,所述開關(guān)更新單元用于:接收所述通知服務(wù)器通過zookeeper發(fā)送的通知消息。
根據(jù)一些實施例,http和反向代理服務(wù)器用于根據(jù)客戶端的http訪問請求獲取所述訪問信息;
所述請求獲取單元用于:從所述http和反向代理服務(wù)器接收包含所述訪問信息的數(shù)據(jù)請求。
根據(jù)一些實施例,所述http和反向代理服務(wù)器還用于根據(jù)配置信息獲取靜態(tài)兜底開關(guān),若所述靜態(tài)兜底開關(guān)為關(guān)標識則根據(jù)管理員預(yù)先配置的靜態(tài)兜底數(shù)據(jù)獲取請求結(jié)果,不向服務(wù)集群發(fā)送所述包含所述訪問信息的數(shù)據(jù)請求。
根據(jù)一些實施例,所述http和反向代理服務(wù)器為nginx集群。
根據(jù)一些實施例,所述客戶端用于:若向所述http和反向代理服務(wù)器請求所述http訪問請求失敗,則根據(jù)本地緩存獲取請求結(jié)果;若向所述http和反向代理服務(wù)器請求所述http訪問請求成功,則將獲取的請求結(jié)果存儲到所述本地緩存中。
根據(jù)本發(fā)明的第四方面,提供一種處理數(shù)據(jù)請求的系統(tǒng),包括http和反向代理服務(wù)器、以及服務(wù)集群,其特征在于:
所述http和反向代理服務(wù)器用于接收http訪問請求,根據(jù)所述http訪問請求獲取訪問信息,向所述服務(wù)集群發(fā)送包含所述訪問信息的數(shù)據(jù)請求;
所述服務(wù)集群用于獲取包含訪問信息的數(shù)據(jù)請求,根據(jù)所述訪問信息和降級比例開關(guān)確定是否需要對所述數(shù)據(jù)請求進行降級,若需要降級,則從兜底緩存中獲取請求結(jié)果,若不需要降級,則根據(jù)所述數(shù)據(jù)請求獲取實時數(shù)據(jù)。
根據(jù)一些實施例,所述http和反向代理服務(wù)器根據(jù)所述http訪問請求獲取訪問信息包括:
所述http和反向代理服務(wù)器獲取所述http訪問請求的用戶標識信息、以及獲取接收所述http訪問請求的時間戳。
根據(jù)一些實施例,所述系統(tǒng)還包括通知服務(wù)器;
所述通知服務(wù)器用于:監(jiān)聽用于存儲所述降級比例開關(guān)的redis緩存是否有修改,若監(jiān)聽到所述redis緩存有修改,向所述服務(wù)集群發(fā)送通知消息;
所述服務(wù)集群用于:接收到所述通知消息時從所述redis緩存中讀取所述降級比例開關(guān),將所述降級比例開關(guān)存放到所述服務(wù)集群的本地緩存中。
根據(jù)一些實施例,所述http和反向代理服務(wù)器還用于根據(jù)配置信息獲取靜態(tài)兜底開關(guān),若所述靜態(tài)兜底開關(guān)為關(guān)標識則根據(jù)管理員預(yù)先配置的靜態(tài)兜底數(shù)據(jù)獲取請求結(jié)果;
若所述靜態(tài)兜底開關(guān)為開標識則根據(jù)所述http訪問請求獲取訪問信息,向所述服務(wù)集群發(fā)送包含所述訪問信息的數(shù)據(jù)請求,并將所述服務(wù)集群返回的請求結(jié)果存儲到所述靜態(tài)兜底數(shù)據(jù)中。
根據(jù)一些實施例,所述系統(tǒng)還包括客戶端,所述客戶端用于,若向所述http和反向代理服務(wù)器請求所述http訪問請求失敗,則根據(jù)本地緩存獲取請求結(jié)果;若向所述http和反向代理服務(wù)器請求所述http訪問請求成功,將獲取的請求結(jié)果存儲到所述本地緩存中。
根據(jù)一些實施例,所述http和反向代理服務(wù)器為nginx集群。
根據(jù)本發(fā)明的第五方面,提供一種服務(wù)集群,包括:處理器;存儲器,存儲用于處理器控制如第一方任一項所述操作的指令。
根據(jù)本發(fā)明的第六方面,提供一種計算機可讀存儲介質(zhì),其上存儲有計算機程序,該程序被處理器執(zhí)行時實現(xiàn)如如第一方任一項所述操作的步驟。
本申請的實施例提供的技術(shù)方案可以包括以下有益效果:
本申請的實施例提供的技術(shù)方案能夠?qū)崿F(xiàn)后臺服務(wù)動態(tài)降級,能夠根據(jù)流量和服務(wù)器情況靈活配置。應(yīng)當理解的是,以上的一般描述和后文的細節(jié)描述僅是示例性的,并不能限制本發(fā)明。
附圖說明
通過參照附圖詳細描述其示例實施例,本發(fā)明的上述和其它特征及優(yōu)點將變得更加明顯。
圖1示出了根據(jù)本發(fā)明一實施例的處理數(shù)據(jù)請求的方法;
圖2示出了根據(jù)本發(fā)明一實施例的處理數(shù)據(jù)請求的方法;
圖3示出了根據(jù)本發(fā)明另一實施例的處理數(shù)據(jù)請求的方法;
圖4示出了根據(jù)本發(fā)明另一實施例的處理數(shù)據(jù)請求的系統(tǒng)示意圖;
圖5示出了根據(jù)本發(fā)明一實施例的處理數(shù)據(jù)請求的系統(tǒng)中客戶端處理羅輯流程圖;
圖6示出了根據(jù)本發(fā)明一實施例的處理數(shù)據(jù)請求的系統(tǒng)中http和反向代理服務(wù)器處理羅輯流程圖;
圖7示出了根據(jù)本發(fā)明一實施例的處理數(shù)據(jù)請求的系統(tǒng)中通知服務(wù)器處理羅輯流程圖;
圖8示出了根據(jù)本發(fā)明一實施例的處理數(shù)據(jù)請求的系統(tǒng)中服務(wù)集群處理羅輯流程圖;
圖9示出了根據(jù)本發(fā)明一實施例的處理數(shù)據(jù)請求的系統(tǒng)中服務(wù)集群進行hash運算過程示意圖;
圖10示出了根據(jù)本發(fā)明一實施例的處理數(shù)據(jù)請求的裝置的框圖;
圖11示出了根據(jù)本發(fā)明另一實施例的處理數(shù)據(jù)請求的裝置的框圖;
圖12示出了根據(jù)本發(fā)明一實施例的服務(wù)集群。
具體實施方式
現(xiàn)在將參考附圖更全面地描述示例實施例。然而,示例實施例能夠以多種形式實施,且不應(yīng)被理解為限于在此闡述的實施例;相反,提供這些實施例使得本發(fā)明將全面和完整,并將示例實施例的構(gòu)思全面地傳達給本領(lǐng)域的技術(shù)人員。在圖中相同的附圖標記表示相同或類似的部分,因而將省略對它們的重復(fù)描述。
此外,所描述的特征、結(jié)構(gòu)或特性可以以任何合適的方式結(jié)合在一個或更多實施例中。在下面的描述中,提供許多具體細節(jié)從而給出對本發(fā)明的實施例的充分理解。然而,本領(lǐng)域技術(shù)人員將意識到,可以實踐本發(fā)明的技術(shù)方案而沒有特定細節(jié)中的一個或更多,或者可以采用其它的方法、組元、裝置、步驟等。在其它情況下,不詳細示出或描述公知方法、裝置、實現(xiàn)或者操作以避免模糊本發(fā)明的各方面。
附圖中所示的方框圖僅僅是功能實體,不一定必須與物理上獨立的實體相對應(yīng)。即,可以采用軟件形式來實現(xiàn)這些功能實體,或在一個或多個硬件模塊或集成電路中實現(xiàn)這些功能實體,或在不同網(wǎng)絡(luò)和/或處理器裝置和/或微控制器裝置中實現(xiàn)這些功能實體。
附圖中所示的流程圖僅是示例性說明,不是必須包括所有的內(nèi)容和操作/步驟,也不是必須按所描述的順序執(zhí)行。例如,有的操作/步驟還可以分解,而有的操作/步驟可以合并或部分合并,因此實際執(zhí)行的順序有可能根據(jù)實際情況改變。
圖1示出了根據(jù)本發(fā)明一實施例的處理數(shù)據(jù)請求的方法,如圖1所示,本實施例所述的處理數(shù)據(jù)請求的方法包括:
在步驟s110中,http和反向代理服務(wù)器接收客戶端的http訪問請求,根據(jù)所述http訪問請求獲取訪問信息,向服務(wù)集群發(fā)送包含所述訪問信息的數(shù)據(jù)請求。
其中,所述http和反向代理服務(wù)器包括但不限于nginx集群。
在步驟s120中,所述服務(wù)集群用于獲取包含訪問信息的數(shù)據(jù)請求,根據(jù)所述訪問信息和降級比例開關(guān)確定是否需要對所述數(shù)據(jù)請求進行降級,若需要降級,則從兜底緩存中獲取請求結(jié)果,若不需要降級,則根據(jù)所述數(shù)據(jù)請求獲取實時數(shù)據(jù)。
其中,所述http和反向代理服務(wù)器根據(jù)所述http訪問請求獲取訪問信息可包括:所述http和反向代理服務(wù)器獲取所述http訪問請求的用戶標識信息、以及獲取接收所述http訪問請求的時間戳。
所述通知服務(wù)器還可監(jiān)聽用于存儲所述降級比例開關(guān)的redis緩存是否有修改,若監(jiān)聽到所述redis緩存有修改,向所述服務(wù)集群發(fā)送通知消息;所述服務(wù)集接收到所述通知消息時從所述redis緩存中讀取所述降級比例開關(guān),將所述降級比例開關(guān)存放到所述服務(wù)集群的本地緩存中。
另外,所述http和反向代理服務(wù)器根據(jù)配置信息獲取靜態(tài)兜底開關(guān),若所述靜態(tài)兜底開關(guān)為關(guān)標識則根據(jù)管理員預(yù)先配置的靜態(tài)兜底數(shù)據(jù)獲取請求結(jié)果,若所述靜態(tài)兜底開關(guān)為開標識則根據(jù)所述http訪問請求獲取訪問信息,向所述服務(wù)集群發(fā)送包含所述訪問信息的數(shù)據(jù)請求,并將所述服務(wù)集群返回的請求結(jié)果存儲到所述靜態(tài)兜底數(shù)據(jù)中。
需要說明提,若所述客戶端向所述http和反向代理服務(wù)器請求所述http訪問請求失敗,還可根據(jù)本地緩存獲取請求結(jié)果;若向所述http和反向代理服務(wù)器請求所述http訪問請求成功,則可將獲取的請求結(jié)果存儲到所述本地緩存中。
圖2示出了根據(jù)本發(fā)明一實施例的處理數(shù)據(jù)請求的方法,本實施例可適用于服務(wù)集群處理http和反向代理服務(wù)器轉(zhuǎn)發(fā)的客戶端http請求的情況,方法的執(zhí)行主體為服務(wù)集群。如圖2所示,本實施例所述的處理數(shù)據(jù)請求的方法包括:
在步驟s210中,獲取包含訪問信息的數(shù)據(jù)請求。
例如所述訪問信息為用戶標識信息、或者訪問時間戳、或者為用戶標識信息和訪問時間戳。
在步驟s220中,根據(jù)所述訪問信息和降級比例開關(guān)確定是否需要對所述數(shù)據(jù)請求進行降級。
所述降級比例開關(guān)是管理員設(shè)置的開關(guān),可用以控制允許當前用戶訪問時獲取實時數(shù)據(jù)的比例。
為了應(yīng)對在秒殺促銷等特殊時間流量突然增大導(dǎo)致后臺服務(wù)器掛掉、對請求處理不及時、或返回頁面開天窗等情況,相關(guān)技術(shù)通過管理員設(shè)置流量閾值開關(guān),管理員一旦發(fā)現(xiàn)流量超過該閾值后打開降級開關(guān),所有用戶的請求直接返回兜底數(shù)據(jù)。
而本實施例的技術(shù)方案與上述相關(guān)技術(shù)相比,在開關(guān)設(shè)置和降級處理上均有區(qū)別。本實施例是通過降級比例開關(guān),以動態(tài)靈活地控制后臺服務(wù)的降級比例。
所述降級比例開關(guān)需要滿足管理員根據(jù)預(yù)期流量靈活設(shè)置降級比例的需求,其具體形式本實施例對此不作限定。例如元素為開標識或關(guān)標識的數(shù)組,例如將降級比例開關(guān)設(shè)置為元素為0或1的數(shù)組,將0定義為關(guān)標識,表示需要降級,將1定義為開標識表示不需要降級。
例如,根據(jù)所述訪問信息進行hash運算得到hash值,將所述hash值與所述降級比例開關(guān)進行比對確定是否需要對所述數(shù)據(jù)請求進行降級。
在步驟s230中,若需要降級,則從兜底緩存中獲取請求結(jié)果,若不需要降級,則根據(jù)所述數(shù)據(jù)請求獲取實時數(shù)據(jù)。
本實施例通過在服務(wù)集群端獲取到數(shù)據(jù)請求之后,根據(jù)訪問信息和降級比例開關(guān)確定是否需要對所述數(shù)據(jù)請求進行降級,從而選擇從兜底緩存中獲取請求結(jié)果或根據(jù)所述數(shù)據(jù)請求獲取實時數(shù)據(jù),能夠?qū)崿F(xiàn)后臺服務(wù)動態(tài)降級,能夠根據(jù)流量和服務(wù)器情況靈活配置。
圖3示出了根據(jù)本發(fā)明另一實施例的處理數(shù)據(jù)請求的方法,本實施例可適用于服務(wù)集群處理http和反向代理服務(wù)器轉(zhuǎn)發(fā)的客戶端http請求的情況,方法的執(zhí)行主體為服務(wù)集群。如圖3所示,本實施例所述的處理數(shù)據(jù)請求的方法包括:
在步驟s310中,當接收到通知服務(wù)器發(fā)送的通知消息時,從redis緩存中讀取降級比例開關(guān),將所述降級比例開關(guān)存放到本地緩存中。
本實施例設(shè)置了通知服務(wù)器進行通知處理,當通知服務(wù)器監(jiān)聽到用于存儲所述降級比例開關(guān)的redis緩存有修改時發(fā)送通知消息。
因此,服務(wù)集群接收所述通知服務(wù)器發(fā)送的通知消息時,從所述redis緩存中讀取所述降級比例開關(guān),將所述降級比例開關(guān)存放到本地緩存中。
需要說明的是,通知服務(wù)器向服務(wù)集群發(fā)送通知消息可具體通過zookeeper來發(fā)送。
在步驟s320中,獲取包含訪問信息的數(shù)據(jù)請求。
對于大型電子商務(wù)網(wǎng)站來說,一般在服務(wù)集群與客戶端之間,會設(shè)置http和反向代理服務(wù)器,例如nginx集群、apach、或haproxy等。
因此,通常是所述http和反向代理服務(wù)器接收客戶端發(fā)送的http訪問請求,根據(jù)所述http訪問請求獲取訪問信息,向服務(wù)集群發(fā)送包含所述訪問信息的數(shù)據(jù)請求。
在步驟s330中,從所述本地緩存中讀取所述降級比例開關(guān)。
需要說明的是,因為通過步驟s210中,降級比例開關(guān)一旦有修改,服務(wù)集群能及時將最新的降級比例開關(guān)更新到本地緩存中,因此服務(wù)集群的本地緩存中的降級比例開關(guān)均為最新的降級比例開關(guān)。
在步驟s340中,根據(jù)所述訪問信息以及所述降級比例開關(guān)確定是否需要對所述數(shù)據(jù)請求進行降級。
在步驟s350中,若需要降級,則從兜底緩存中獲取請求結(jié)果,若不需要降級,則根據(jù)所述數(shù)據(jù)請求獲取實時數(shù)據(jù)。
進一步地,為了避免服務(wù)集群罷工出現(xiàn)客戶端返回結(jié)果而出現(xiàn)空白頁的情況,所述http和反向代理服務(wù)器還可根據(jù)配置信息獲取靜態(tài)兜底開關(guān),若所述靜態(tài)兜底開關(guān)為關(guān)標識則根據(jù)管理員預(yù)先配置的靜態(tài)兜底數(shù)據(jù)獲取請求結(jié)果,不向服務(wù)集群發(fā)送所述包含所述訪問信息的數(shù)據(jù)請求。
更進一步地,為了避免客戶端向所述http和反向代理服務(wù)器請求失敗而出面空白頁的情況,所述客戶端還可用于:若向所述http和反向代理服務(wù)器請求所述http訪問請求失敗,則根據(jù)本地緩存獲取請求結(jié)果;若向所述http和反向代理服務(wù)器請求所述http訪問請求成功,則將獲取的請求結(jié)果存儲到所述本地緩存中。
本實施例在前述實施例的基礎(chǔ)之上,進一步采用通知的方法,一旦管理員修改了階級比例開關(guān),則通知服務(wù)器從redis緩存中讀取降級比例開關(guān),能保證降級處理的實時性。
圖4示出了根據(jù)本發(fā)明另一實施例的處理數(shù)據(jù)請求的系統(tǒng)示意圖,如圖4所示,對后臺系統(tǒng)來說,該處理數(shù)據(jù)請求的系統(tǒng)包括http和反向代理服務(wù)器(例如nginx集群410,圖4中以nginx集群作為示例)、服務(wù)集群420、以及通知服務(wù)器430。
所述nginx集群410用于接收http訪問請求,根據(jù)所述http訪問請求獲取訪問信息(例如獲取所述http訪問請求的用戶標識信息、以及獲取接收所述http訪問請求的時間戳),向所述服務(wù)集群420發(fā)送包含所述訪問信息的數(shù)據(jù)請求;
所述服務(wù)集群420用于獲取包含訪問信息的數(shù)據(jù)請求,根據(jù)所述訪問信息和降級比例開關(guān)確定是否需要對所述數(shù)據(jù)請求進行降級,若需要降級,則從兜底緩存中獲取請求結(jié)果,若不需要降級,則根據(jù)所述數(shù)據(jù)請求獲取實時數(shù)據(jù)。
所述通知服務(wù)器430用于:監(jiān)聽用于存儲所述降級比例開關(guān)的redis緩存是否有修改,若監(jiān)聽到所述redis緩存有修改,向所述服務(wù)集群420發(fā)送通知消息。
所述服務(wù)集群420還用于:接收到所述通知消息時從所述redis緩存中讀取所述降級比例開關(guān),將所述降級比例開關(guān)存放到所述服務(wù)集群420的本地緩存中。
進一步地,進一步地,為了避免服務(wù)集群420罷工出現(xiàn)客戶端440返回結(jié)果而出現(xiàn)空白頁的情況,所述nginx集群410還用于根據(jù)配置信息獲取靜態(tài)兜底開關(guān),若所述靜態(tài)兜底開關(guān)為關(guān)標識則根據(jù)管理員預(yù)先配置的靜態(tài)兜底數(shù)據(jù)獲取請求結(jié)果。
若所述靜態(tài)兜底開關(guān)為開標識則根據(jù)所述http訪問請求獲取訪問信息,向所述服務(wù)集群420發(fā)送包含所述訪問信息的數(shù)據(jù)請求,并將所述服務(wù)集群420返回的請求結(jié)果存儲到所述靜態(tài)兜底數(shù)據(jù)中。
進一步地,為了避免客戶端440向所述http和反向代理服務(wù)器請求失敗而出面空白頁的情況,所述客戶端440還可進一步改進,例如若向所述nginx集群410請求所述http訪問請求失敗,則根據(jù)本地緩存獲取請求結(jié)果;若向所述nginx集群410請求所述http訪問請求成功,將獲取的請求結(jié)果存儲到所述本地緩存中。
本面通過邏輯流程圖分別描述系統(tǒng)中各模塊的處理邏輯。
圖5示出了根據(jù)本發(fā)明一實施例的處理數(shù)據(jù)請求的系統(tǒng)中客戶端處理羅輯流程圖,如圖5所示,本實施例所述的客戶端處理羅輯包括:
在步驟s510中,客戶端向后臺請求數(shù)據(jù)。
在步驟s520中,判斷請求數(shù)據(jù)是否成功,若是則執(zhí)行步驟s540,否則執(zhí)行步驟s530。
即如果請求成功則將請求結(jié)果緩存在本地,如果請求失敗則使用上次請求成功的本地緩存。
在步驟s530中,使用上次緩存結(jié)果,執(zhí)行步驟s550。
在步驟s540中,將本次成功請求結(jié)果緩存到本地,執(zhí)行步驟s550。
在步驟s550中,進行展示,結(jié)束。
圖6示出了根據(jù)本發(fā)明一實施例的處理數(shù)據(jù)請求的系統(tǒng)中http和反向代理服務(wù)器處理羅輯流程圖,如圖6所示,本實施例所述的http和反向代理服務(wù)器處理羅輯包括:
在步驟s610中,判斷是否使用靜態(tài)兜底,若是則執(zhí)行步驟s630,否則執(zhí)行步驟s620。
讀取nginx配置,判斷是否需要使用靜態(tài)兜底數(shù)據(jù),如果靜態(tài)兜底開關(guān)已經(jīng)打開則直接讀取靜態(tài)兜底數(shù)據(jù),靜態(tài)兜底數(shù)據(jù)是管理員預(yù)先配置好的數(shù)據(jù),一旦服務(wù)集群不可用,則使用靜態(tài)兜底數(shù)據(jù),否則向服務(wù)集群請求數(shù)據(jù),返回結(jié)果
在步驟s620中,請求服務(wù)集群,執(zhí)行步驟s640。
在步驟s630中,使用靜態(tài)兜底數(shù)據(jù),執(zhí)行步驟s640。
在步驟s640中,返回結(jié)果。
圖7示出了根據(jù)本發(fā)明一實施例的處理數(shù)據(jù)請求的系統(tǒng)中通知服務(wù)器處理羅輯流程圖,如圖7所示,本實施例所述的通知服務(wù)器處理羅輯包括:
在步驟s710中,將降級比例開關(guān)寫入redis。
即管理員修改降級比例開關(guān)后,將降級比例開關(guān)寫入redis中。
在步驟s720中,監(jiān)聽開關(guān)是否有變化,若是則執(zhí)行步驟s630,否則重復(fù)執(zhí)行本步驟s720。
通知中心監(jiān)控到降級比例開關(guān)有變化,通知中心通過zookeeper通知服務(wù)集群更新降級比例開關(guān)。
在步驟s730中,通知服務(wù)集群降級比例開關(guān)變化。
在步驟s740中,服務(wù)集群從redis中讀取降級比例開關(guān)存入本地緩存。
服務(wù)集群收到通知中心的更新,則從redis中讀取降級比例開關(guān),放入服務(wù)器本地緩存。
圖8示出了根據(jù)本發(fā)明一實施例的處理數(shù)據(jù)請求的系統(tǒng)中服務(wù)集群處理羅輯流程圖,如圖8所示,本實施例所述的服務(wù)集群處處理羅輯包括:
在步驟s810中,接收客戶端請求。
在步驟s820中,將用戶uuid和時間戳進行hash運算。
例如,每個客戶端都有一個唯一標識符uuid,將uuid和當前系統(tǒng)時間合在一起進行hash,hash值的范圍為0到100。
在步驟s830中,將hash運算結(jié)果和降級比例開關(guān)進行匹配運算。
例如將hash計算得到的值和系統(tǒng)本地緩存的信息進行對比,判斷是否需要降級,如果需要降級,則獲取兜底緩存中的數(shù)據(jù);如果不需要降級,則請求服務(wù)計算模塊獲取實時數(shù)據(jù),并將成功獲取到的數(shù)據(jù)放入兜底緩存中,作為最新的動態(tài)兜底數(shù)據(jù)。
在步驟s840中,確定是否需要降級,若是則執(zhí)行步驟s770,否則重復(fù)執(zhí)行本步驟s850。
在步驟s850中,獲取實時數(shù)據(jù)。
在步驟s860中,將實時數(shù)據(jù)放入兜底緩存。
在步驟s870中,獲取兜底緩存數(shù)據(jù)。
在步驟s880中,返回結(jié)果。
圖9示出了一種處理數(shù)據(jù)請求的系統(tǒng)中服務(wù)集群進行hash運算過程示意圖,用戶的每個請求都會帶上uuid,uuid是用戶的唯一標示,每個用戶擁有一個唯一的標識,ttime表示服務(wù)器的當前時間,將兩者合在一起進行hash得到hash值,并將得到的hash值和降級比例開關(guān)對比,降級比例開關(guān)為下標0到99的數(shù)組,數(shù)組的值為0和1,0表示獲取實時數(shù)據(jù),1表示使用動態(tài)兜底數(shù)據(jù)。例如0b0a2e7e152410eae7a09276211bdde3e141df5d表示用戶的uuid,1488857570表示當前服務(wù)器的unix時間戳,兩者相加并hash得到的值為2,從開關(guān)數(shù)組中獲取下標為2的值,為1則表示需要使用兜底數(shù)據(jù)。
上述實施例的技術(shù)方案的示例具有如下特點:
首先,采用三級兜底的技術(shù)方案:后臺動態(tài)降級,后臺靜態(tài)降級和客戶端緩存降級,每一級對用戶體驗的友好程度依次降低,可靠性依次增高,降級優(yōu)先級依次下降。
前端采用本地緩存的兜底方式,后臺采用動態(tài)兜底和靜態(tài)兜底相結(jié)合的方式,三級兜底保證了服務(wù)的高可用性,避免了用戶出現(xiàn)空白頁面的情況。
其次,通過將用戶uuid和時間戳結(jié)合,并用哈希函數(shù)映射到0到99范圍內(nèi),可以動態(tài)靈活控制后臺服務(wù)的降級比例。實現(xiàn)了后臺服務(wù)的動態(tài)降級,管理員可以靈活控制服務(wù)的降級比例,在降低服務(wù)器壓力的同時保證了用戶的體驗。
另外,采用zookeeper通知的方法,一旦用戶修改了降級比例開關(guān),則通知服務(wù)器從redis緩存中讀取降級比例開關(guān),保證了兜底開關(guān)的實時性和統(tǒng)一性。
圖10示出了根據(jù)本發(fā)明一實施例的處理數(shù)據(jù)請求的裝置的框圖,如圖10所示,本實施例所述的處理數(shù)據(jù)請求的裝置包括請求獲取單元1010、降級判定單元1020、以及請求處理單元1030。
該請求獲取單元1010,用于獲取包含訪問信息的數(shù)據(jù)請求;
該降級判定單元1020,用于根據(jù)所述訪問信息和降級比例開關(guān)確定是否需要對所述數(shù)據(jù)請求進行降級;
該請求處理單元1030,用于若需要降級,則從兜底緩存中獲取請求結(jié)果,若不需要降級,則根據(jù)所述數(shù)據(jù)請求獲取實時數(shù)據(jù)。
根據(jù)一些實施例,所述降級比例開關(guān)包括元素為開標識或關(guān)標識的數(shù)組。
根據(jù)一些實施例,所述降級判定單元1020用于:
根據(jù)所述訪問信息進行hash運算得到hash值;
以所述hash值為索引從所述數(shù)組中獲取對應(yīng)的元素;
若獲取的元素為開標識,則確定不需要對所述數(shù)據(jù)請求進行降級,若獲取的元素為關(guān)標識,則確定需要對所述數(shù)據(jù)請求進行降級。
根據(jù)一些實施例,所述訪問信息包括用戶標識信息和/或訪問時間戳。
關(guān)于上述實施例中的裝置,其中各個單元執(zhí)行操作的具體方式已經(jīng)在有關(guān)該方法的實施例中進行了詳細描述,此處將不做詳細闡述說明。
本實施例提供的處理數(shù)據(jù)請求的裝置可執(zhí)行本發(fā)明方法實施例所提供的處理數(shù)據(jù)請求的方法,具備執(zhí)行方法相應(yīng)的功能模塊和有益效果。
圖11示出了根據(jù)本發(fā)明另一實施例的處理數(shù)據(jù)請求的裝置的框圖,如圖11所示,本實施例所述的處理數(shù)據(jù)請求的裝置包括:請求獲取單元1110、開關(guān)更新單元1120、降級判定單元1130、以及請求處理單元1140。
該請求獲取單元1110被配置為,用于獲取包含訪問信息的數(shù)據(jù)請求。
該開關(guān)更新單元1120被配置為,用于接收所述通知服務(wù)器發(fā)送的通知消息時,從所述redis緩存中讀取所述降級比例開關(guān),將所述降級比例開關(guān)存放到本地緩存中。
該降級判定單元1130被配置為,用于根據(jù)所述訪問信息和降級比例開關(guān)確定是否需要對所述數(shù)據(jù)請求進行降級。
該請求處理單元1140被配置為,用于若需要降級,則從兜底緩存中獲取請求結(jié)果,若不需要降級,則根據(jù)所述數(shù)據(jù)請求獲取實時數(shù)據(jù)。
需要說明的是,當通知服務(wù)器監(jiān)聽到用于存儲所述降級比例開關(guān)的redis緩存有修改時發(fā)送通知消息。
根據(jù)一些實施例,所述降級比例開關(guān)包括元素為開標識或關(guān)標識的數(shù)組。
根據(jù)一些實施例,所述降級判定單元1130用于:
根據(jù)所述訪問信息進行hash運算得到hash值;
以所述hash值為索引從所述數(shù)組中獲取對應(yīng)的元素;
若獲取的元素為開標識,則確定不需要對所述數(shù)據(jù)請求進行降級,若獲取的元素為關(guān)標識,則確定需要對所述數(shù)據(jù)請求進行降級。
根據(jù)一些實施例,所述訪問信息包括用戶標識信息和/或訪問時間戳。
根據(jù)一些實施例,所述開關(guān)更新單元1120用于:接收所述通知服務(wù)器通過zookeeper發(fā)送的通知消息。
根據(jù)一些實施例,http和反向代理服務(wù)器用于根據(jù)客戶端的http訪問請求獲取所述訪問信息;
所述請求獲取單元1110用于:從所述http和反向代理服務(wù)器接收包含所述訪問信息的數(shù)據(jù)請求。
根據(jù)一些實施例,所述http和反向代理服務(wù)器還用于根據(jù)配置信息獲取靜態(tài)兜底開關(guān),若所述靜態(tài)兜底開關(guān)為關(guān)標識則根據(jù)管理員預(yù)先配置的靜態(tài)兜底數(shù)據(jù)獲取請求結(jié)果,不向服務(wù)集群發(fā)送所述包含所述訪問信息的數(shù)據(jù)請求。
根據(jù)一些實施例,所述http和反向代理服務(wù)器為nginx集群。
根據(jù)一些實施例,所述客戶端用于:若向所述http和反向代理服務(wù)器請求所述http訪問請求失敗,則根據(jù)本地緩存獲取請求結(jié)果;若向所述http和反向代理服務(wù)器請求所述http訪問請求成功,則將獲取的請求結(jié)果存儲到所述本地緩存中。
本實施例提供的處理數(shù)據(jù)請求的裝置可執(zhí)行本發(fā)明方法實施例所提供的處理數(shù)據(jù)請求的方法,具備執(zhí)行方法相應(yīng)的功能模塊和有益效果。
圖12示出了根據(jù)本發(fā)明一實施例的服務(wù)集群,如圖12所示,服務(wù)集群1200可包括處理器1210、存儲器1220、發(fā)射器1230及接收器1240。
存儲器1220可存儲用于處理器1210控制操作處理的指令。存儲器1220可包括易失性或非易失性存儲器,如靜態(tài)隨機存取存儲器(sram)、電可擦除可編程只讀存儲器(eeprom)、可擦除可編程只讀存儲器(eprom)、可編程只讀存儲器(prom)、只讀存儲器(rom)等,本發(fā)明對此沒有限制。
處理器1210可調(diào)用存儲器1220中存儲的指令控制相關(guān)操作。根據(jù)一實施例,存儲器1220存儲用于處理器1210控制以下操作的指令:
獲取包含訪問信息的數(shù)據(jù)請求;
根據(jù)所述訪問信息和降級比例開關(guān)確定是否需要對所述數(shù)據(jù)請求進行降級;
若需要降級,則從兜底緩存中獲取請求結(jié)果,若不需要降級,則根據(jù)所述數(shù)據(jù)請求獲取實時數(shù)據(jù)。
易于理解,存儲器1220還可存儲用于處理器1210控制根據(jù)本發(fā)明實施例的其他操作的指令,這里不再贅述。
處理器1210還可控制發(fā)射器1230和接收器1240進行信號收發(fā)等。
通過以上的詳細描述,本領(lǐng)域的技術(shù)人員易于理解,根據(jù)本發(fā)明實施例的系統(tǒng)和方法具有以下優(yōu)點中的一個或多個。
根據(jù)本發(fā)明的實施例,所述降級比例開關(guān)包括元素為開標識或關(guān)標識的數(shù)組。
根據(jù)本發(fā)明的一些實施例,根據(jù)所述訪問信息和降級比例開關(guān)確定是否需要對所述數(shù)據(jù)請求進行降級包括:
根據(jù)所述訪問信息進行hash運算得到hash值;
以所述hash值為索引從所述數(shù)組中獲取對應(yīng)的元素;
若獲取的元素為開標識,則確定不需要對所述數(shù)據(jù)請求進行降級,若獲取的元素為關(guān)標識,則確定需要對所述數(shù)據(jù)請求進行降級。
根據(jù)本發(fā)明的一些實施例,當通知服務(wù)器監(jiān)聽到用于存儲所述降級比例開關(guān)的redis緩存有修改時發(fā)送通知消息;
接收所述通知服務(wù)器發(fā)送的通知消息時,從所述redis緩存中讀取所述降級比例開關(guān),將所述降級比例開關(guān)存放到本地緩存中。
根據(jù)一些實施例,本發(fā)明還提供一種非臨時性計算機可讀存儲介質(zhì),例如包括指令的存儲器,上述指令可由裝置的處理器執(zhí)行以完成上述方法。例如,非臨時性計算機可讀存儲介質(zhì)可以是rom、隨機存取存儲器(ram)、cd-rom、磁帶、軟盤和光數(shù)據(jù)存儲設(shè)備等。當存儲介質(zhì)中的指令由終端的處理器執(zhí)行時,使得終端能夠執(zhí)行下述方法:獲取包含訪問信息的數(shù)據(jù)請求;根據(jù)所述訪問信息和降級比例開關(guān)確定是否需要對所述數(shù)據(jù)請求進行降級;
若需要降級,則從兜底緩存中獲取請求結(jié)果,若不需要降級,則根據(jù)所述數(shù)據(jù)請求獲取實時數(shù)據(jù)。
本領(lǐng)域技術(shù)人員可以理解,附圖只是示例實施例的示意圖,附圖中的模塊或流程并不一定是實施本發(fā)明所必須的,因此不能用于限制本發(fā)明的保護范圍。
本領(lǐng)域技術(shù)人員可以理解上述各模塊可以按照實施例的描述分布于裝置中,也可以進行相應(yīng)變化唯一不同于本實施例的一個或多個裝置中。上述實施例的模塊可以合并為一個模塊,也可以進一步拆分成多個子模塊。
以上具體地示出和描述了本發(fā)明的示例性實施例。應(yīng)該理解,本發(fā)明不限于所公開的實施例,相反,本發(fā)明意圖涵蓋包含在所附權(quán)利要求的精神和范圍內(nèi)的各種修改和等效布置。