本發(fā)明涉及分布式緩存領(lǐng)域技術(shù)領(lǐng)域,特別是涉及一種分布式緩存更新方法及緩存更新系統(tǒng)。
背景技術(shù):
在高并發(fā)環(huán)境下,為了應(yīng)對(duì)海量數(shù)據(jù)與用戶請(qǐng)求帶來的挑戰(zhàn),解決大規(guī)模數(shù)據(jù)訪問帶來的網(wǎng)絡(luò)瓶頸問題,分布式緩存技術(shù)應(yīng)運(yùn)而生。分布式緩存是指緩存數(shù)據(jù)部署在由多個(gè)服務(wù)器組成的集群中,以集群方式提供緩存服務(wù)。應(yīng)用分布式緩存技術(shù)需要設(shè)計(jì)緩存更新策略,以提高緩存命中率,減輕后端服務(wù)壓力。但是,隨著業(yè)務(wù)的發(fā)展,跨機(jī)房網(wǎng)絡(luò)通訊越來越頻繁,在促進(jìn)網(wǎng)絡(luò)間數(shù)據(jù)交換的同時(shí),也帶來了系統(tǒng)可靠性的問題,因此,加強(qiáng)分布式緩存更新系統(tǒng)的可靠性變得尤為重要。
目前,常用的分布式緩存更新系統(tǒng)是基于主動(dòng)更新策略的。具體做法是:首先,緩存更新系統(tǒng)接收消息中間件或者客戶端發(fā)送的緩存更新通知,即消息通知;其次,根據(jù)消息通知組裝緩存數(shù)據(jù);最后,跨機(jī)房更新所有緩存服務(wù)器?,F(xiàn)有的分布式緩存更新方法的整個(gè)執(zhí)行過程是在同一個(gè)服務(wù)器中完成的,各個(gè)步驟按照順序依次執(zhí)行,任何一個(gè)步驟的失敗,將導(dǎo)致整個(gè)更新過程失敗,整個(gè)更新過程需要再次啟動(dòng)。比如:組裝緩存數(shù)據(jù)失敗,那么無論更新緩存服務(wù)器的步驟是否成功執(zhí)行,由于用來更新緩存服務(wù)器的緩存數(shù)據(jù)未被成功組裝,從而,導(dǎo)致更新緩存服務(wù)器是無效更新,整個(gè)更新過程需要再次啟動(dòng)。并且,每個(gè)步驟的執(zhí)行都有可能由于網(wǎng)絡(luò)環(huán)境的變化而導(dǎo)致失敗,例如:接收消息通知時(shí),由于系統(tǒng)重啟升級(jí),導(dǎo)致消息通知未被成功接收,或者,成功接收消息通知,但沒成功完成消息通知的處理。組裝緩存數(shù)據(jù)時(shí),由于依賴服務(wù)出現(xiàn)異常,導(dǎo)致組裝緩存數(shù)據(jù)失??;更新緩存服務(wù)器時(shí),由于網(wǎng)絡(luò)抖動(dòng)或緩存服務(wù)出現(xiàn)異常,導(dǎo)致更新緩存服務(wù)器失敗。
可見,在分布式緩存更新系統(tǒng)的更新過程中,每個(gè)步驟的執(zhí)行都有可能由于網(wǎng)絡(luò)環(huán)境的變化而失敗,并且由于分布式緩存更新方法的整個(gè)執(zhí)行過程是在同一個(gè)服務(wù)器中完成的,各個(gè)步驟相互關(guān)聯(lián),一個(gè)步驟的失敗將導(dǎo)致整個(gè)更新過程的失敗,從而導(dǎo)致分布式緩存更新系統(tǒng)的可靠性較低。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例的目的在于提供一種分布式緩存更新方法及緩存更新系統(tǒng),以提高分布式緩存更新系統(tǒng)的可靠性。
為達(dá)到上述目的,本發(fā)明實(shí)施例提供了一種分布式緩存更新方法,應(yīng)用于緩存更新系統(tǒng),所述緩存更新系統(tǒng)包括:數(shù)據(jù)組裝服務(wù)器、數(shù)據(jù)緩存區(qū)、緩存更新服務(wù)器和緩存存儲(chǔ)服務(wù)器;所述方法包括:
所述數(shù)據(jù)組裝服務(wù)器獲得待緩存數(shù)據(jù);按照預(yù)設(shè)規(guī)則將所述待緩存數(shù)據(jù)組裝為緩存包;將所述緩存包發(fā)送給所述數(shù)據(jù)緩存區(qū)進(jìn)行存儲(chǔ);
所述緩存更新服務(wù)器從所述數(shù)據(jù)緩存區(qū)中獲得所述緩存包;根據(jù)所述緩存包對(duì)與該緩存更新服務(wù)器位于同一機(jī)房的緩存存儲(chǔ)服務(wù)器進(jìn)行緩存更新。
可選的,所述按照預(yù)設(shè)規(guī)則將所述待緩存數(shù)據(jù)組裝為緩存包,包括:
對(duì)獲得的待緩存數(shù)據(jù)進(jìn)行過濾;
按照預(yù)設(shè)規(guī)則將過濾后的待緩存數(shù)據(jù)組裝為緩存包。
可選的,所述按照預(yù)設(shè)規(guī)則將所述待緩存數(shù)據(jù)組裝為緩存包,包括:
判斷獲得的待緩存數(shù)據(jù)的大小是否大于預(yù)設(shè)閾值;
如果是,將所述待緩存數(shù)據(jù)拆分為均不大于預(yù)設(shè)閾值的數(shù)據(jù);
按照預(yù)設(shè)規(guī)則將拆分后的數(shù)據(jù)分別組裝為緩存包。
可選的,所述緩存更新服務(wù)器從所述數(shù)據(jù)緩存區(qū)中獲得所述緩存包,包括:
所述緩存更新服務(wù)器從所述數(shù)據(jù)緩存區(qū)中以pull方式獲得所述緩存包。
可選的,緩存包中包含有機(jī)房標(biāo)識(shí)信息;所述根據(jù)所述緩存包對(duì)與該緩存更新服務(wù)器位于同一機(jī)房的緩存存儲(chǔ)服務(wù)器進(jìn)行緩存更新,包括:
根據(jù)所述標(biāo)識(shí)信息判斷所述緩存包是否屬于所述緩存更新服務(wù)器所處機(jī)房;
如果是,根據(jù)所述緩存包對(duì)與該緩存更新服務(wù)器位于同一機(jī)房的緩存存儲(chǔ)服務(wù)器進(jìn)行緩存更新。
可選的,所述緩存更新系統(tǒng)還包括:更新檢測(cè)服務(wù)器;所述方法還包括:
所述更新檢測(cè)服務(wù)器根據(jù)緩存更新日志中各個(gè)步驟的處理狀態(tài)碼,判斷緩存是否更新成功;
如果否,向所述數(shù)據(jù)組裝服務(wù)器發(fā)送緩存更新不成功消息,以重新更新緩存。
本發(fā)明實(shí)施例還公開了一種緩存更新系統(tǒng),所述系統(tǒng)包括:數(shù)據(jù)組裝服務(wù)器、數(shù)據(jù)緩存區(qū)、緩存更新服務(wù)器和緩存存儲(chǔ)服務(wù)器;所述數(shù)據(jù)組裝服務(wù)器包括:第一獲得模塊、組裝模塊和第一發(fā)送模塊;所述緩存更新服務(wù)器包括:第二獲得模塊和更新模塊,其中,
所述第一獲得模塊,用于獲得待緩存數(shù)據(jù);
所述組裝模塊,用于按照預(yù)設(shè)規(guī)則將所述待緩存數(shù)據(jù)組裝為緩存包;
所述第一發(fā)送模塊,用于將所述緩存包發(fā)送給所述數(shù)據(jù)緩存區(qū)進(jìn)行存儲(chǔ);
所述第二獲得模塊,用于從所述數(shù)據(jù)緩存區(qū)中獲得所述緩存包;
所述更新模塊,用于根據(jù)所述緩存包對(duì)與該緩存更新服務(wù)器位于同一機(jī)房的緩存存儲(chǔ)服務(wù)器進(jìn)行緩存更新。
可選的,所述數(shù)據(jù)緩存區(qū)為:Kafka集群。
可選的,所述組裝模塊,包括:
過濾單元,用于對(duì)獲得的待緩存數(shù)據(jù)進(jìn)行過濾;
第一組裝單元,用于按照預(yù)設(shè)規(guī)則將過濾后的待緩存數(shù)據(jù)組裝為緩存包。
可選的,所述組裝模塊,包括:
第一判斷單元,用于判斷獲得的待緩存數(shù)據(jù)的大小是否大于預(yù)設(shè)閾值;
拆分單元,用于在獲得的待緩存數(shù)據(jù)的大小大于預(yù)設(shè)閾值的情況下,將所述待緩存數(shù)據(jù)拆分為均不大于預(yù)設(shè)閾值的數(shù)據(jù);
第二組裝單元,用于按照預(yù)設(shè)規(guī)則將拆分后的數(shù)據(jù)分別組裝為緩存包。
可選的,所述第二獲得模塊,具體用于:
從所述數(shù)據(jù)緩存區(qū)中以pull方式獲得所述緩存包。
可選的,緩存包中包含有機(jī)房標(biāo)識(shí)信息;
所述更新模塊,包括:
第二判斷單元,用于根據(jù)所述標(biāo)識(shí)信息判斷所述緩存包是否屬于所述緩存更新服務(wù)器所處機(jī)房;
更新單元,用于在所述緩存包屬于所述緩存更新服務(wù)器所處機(jī)房的情況下,根據(jù)所述緩存包對(duì)與該緩存更新服務(wù)器位于同一機(jī)房的緩存存儲(chǔ)服務(wù)器進(jìn)行緩存更新。
可選的,所述系統(tǒng)還包括:更新檢測(cè)服務(wù)器;所述更新檢測(cè)服務(wù)器包括:判斷模塊和第二發(fā)送模塊,其中,
所述判斷模塊,用于根據(jù)緩存更新日志中各個(gè)步驟的處理狀態(tài)碼,判斷緩存是否更新成功;
所述第二發(fā)送模塊,用于在緩存沒有更新成功的情況下,向所述數(shù)據(jù)組裝服務(wù)器發(fā)送緩存更新不成功消息,以重新更新緩存。
本發(fā)明實(shí)施例提供的分布式緩存更新方法及緩存更新系統(tǒng),可以利用數(shù)據(jù)組裝服務(wù)器獲得待緩存數(shù)據(jù),按照預(yù)設(shè)規(guī)則將待緩存數(shù)據(jù)組裝為緩存包,并發(fā)送給數(shù)據(jù)緩存區(qū)進(jìn)行存儲(chǔ),從而,緩存更新服務(wù)器可以從數(shù)據(jù)緩存區(qū)中獲得緩存包,根據(jù)緩存包對(duì)與該緩存更新服務(wù)器位于同一機(jī)房的緩存存儲(chǔ)服務(wù)器進(jìn)行緩存更新,實(shí)現(xiàn)了將組裝緩存數(shù)據(jù)的過程與更新緩存的過程從一個(gè)服務(wù)器里拆分出來,使得組裝緩存數(shù)據(jù)的過程與更新緩存的過程相互獨(dú)立,互不干擾,降低了網(wǎng)絡(luò)環(huán)境對(duì)系統(tǒng)的影響,提高了分布式緩存更新系統(tǒng)的可靠性。
當(dāng)然,實(shí)施本發(fā)明的任一產(chǎn)品或方法必不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的一種分布式緩存更新方法的流程示意圖;
圖2為本發(fā)明實(shí)施例提供的另一種分布式緩存更新方法的流程示意圖;
圖3為本發(fā)明實(shí)施例提供的一種緩存更新系統(tǒng)的結(jié)構(gòu)示意圖;
圖4為本發(fā)明實(shí)施例提供的另一種緩存更新系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例公開了一種分布式緩存更新方法及緩存更新系統(tǒng),以下分別進(jìn)行詳細(xì)說明。
參見圖1,圖1為本發(fā)明實(shí)施例提供的分布式緩存更新方法的一種流程示意圖,應(yīng)用于緩存更新系統(tǒng),該緩存更新系統(tǒng)包括:數(shù)據(jù)組裝服務(wù)器、數(shù)據(jù)緩存區(qū)、緩存更新服務(wù)器和緩存存儲(chǔ)服務(wù)器,包括如下步驟:
S101,數(shù)據(jù)組裝服務(wù)器獲得待緩存數(shù)據(jù);按照預(yù)設(shè)規(guī)則將待緩存數(shù)據(jù)組裝為緩存包;將緩存包發(fā)送給數(shù)據(jù)緩存區(qū)進(jìn)行存儲(chǔ)。
在實(shí)際應(yīng)用過程中,數(shù)據(jù)組裝服務(wù)器獲得待緩存數(shù)據(jù)的過程具體可以為:數(shù)據(jù)組裝服務(wù)器接收消息中間件或者客戶端發(fā)送的更新消息通知,根據(jù)更新消息通知以及業(yè)務(wù)邏輯,獲得待緩存數(shù)據(jù)。整個(gè)獲得待緩存數(shù)據(jù)的過程為現(xiàn)有技術(shù),在此不再贅述。
示例性的,數(shù)據(jù)組裝服務(wù)器接收到客戶端A的發(fā)送更新消息通知,更新消息通知的內(nèi)容為:{"type":"video","tvid":"132482349"},則數(shù)據(jù)組裝服務(wù)器根據(jù)業(yè)務(wù)邏輯獲得客戶端A中存儲(chǔ)的type為video,tvid為132482349的數(shù)據(jù)內(nèi)容,該數(shù)據(jù)內(nèi)容即為待緩存數(shù)據(jù)。
在實(shí)際應(yīng)用過程中,數(shù)據(jù)組裝服務(wù)器獲得待緩存數(shù)據(jù)的過程具體還可以為:數(shù)據(jù)組裝服務(wù)器接收消息中間件或者客戶端發(fā)送的更新消息通知,對(duì)接收到的更新消息通知進(jìn)行消息去重,并過濾非法更新消息通知,根據(jù)過濾后的更新消息通知以及業(yè)務(wù)邏輯,獲得待緩存數(shù)據(jù)。非法更新消息通知可以根據(jù)用戶需求定義,本發(fā)明實(shí)施例在此不做限定,整個(gè)獲得待緩存數(shù)據(jù)的過程為現(xiàn)有技術(shù),在此不再贅述。
示例性的,非法更新消息通知是格式不正確的更新消息通知,假設(shè)更新消息通知的正確格式為:{"type":"屬性值","tvid":"屬性值"},數(shù)據(jù)組裝服務(wù)器接收到客戶端A的發(fā)送更新消息通知a以及更新消息通知b,a和b的內(nèi)容分別為:{"type":"video","tvid":"132482349"}、{"type":"video"},則數(shù)據(jù)組裝服務(wù)器將過濾掉更新消息通知b,根據(jù)更新消息通知a以及業(yè)務(wù)邏輯獲得客戶端A中存儲(chǔ)的type為video,tvid為132482349的數(shù)據(jù)內(nèi)容,該數(shù)據(jù)內(nèi)容即為待緩存數(shù)據(jù)。
具體的,數(shù)據(jù)緩存區(qū)為:Kafka集群。Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),Kafka集群包含一個(gè)或多個(gè)服務(wù)器,對(duì)于每條發(fā)布到Kafka集群的消息都有一個(gè)類別,這個(gè)類別被稱為topic,在Kafka系統(tǒng)中,生成者將消息發(fā)送給Kafka集群,消費(fèi)者從Kafka集群消費(fèi)消息。Kafka集群作為數(shù)據(jù)緩存區(qū),承擔(dān)一個(gè)中間緩存和分發(fā)的作用,數(shù)據(jù)組裝服務(wù)器將緩存包發(fā)送給Kafka集群,Kafka集群對(duì)緩存包進(jìn)行存儲(chǔ),緩存更新服務(wù)器從Kafka集群獲得緩存包,從而數(shù)據(jù)組裝服務(wù)器為生產(chǎn)者,緩存更新服務(wù)器為消費(fèi)者。使用Kafka集群作為緩存中間件,能夠有利于提高系統(tǒng)的可靠性,主要體現(xiàn)在:Kafka集群支持消息持久化,并且采用主從復(fù)制機(jī)制能夠保證數(shù)據(jù)不丟,從而保障了數(shù)據(jù)存儲(chǔ)的可靠性;Kafka集群支持?jǐn)?shù)據(jù)的可靠傳輸,通過ACK(Ackowledgemen,應(yīng)答)機(jī)制和重試機(jī)制,能夠保證緩存包發(fā)送和接收過程的可靠性,并且Kafka集群支持?jǐn)?shù)據(jù)壓縮,大大提高了網(wǎng)絡(luò)傳輸效率,并且有利于降低網(wǎng)絡(luò)壓力。
需要說明的是,預(yù)設(shè)規(guī)則為預(yù)先設(shè)計(jì)并存儲(chǔ)在數(shù)據(jù)組裝服務(wù)器中的一段程序,按照該程序的執(zhí)行方式將待緩存數(shù)據(jù)組裝為緩存包,在實(shí)際應(yīng)用中,可以根據(jù)用戶需求定義程序的執(zhí)行方式,本發(fā)明實(shí)施例在此不作限定。
具體的,按照預(yù)設(shè)規(guī)則將待緩存數(shù)據(jù)組裝為緩存包,可以先對(duì)獲得的待緩存數(shù)據(jù)進(jìn)行過濾;然后,按照預(yù)設(shè)規(guī)則將過濾后的待緩存數(shù)據(jù)組裝為緩存包。對(duì)獲得的待緩存數(shù)據(jù)進(jìn)行過濾可以采用多種方式,例如:去掉待緩存數(shù)據(jù)中的重復(fù)數(shù)據(jù)和非法數(shù)據(jù)。其中,非法數(shù)據(jù)是數(shù)據(jù)可以是數(shù)據(jù)長度異常的數(shù)據(jù),也可以是數(shù)據(jù)類型異常的數(shù)據(jù),在實(shí)際應(yīng)用中,可以根據(jù)用戶需求定義非法數(shù)據(jù)格式,本發(fā)明對(duì)此不作限定。
示例性的,將數(shù)據(jù)長度大于500M的數(shù)據(jù)定義為非法數(shù)據(jù),則先將獲得的待緩存數(shù)據(jù)中大于500M的數(shù)據(jù)過濾,然后按照預(yù)設(shè)規(guī)則將過濾后的不大于500M的待緩存數(shù)據(jù)組裝為緩存包。
具體的,按照預(yù)設(shè)規(guī)則將待緩存數(shù)據(jù)組裝為緩存包,還可以先判斷獲得的待緩存數(shù)據(jù)的大小是否大于預(yù)設(shè)閾值,并在獲得的待緩存數(shù)據(jù)的大小大于預(yù)設(shè)閾值的情況下,將待緩存數(shù)據(jù)拆分為均不大于預(yù)設(shè)閾值的數(shù)據(jù);然后,按照預(yù)設(shè)規(guī)則將拆分后的數(shù)據(jù)分別組裝為緩存包。
示例性的,預(yù)設(shè)閾值為100M,獲得的待緩存數(shù)據(jù)的大小為300M,則將待緩存數(shù)據(jù)拆分為三組數(shù)據(jù),并且每組數(shù)據(jù)的大小都為100M,然后,按照預(yù)設(shè)規(guī)則將三組數(shù)據(jù)分別組裝為緩存包。
需要說明的是,本發(fā)明實(shí)施例以將待緩存數(shù)據(jù)平均拆分為均不大于預(yù)設(shè)閾值的數(shù)據(jù)為例進(jìn)行說明,僅為本發(fā)明的一個(gè)具體實(shí)例,并不構(gòu)成對(duì)本發(fā)明的限定。在實(shí)際應(yīng)用中,將待緩存數(shù)據(jù)拆分為均不大于預(yù)設(shè)閾值的數(shù)據(jù)可以根據(jù)用戶需要進(jìn)行設(shè)定拆分方法。
需要說明的是,緩存包的數(shù)據(jù)結(jié)構(gòu)可以包括:header(控制信息)、items(緩存數(shù)據(jù)集)、message(消息通知)、module(業(yè)務(wù)名稱)、time(系統(tǒng)處理時(shí)間)、status(系統(tǒng)處理狀態(tài)碼)。其中,header部分的數(shù)據(jù)結(jié)構(gòu)包括:mid(消息標(biāo)識(shí))、rid(拆包標(biāo)識(shí))、dst(目標(biāo)地址)、srcIp(源IP地址)、size(大小)、partKey(分區(qū)號(hào))、priority(優(yōu)先級(jí))、topic(類別);items部分的數(shù)據(jù)結(jié)構(gòu)包括:opt(選項(xiàng))、storageService(緩存服務(wù)類型)。在實(shí)際應(yīng)用中,mid是數(shù)據(jù)組裝服務(wù)器接收到消息通知后自動(dòng)生成的,可以保證每次有唯一的mid與消息通知對(duì)應(yīng),即使每次接收到相同的消息通知也會(huì)生成不同的mid;rid是表示拆分后的每個(gè)緩存包的唯一性;dst表示目的機(jī)房集合;srcIp表示當(dāng)前組裝服務(wù)器的IP地址;size表示拆分前生成的key-value(鍵值對(duì))集合大小,key-value集合是根據(jù)業(yè)務(wù)規(guī)則和消息通知組成的;partKey字段決定發(fā)送給topic下第幾個(gè)分區(qū);priority用于表示緩存包的級(jí)別,分為普通優(yōu)先級(jí)(general)和高優(yōu)先級(jí)(high);topic表示Kafka topic名稱,分為ONLINE-PUBLIC-TOPIC-GENERAL通道和ONLINE-PUBLIC-TOPIC-HIGH通道,分別對(duì)應(yīng)普通優(yōu)先級(jí)(general)和高優(yōu)先級(jí)(high);opt表示選擇SET(重置)或DEL(刪除)操作;time表示系統(tǒng)處理緩存包的時(shí)間;storageService表示緩存服務(wù)類型,表示緩存更新服務(wù)器具體寫入緩存數(shù)據(jù)的緩存存儲(chǔ)服務(wù)器類型,例如:memcache、redis、couchbase等等,可以同時(shí)指定多個(gè)緩存存儲(chǔ)服務(wù)器類型;status表示在整個(gè)更新流程中系統(tǒng)的處理狀態(tài),可以用以標(biāo)識(shí)整個(gè)更新流程中各個(gè)步驟執(zhí)行的成功與否。
需要說明的是,數(shù)據(jù)組裝服務(wù)器可以利用ONLINE-PUBLIC-TOPIC-GENERAL和ONLINE-PUBLIC-TOPIC-HIGH兩種通道,將緩存包發(fā)送給Kafka集群,當(dāng)數(shù)據(jù)組裝服務(wù)器獲得的消息通知是普通消息通知時(shí),根據(jù)該消息通知組裝的緩存包的priority級(jí)別為general,則利用ONLINE-PUBLIC-TOPIC-GENERAL通道,將緩存包發(fā)送給Kafka集群;當(dāng)數(shù)據(jù)組裝服務(wù)器獲得的消息通知是重要消息通知時(shí),根據(jù)該消息通知組裝的緩存包的priority級(jí)別為high,則利用ONLINE-PUBLIC-TOPIC-HIGH通道,將緩存包發(fā)送給Kafka集群。需要解釋的是,普通消息通知和重要消息通知可以根據(jù)用戶需求的定義,本發(fā)明對(duì)此不做限定。并且,數(shù)據(jù)組裝服務(wù)器采用Kafka ACK機(jī)制發(fā)送緩存包,同時(shí)利用Kafka重試機(jī)制設(shè)置重試次數(shù),來保證緩存包的成功發(fā)送。Kafka ACK機(jī)制以及Kafka重試機(jī)制屬于現(xiàn)有技術(shù),在此不再贅述。
S102,緩存更新服務(wù)器從數(shù)據(jù)緩存區(qū)中獲得緩存包;根據(jù)緩存包對(duì)與該緩存更新服務(wù)器位于同一機(jī)房的緩存存儲(chǔ)服務(wù)器進(jìn)行緩存更新。
具體的,緩存更新服務(wù)器從數(shù)據(jù)緩存區(qū)中以pull(拉)方式獲得緩存包。因此,如果此時(shí)網(wǎng)絡(luò)不穩(wěn)定,那么此時(shí)緩存更新服務(wù)器將無法獲得緩存包,緩存包仍然保存在Kafka集群中。等待網(wǎng)絡(luò)恢復(fù)穩(wěn)定后,緩存更新服務(wù)器可以繼續(xù)從Kafka集群獲得緩存包。在緩存更新服務(wù)器獲得緩存包后,會(huì)更新在同一機(jī)房的緩存存儲(chǔ)服務(wù)器。因?yàn)楫?dāng)緩存更新服務(wù)器與緩存存儲(chǔ)服務(wù)器位于同一機(jī)房時(shí),可以忽略網(wǎng)絡(luò)因素,因此,將緩存更新服務(wù)器與緩存存儲(chǔ)服務(wù)器部署在同一機(jī)房內(nèi),一個(gè)機(jī)房的緩存更新服務(wù)器只負(fù)責(zé)更新該機(jī)房內(nèi)的緩存存儲(chǔ)服務(wù)器。并且,一個(gè)機(jī)房的緩存更新服務(wù)器屬于一個(gè)獨(dú)立的Kafka消費(fèi)者,這樣保證了每個(gè)機(jī)房的緩存更新服務(wù)器都能獨(dú)立的獲得緩存包,相互不影響,可以避免由于一個(gè)機(jī)房的緩存更新失敗而導(dǎo)致所有機(jī)房都需要重新更新緩存的情況發(fā)生,提高了系統(tǒng)的可靠性。
具體的,緩存包中包含有機(jī)房標(biāo)識(shí)信息;根據(jù)緩存包對(duì)與該緩存更新服務(wù)器位于同一機(jī)房的緩存存儲(chǔ)服務(wù)器進(jìn)行緩存更新,可以為:根據(jù)標(biāo)識(shí)信息判斷緩存包是否屬于緩存更新服務(wù)器所處機(jī)房;如果是,根據(jù)緩存包對(duì)與該緩存更新服務(wù)器位于同一機(jī)房的緩存存儲(chǔ)服務(wù)器進(jìn)行緩存更新,如果不是,就丟棄該緩存包。
示例性的,A機(jī)房的機(jī)房標(biāo)識(shí)信息為a,當(dāng)位于機(jī)房A的緩存更新服務(wù)器獲得的緩存包中的機(jī)房標(biāo)識(shí)信息包含a時(shí),則根據(jù)該緩存包對(duì)位于A機(jī)房的緩存存儲(chǔ)服務(wù)器進(jìn)行緩存更新;當(dāng)位于機(jī)房A的緩存更新服務(wù)器獲得的緩存包中的機(jī)房標(biāo)識(shí)信息不包含a時(shí),則丟棄該緩存包。
需要說明的是,緩存更新服務(wù)器可以利用Low-level API(低標(biāo)準(zhǔn)接口)或High-level API(高標(biāo)準(zhǔn)接口)兩種方式來獲得緩存包。區(qū)別在于Low-levelAPI使用復(fù)雜,并且需要在每次寫入到緩存服務(wù)后再主動(dòng)提交offset(偏移量)。High-level API封裝了對(duì)partition(分區(qū))和offset的管理,默認(rèn)設(shè)置定期自動(dòng)提交offset。由于Low-level API會(huì)大大影響系統(tǒng)性能,并增加系統(tǒng)復(fù)雜度,因此,推薦使用High-level API。更新服務(wù)器在向緩存存儲(chǔ)服務(wù)器寫入緩存數(shù)據(jù)時(shí),一般有兩種寫入模式:同步寫入模式和異步寫入模式。通常采用異步寫入模式寫入緩存存儲(chǔ)服務(wù)器時(shí),會(huì)提高網(wǎng)絡(luò)吞吐量,但這樣帶來的問題是無法識(shí)別每次寫操作是否成功。對(duì)于本發(fā)明實(shí)施例而言,將緩存更新服務(wù)器與緩存存儲(chǔ)服務(wù)器部署于同一機(jī)房,可以減少網(wǎng)絡(luò)影響概率,并采用引入重試機(jī)制的異步寫入模式,來實(shí)現(xiàn)高可靠性與高吞吐量的平衡點(diǎn)。需要說明的是異步寫入模式與重試機(jī)制為現(xiàn)有技術(shù),本發(fā)明實(shí)施例在此不對(duì)其進(jìn)行贅述。
可見,應(yīng)用本發(fā)明實(shí)施例,實(shí)現(xiàn)了將組裝緩存數(shù)據(jù)的過程與更新緩存的過程從一個(gè)服務(wù)器里拆分出來,使得組裝緩存數(shù)據(jù)的過程與更新緩存的過程相互獨(dú)立,互不干擾,降低了網(wǎng)絡(luò)環(huán)境對(duì)系統(tǒng)的影響,提高了分布式緩存更新系統(tǒng)的可靠性。
具體的,在本發(fā)明的一個(gè)實(shí)施例中,緩存更新系統(tǒng)還包括:更新檢測(cè)服務(wù)器,如圖2所示,本發(fā)明圖2所示實(shí)施例在圖1所示實(shí)施例的基礎(chǔ)上,增加S103和S104。
S103,更新檢測(cè)服務(wù)器根據(jù)緩存更新日志中各個(gè)步驟的處理狀態(tài)碼,判斷緩存是否更新成功;在緩存沒有更新成功的情況下,執(zhí)行S104。
需要說明的是,緩存更新日志包括組裝服務(wù)器日志和更新服務(wù)器日志。緩存更新日志記錄了分布式緩存更新方法整個(gè)執(zhí)行過程中各個(gè)步驟的處理情況,并且按照預(yù)定義的處理狀態(tài)碼來標(biāo)記各個(gè)更新步驟的處理狀態(tài)。在實(shí)際應(yīng)用中,處理狀態(tài)碼可以根據(jù)用戶需要進(jìn)行設(shè)定,本發(fā)明對(duì)此不作限定。
示例性的,處理狀態(tài)碼具體值可以為:0_all、0_fail、0_deny、1_ok、1_fail、2_parse_fail、2_deny、2_ok、2_fail,其中,0_all表示數(shù)據(jù)組裝服務(wù)器接收到消息通知;0_fail表示數(shù)據(jù)組裝服務(wù)器發(fā)生異常,丟棄消息;0_deny表示組裝服務(wù)器不支持組裝數(shù)據(jù),或組裝數(shù)據(jù)為空;1_ok表示數(shù)據(jù)組裝服務(wù)器向Kafka集群發(fā)送緩存包成功;1_fail表示數(shù)據(jù)組裝服務(wù)器向Kafka集群發(fā)送緩存包失敗;2_parse_fail表示緩存更新服務(wù)器解析緩存包失敗;2_deny表示緩存更新服務(wù)器從Kafka集群接收緩存包失敗;2_ok表示緩存更新服務(wù)器更新緩存成功;2_fail表示緩存更新服務(wù)器更新緩存失敗。
S104,向數(shù)據(jù)組裝服務(wù)器發(fā)送緩存更新不成功消息,以重新更新緩存。
需要說明的是,在緩存沒有更新成功的情況下,更新檢測(cè)服務(wù)器向數(shù)據(jù)組裝服務(wù)器發(fā)送緩存更新不成功消息,從而,數(shù)據(jù)組裝服務(wù)器重新執(zhí)行S101,緩存更新服務(wù)器重新執(zhí)行S102。需要解釋的是,為了保證系統(tǒng)優(yōu)先處理重新更新緩存的過程,以使重新更新緩存的過程被更快處理,更新檢測(cè)服務(wù)器發(fā)送的更新不成功消息的priority級(jí)別為high,因此,根據(jù)該消息組裝的緩存包會(huì)通過ONLINE-PUBLIC-TOPIC-HIGH通道到達(dá)Kafka集群,整個(gè)重新更新緩存流程的處理會(huì)更快速。并且,為了避免重新更新緩存的次數(shù)太多,而影響系統(tǒng)運(yùn)行效率,可以預(yù)先設(shè)置最大重試次數(shù),當(dāng)超過最大重試次數(shù)時(shí),更新檢測(cè)服務(wù)器將不再向數(shù)據(jù)組裝服務(wù)器發(fā)送緩存更新不成功消息。
示例性的,預(yù)先設(shè)置最大重試次數(shù)為3,則當(dāng)重新更新緩存的次數(shù)小于等于3次時(shí),更新檢測(cè)服務(wù)器向數(shù)據(jù)組裝服務(wù)器發(fā)送緩存更新不成功消息,以重新更新緩存;當(dāng)重新更新緩存的次數(shù)大于3次時(shí),更新檢測(cè)服務(wù)器不再向數(shù)據(jù)組裝服務(wù)器發(fā)送緩存更新不成功消息。
可見,應(yīng)用本發(fā)明實(shí)施例,實(shí)現(xiàn)了將組裝緩存數(shù)據(jù)的過程與更新緩存的過程從一個(gè)服務(wù)器里拆分出來,使得組裝緩存數(shù)據(jù)的過程與更新緩存的過程相互獨(dú)立,互不干擾,降低了網(wǎng)絡(luò)環(huán)境對(duì)系統(tǒng)的影響,進(jìn)一步的,提高了系統(tǒng)的容錯(cuò)能力,從而提高了分布式緩存更新系統(tǒng)的可靠性。
與上述的方法實(shí)施例相對(duì)應(yīng),本發(fā)明實(shí)施例還提供一種緩存更新系統(tǒng)。
參見圖3,圖3為本發(fā)明實(shí)施例所提供的一種緩存更新系統(tǒng)的結(jié)構(gòu)示意圖,該系統(tǒng)包括:數(shù)據(jù)組裝服務(wù)器301、數(shù)據(jù)緩存區(qū)302、緩存更新服務(wù)器303和緩存存儲(chǔ)服務(wù)器304,數(shù)據(jù)組裝服務(wù)器301包括:第一獲得模塊、組裝模塊和第一發(fā)送模塊;緩存更新服務(wù)器303包括:第二獲得模塊和更新模塊,其中,
第一獲得模塊,用于獲得待緩存數(shù)據(jù);
組裝模塊,用于按照預(yù)設(shè)規(guī)則將待緩存數(shù)據(jù)組裝為緩存包;
第一發(fā)送模塊,用于將緩存包發(fā)送給數(shù)據(jù)緩存區(qū)302進(jìn)行存儲(chǔ);
第二獲得模塊,用于從數(shù)據(jù)緩存區(qū)302中獲得緩存包;
更新模塊,用于根據(jù)緩存包對(duì)與該緩存更新服務(wù)器303位于同一機(jī)房的緩存存儲(chǔ)服務(wù)器304進(jìn)行緩存更新。
其中,數(shù)據(jù)緩存區(qū)302為:Kafka集群。
其中,組裝模塊,包括:過濾單元和第一組裝單元(圖中未示出)。
過濾單元,用于對(duì)獲得的待緩存數(shù)據(jù)進(jìn)行過濾;
第一組裝單元,用于按照預(yù)設(shè)規(guī)則將過濾后的待緩存數(shù)據(jù)組裝為緩存包。
其中,組裝模塊,包括:第一判斷單元、拆分單元和第二組裝單元(圖中未示出)。
第一判斷單元,用于判斷獲得的待緩存數(shù)據(jù)的大小是否大于預(yù)設(shè)閾值;
拆分單元,用于在獲得的待緩存數(shù)據(jù)的大小大于預(yù)設(shè)閾值的情況下,將待緩存數(shù)據(jù)拆分為均不大于預(yù)設(shè)閾值的數(shù)據(jù);
第二組裝單元,用于按照預(yù)設(shè)規(guī)則將拆分后的數(shù)據(jù)分別組裝為緩存包。
其中,第二獲得模塊,具體用于:
從數(shù)據(jù)緩存區(qū)302中以pull方式獲得緩存包。
其中,緩存包中包含有機(jī)房標(biāo)識(shí)信息;
更新模塊,包括:第二判斷單元和更新單元(圖中未示出)。
第二判斷單元,用于根據(jù)標(biāo)識(shí)信息判斷緩存包是否屬于緩存更新服務(wù)器303所處機(jī)房;
更新單元,用于在緩存包屬于緩存更新服務(wù)器303所處機(jī)房的情況下,根據(jù)緩存包對(duì)與該緩存更新服務(wù)器303位于同一機(jī)房的緩存存儲(chǔ)服務(wù)器304進(jìn)行緩存更新。
可見,應(yīng)用本發(fā)明實(shí)施例,實(shí)現(xiàn)了將組裝緩存數(shù)據(jù)的過程與更新緩存的過程從一個(gè)服務(wù)器里拆分出來,使得組裝緩存數(shù)據(jù)的過程與更新緩存的過程相互獨(dú)立,互不干擾,降低了網(wǎng)絡(luò)環(huán)境對(duì)系統(tǒng)的影響,提高了分布式緩存更新系統(tǒng)的可靠性。
參見圖4,圖4為本發(fā)明實(shí)施例所提供的另一種緩存更新系統(tǒng)的結(jié)構(gòu)示意圖;本發(fā)明圖4實(shí)施例在圖3所示實(shí)施例的基礎(chǔ)上,增加更新檢測(cè)服務(wù)器305,更新檢測(cè)服務(wù)器包括:判斷模塊和第二發(fā)送模塊,其中,
判斷模塊,用于根據(jù)緩存更新日志中各個(gè)步驟的處理狀態(tài)碼,判斷緩存是否更新成功;
第二發(fā)送模塊,用于在緩存沒有更新成功的情況下,向數(shù)據(jù)組裝服務(wù)器301發(fā)送緩存更新不成功消息,以重新更新緩存。
可見,應(yīng)用本發(fā)明實(shí)施例,實(shí)現(xiàn)了將組裝緩存數(shù)據(jù)的過程與更新緩存的過程從一個(gè)服務(wù)器里拆分出來,使得組裝緩存數(shù)據(jù)的過程與更新緩存的過程相互獨(dú)立,互不干擾,降低了網(wǎng)絡(luò)環(huán)境對(duì)系統(tǒng)的影響,進(jìn)一步的,提高了系統(tǒng)的容錯(cuò)能力,從而提高了分布式緩存更新系統(tǒng)的可靠性。
需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
本說明書中的各個(gè)實(shí)施例均采用相關(guān)的方式描述,各個(gè)實(shí)施例之間相同相似的部分互相參見即可,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處。尤其,對(duì)于系統(tǒng)實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。