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