本發(fā)明涉及計算機網(wǎng)絡(luò)應(yīng)用領(lǐng)域,具體涉及一種用于WEB應(yīng)用的數(shù)據(jù)緩存集群,以及基于該數(shù)據(jù)緩存集群的數(shù)據(jù)檢索方法。
背景技術(shù):
大數(shù)據(jù)搜索現(xiàn)在已是熱門話題,大數(shù)據(jù)搜索大致可以包含幾部分:支持大數(shù)據(jù)檢索的數(shù)據(jù)庫、大數(shù)據(jù)搜索引擎和各個基于大數(shù)據(jù)接口查詢的應(yīng)用系統(tǒng)。其中支持大數(shù)據(jù)檢索的數(shù)據(jù)庫例如HBase等是處于整個系統(tǒng)的底層,主要負(fù)責(zé)數(shù)據(jù)的存儲。大數(shù)據(jù)搜索引擎位于數(shù)據(jù)庫和應(yīng)用系統(tǒng)的中間位置,主要負(fù)責(zé)數(shù)據(jù)的組織,并按照約定的規(guī)則將服務(wù)接口暴露給應(yīng)用系統(tǒng),供應(yīng)用系統(tǒng)調(diào)用檢索。各個應(yīng)用系統(tǒng)通過調(diào)用大數(shù)據(jù)搜索引擎獲取需要檢索的數(shù)據(jù),并將數(shù)據(jù)展現(xiàn)給用戶。
由于有些數(shù)據(jù)是可以重復(fù)使用的,而且各個系統(tǒng)都調(diào)用搜索引擎,如果頻繁重復(fù)調(diào)用就會使得搜索引擎壓力過大,甚至可能會導(dǎo)致搜索引擎服務(wù)器癱瘓和崩潰。
技術(shù)實現(xiàn)要素:
本發(fā)明針對上述問題,提供一種用于WEB應(yīng)用的數(shù)據(jù)緩存方法和緩存集群,能夠減少搜索引擎的請求次數(shù),提高應(yīng)用系統(tǒng)的查詢速度。
為實現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案如下:
一種用于WEB應(yīng)用的數(shù)據(jù)緩存集群,包括控制節(jié)點、普通存儲節(jié)點和高速存儲節(jié)點;所述普通存儲節(jié)點是基于永久性存儲器的存儲節(jié)點;所述高速存儲節(jié)點是基于內(nèi)存的高速訪問節(jié)點;所述控制節(jié)點負(fù)責(zé)緩存數(shù)據(jù)的存儲控制和請求的分發(fā)工作,將來自應(yīng)用服務(wù)器的數(shù)據(jù)存儲或訪問請求分發(fā)送給所述普通存儲節(jié)點和所述高速存儲節(jié)點;所述普通存儲節(jié)點和所述高速存儲節(jié)點負(fù)責(zé)具體數(shù)據(jù)的存儲和訪問。
進一步地,所述控制節(jié)點包括主控制節(jié)點和備用控制節(jié)點,所述備用控制節(jié)點負(fù)責(zé)在主控制節(jié)點無法提供服務(wù)時代替主控制節(jié)點提供控制服務(wù)。
進一步地,所述備用控制節(jié)點間隔指定時間向主控制節(jié)點發(fā)送請求確定主控制節(jié)點是否能正常提供服務(wù),如果主控制節(jié)點服務(wù)正常,主控制節(jié)點會響應(yīng)備用控制節(jié)點;如果超過一定時間沒有接收主控制節(jié)點的響應(yīng),則備用控制節(jié)點認(rèn)定主控制節(jié)點處于故障中。
進一步地,所述備用控制節(jié)點為一個或多個;若備用控制節(jié)點為一個,則在主控制節(jié)點無法提供服務(wù)時,該備用控制節(jié)點立即替代主控制節(jié)點,并將原先的主控制節(jié)點的虛擬IP映射到該備用控制節(jié)點的服務(wù)器上;若備用控制節(jié)點為多個,則在主控制節(jié)點無法提供服務(wù)時,按照事先設(shè)置的備用控制節(jié)點的優(yōu)先級將優(yōu)先級最高的備用控制節(jié)點設(shè)置為主控制節(jié)點,并將原先的主控制節(jié)點的虛擬IP映射到該備用控制節(jié)點的服務(wù)器上。
進一步地,所述備用控制節(jié)點在替代原先主控制節(jié)點后,發(fā)送短信告知服務(wù)器管理員進行故障處理,當(dāng)故障處理完畢后,管理員登錄管理系統(tǒng),發(fā)送請求告知其他控制節(jié)點此故障節(jié)點已恢復(fù),并成為備用控制節(jié)點;所述主控制節(jié)點定時發(fā)送請求以確定各個存儲節(jié)點是否能正常提供服務(wù),如果存儲節(jié)點超過一定時間無法響應(yīng),則主控制節(jié)點認(rèn)定此存儲節(jié)點已處于故障中,并發(fā)送短信告知服務(wù)器管理員進行故障處理。
進一步地,所述普通存儲節(jié)點通過Solr和Mongodb數(shù)據(jù)庫將數(shù)據(jù)存儲在磁盤上,所述高速存儲節(jié)點將緩存數(shù)據(jù)中的熱點數(shù)據(jù)存儲在內(nèi)存中。
進一步地,通過以下方法解決存儲節(jié)點的數(shù)據(jù)老化問題:在保存數(shù)據(jù)到存儲節(jié)點之前,生成一個字段來存儲此數(shù)據(jù)的時間戳,根據(jù)存儲的數(shù)據(jù)的時間戳設(shè)定相應(yīng)的時間對數(shù)據(jù)進行清理,以釋放存儲空間。
一種基于所述數(shù)據(jù)緩存集群的數(shù)據(jù)檢索方法,包括以下步驟:
1)應(yīng)用系統(tǒng)向數(shù)據(jù)緩存集群發(fā)送數(shù)據(jù)檢索請求;
2)數(shù)據(jù)緩存集群中的控制節(jié)點接收到數(shù)據(jù)檢索請求后,確定普通存儲節(jié)點和高速存儲節(jié)點中是否存在所查詢的數(shù)據(jù),如果存在則返回相關(guān)數(shù)據(jù),如果不存在則返回空數(shù)據(jù);
3)當(dāng)數(shù)據(jù)緩存集群返回空數(shù)據(jù)時,應(yīng)用系統(tǒng)發(fā)送請求到搜索引擎進行檢索,并將檢索到的數(shù)據(jù)存儲到數(shù)據(jù)緩存集群中。
進一步地,所述應(yīng)用系統(tǒng)將數(shù)據(jù)檢索請求的參數(shù)拼接成一個字符串,并將此字符串進行MD5加密最后生成一個MD5串,然后將該MD5串發(fā)送到所述數(shù)據(jù)緩存集群中進行查詢;所述數(shù)據(jù)緩存集群中的控制節(jié)點接收到查詢請求時,將MD5串進行HASH計算,從而確定存在此數(shù)據(jù)的能正常提供服務(wù)的存儲節(jié)點。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果如下:
本發(fā)明通過為應(yīng)用系統(tǒng)創(chuàng)建緩存服務(wù),一方面可以減少搜索引擎的請求次數(shù),另一方面可以有效的避免大量數(shù)據(jù)重復(fù)請求的情況,同時還可以提高應(yīng)用系統(tǒng)的查詢速度。本發(fā)明兼顧查詢效率和容錯機制,在大部分情況下集群中的節(jié)點能正常穩(wěn)定的運行,本緩存機制可以有效提供緩存和快速訪問。當(dāng)集群部分節(jié)點由于偶然的故障導(dǎo)致節(jié)點失效時,本機制避免復(fù)雜的設(shè)計,避免要兼顧偶然性而增加正常緩存和訪問的而帶來的開銷和成本。本發(fā)明應(yīng)對故障能夠自動檢測并處理,并人性化的短信通知服務(wù)器管理員進行硬件級別的恢復(fù)。同時在恢復(fù)硬件故障后,無需重啟集群,只要手工或者自動的通過消息機制,將已恢復(fù)故障的節(jié)點重新加入集群,避免暫停服務(wù)而造成的諸多方面損失。
附圖說明
圖1是本發(fā)明的緩存集群的架構(gòu)示意圖。
具體實施方式
為使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面通過具體實施例和附圖,對本發(fā)明做進一步說明。
圖1是本發(fā)明的緩存集群的架構(gòu)示意圖。如該圖所示,本發(fā)明包含幾個部分:應(yīng)用服務(wù)器節(jié)點、主控制節(jié)點、備用控制節(jié)點、普通存儲節(jié)點(或稱永久存儲節(jié)點)和高速存儲節(jié)點。應(yīng)用服務(wù)器節(jié)點主要指應(yīng)用程序,主控制節(jié)點主要指負(fù)責(zé)控制整個集群的節(jié)點,備用控制節(jié)點主要在主控制節(jié)點無法提供服務(wù)時代替主控制節(jié)點提供控制服務(wù),普通存儲節(jié)點是指數(shù)據(jù)存儲服務(wù)中基于磁盤等永久性存儲器的節(jié)點,高速存儲節(jié)點是指數(shù)據(jù)存儲服務(wù)中基于內(nèi)存的高速訪問節(jié)點。應(yīng)用服務(wù)器節(jié)點向主控制節(jié)點發(fā)送存儲和訪問請求,主控制節(jié)點將具體數(shù)據(jù)的存儲或者訪問請求分發(fā)送給具體存儲節(jié)點,普通存儲節(jié)點和高速存儲節(jié)點負(fù)責(zé)具體數(shù)據(jù)的存儲和提供具體數(shù)據(jù)的訪問。
本實施例為Tomcat緩存集群,其緩存部分可以分為永久存儲和高速存儲部分,永久存儲主要通過Solr和Mongodb數(shù)據(jù)庫存儲在磁盤上,高速存儲部分主要將緩存數(shù)據(jù)中的熱點數(shù)據(jù)存儲在內(nèi)存中。Mongodb數(shù)據(jù)庫主要負(fù)責(zé)全部數(shù)據(jù)的緩存存儲,包含每條數(shù)據(jù)的全部字段。在每條數(shù)據(jù)的全部字段中我們會挑選出一部分供查詢的關(guān)鍵字段創(chuàng)建索引,并保存在Solr庫中。我們利用Solr數(shù)據(jù)庫的檢索功能負(fù)責(zé)索引的檢索,并從Solr的檢索數(shù)據(jù)中獲取命中索引在Mongodb庫中的主鍵ID。最后我們通過對應(yīng)Mongodb庫中的主鍵ID獲取想要數(shù)據(jù)的全部字段。高速存儲部分是將一些可以大量重復(fù)利用的數(shù)據(jù)例如需要轉(zhuǎn)碼的鍵值對等存儲在內(nèi)存中,這部分?jǐn)?shù)據(jù)請求最頻繁,響應(yīng)也最快,當(dāng)然服務(wù)器重啟后也會消失而需要重新加載。
上面是闡述緩存集群中存儲部分,下面主要闡述如何創(chuàng)建基于Tomcat的緩存集群。Tomcat的緩存集群主要分為Tomcat控制節(jié)點、Tomcat存儲節(jié)點和Tomcat高速緩存節(jié)點。其中控制節(jié)點主要負(fù)責(zé)緩存數(shù)據(jù)的存儲控制和請求的分發(fā),控制節(jié)點也分主控制節(jié)點和備用控制節(jié)點。存儲節(jié)點利用Solr和Mongodb來存儲數(shù)據(jù),并暴露接口提供數(shù)據(jù)查詢服務(wù)。高速緩存節(jié)點主要將數(shù)據(jù)保存在內(nèi)存中,并暴露接口提供數(shù)據(jù)查詢服務(wù)。
控制節(jié)點原理如下,控制節(jié)點分為主控制節(jié)點和備用控制節(jié)點,在正常情況下主控制節(jié)點負(fù)責(zé)數(shù)據(jù)的存儲控制和請求的分發(fā)工作,當(dāng)主控制節(jié)點處于癱瘓或者暫時無法提供服務(wù)時,備用控制節(jié)點會立即替代主控制節(jié)點提供數(shù)據(jù)的存儲控制和請求的分發(fā)。
首先,主控制節(jié)點會有一臺Tomcat服務(wù)器,備用控制節(jié)點會有一臺或者多臺Tomcat服務(wù)器。備用控制節(jié)點會間隔指定時間向主控制節(jié)點發(fā)送請求確定主控制節(jié)點是否能正常提供服務(wù),如果主控制節(jié)點服務(wù)正常,會響應(yīng)備用控制節(jié)點告知主控制節(jié)點服務(wù)正常。如果主控制節(jié)點服務(wù)不正常,備用控制節(jié)點會無法接收到響應(yīng),如果超過一定時間沒有接收主控制節(jié)點的響應(yīng),則備用控制節(jié)點認(rèn)定主控制節(jié)點處于故障中。如果只有一個備用控制節(jié)點則此備用控制節(jié)點立即替代主控制節(jié)點,并將原先的主控制節(jié)點的虛擬IP映射到本服務(wù)器上。如果備用控制節(jié)點有多臺服務(wù)器,則此時按照事先設(shè)置的備用控制節(jié)點的優(yōu)先級將優(yōu)先級最高的備用控制節(jié)點設(shè)置為主控制節(jié)點,并將主控制節(jié)點的虛擬IP映射到本服務(wù)器上。同時此時替代原先主控制節(jié)點的節(jié)點服務(wù)器會通過短信Modem發(fā)送短信告知服務(wù)器管理員進行故障處理,當(dāng)故障處理完畢后,管理員會登錄管理系統(tǒng),發(fā)送請求告知其他控制節(jié)點此故障節(jié)點已恢復(fù),將成為備用控制節(jié)點。
對于存儲節(jié)點,主控制節(jié)點會定時發(fā)送請求以確定各個存儲節(jié)點是否能正常提供服務(wù),如果存儲節(jié)點超過一定時間無法響應(yīng),則主控制節(jié)點認(rèn)定此存儲節(jié)點已經(jīng)處于故障中,并發(fā)送短信告知服務(wù)器管理員進行故障處理。當(dāng)管理員處理完故障后,管理員會登錄管理系統(tǒng),發(fā)送請求告知控制節(jié)點此故障節(jié)點已經(jīng)恢復(fù),將成為存儲節(jié)點。
對于主控制節(jié)點,當(dāng)接收請求需要存儲數(shù)據(jù)時,會將請求報文中的請求參數(shù)MD5值進行HASH算法計算,確定將此部分?jǐn)?shù)據(jù)保存到哪個能正常提供服務(wù)的存儲節(jié)點。請求參數(shù)的MD5值為,當(dāng)應(yīng)用系統(tǒng)發(fā)送請求調(diào)用搜索引擎時,此時應(yīng)用系統(tǒng)將前端的請求參數(shù)進行拼接,并將拼接好的參數(shù)串進行MD5加密得到的一個MD5串,請求相同的數(shù)據(jù)會生成相同的MD5串,當(dāng)然請求不同的數(shù)據(jù)生成的MD5串會不一樣。當(dāng)主控制節(jié)點通知被HASH算法計算命中的存儲節(jié)點存儲相應(yīng)數(shù)據(jù)時,發(fā)現(xiàn)存儲節(jié)點無法響應(yīng),超過一定時間主控制節(jié)點會認(rèn)定此存儲節(jié)點已發(fā)生故障并短信通知服務(wù)器管理員進行故障處理,同時主控制節(jié)點會重新進行HASH計算,并將數(shù)據(jù)保存到新的無故障的存儲節(jié)點。
當(dāng)用戶檢索數(shù)據(jù)時,首先應(yīng)用系統(tǒng)會將請求參數(shù)按照規(guī)定的順序拼接成一個字符串,并將此字符串進行MD5加密最后生成一個MD5串。在應(yīng)用系統(tǒng)發(fā)送請求到搜索引擎進行檢索之前,應(yīng)用系統(tǒng)會通過請求參數(shù)的MD5串到Tomcat緩存集群中查詢,如果緩存中有想要的數(shù)據(jù),則向用戶展示緩存中的數(shù)據(jù),如果緩存中不存在想要的數(shù)據(jù),則應(yīng)用系統(tǒng)再向搜索引擎發(fā)送檢索請求。當(dāng)控制節(jié)點接收到查詢請求時,會將MD5串進行HASH計算,確定此數(shù)據(jù)可能存在于能正常提供服務(wù)的哪個存儲節(jié)點,如果此存儲節(jié)點包含所需要查詢的數(shù)據(jù)則返回相關(guān)數(shù)據(jù),如果此存儲節(jié)點不包含所需要的數(shù)據(jù)則返回空數(shù)據(jù)。當(dāng)返回空數(shù)據(jù)的時候,應(yīng)用系統(tǒng)會發(fā)送請求到搜索引擎進行檢索,并將檢索到的數(shù)據(jù)存儲到緩存服務(wù)器集群中。對于高速緩存服務(wù)器,一開始加載數(shù)據(jù)時,會將此數(shù)據(jù)的唯一身份作為應(yīng)用系統(tǒng)Map中的key,存儲此數(shù)據(jù)高速緩存服務(wù)器的IP做為Map中的value保存在應(yīng)用系統(tǒng)的內(nèi)存中。加載數(shù)據(jù)時會將相關(guān)數(shù)據(jù)保存到相關(guān)高速緩存服務(wù)器。請求數(shù)據(jù)時,會通過應(yīng)用系統(tǒng)中Map的key找到此數(shù)據(jù)保存的高速緩存服務(wù)器的IP,再到指定的IP請求相關(guān)數(shù)據(jù)。
對于存儲節(jié)點的數(shù)據(jù)老化問題,有以下解決方案。保存數(shù)據(jù)到存儲節(jié)點之前,會生成一個字段來存儲此數(shù)據(jù)的時間戳,此時間戳精確到分鐘,并以10、20、30、40和50為計量單位,例如:201609101200、201609101210、201609101220、201609101230、201609101240和201609101250,每個小時的1到9分鐘存儲的數(shù)據(jù)歸到00,10到19分鐘存儲的數(shù)據(jù)歸到10,20到29分鐘存儲的數(shù)據(jù)歸到20,30到39分鐘存儲的數(shù)據(jù)歸到30,40到49分鐘存儲的數(shù)據(jù)歸到40,50到59分鐘存儲的數(shù)據(jù)歸到50。對于老化機制可以通過配置文件配置數(shù)值1-24,配置1時系統(tǒng)會定時清理一個小時前的數(shù)據(jù),配置12時系統(tǒng)會定時清理十二小時前的數(shù)據(jù)。例如配置1時,系統(tǒng)會計算需要清理的數(shù)據(jù)的時間戳,假設(shè)現(xiàn)在為2016年9月10日12點,則需要清理的數(shù)據(jù)的時間戳為201609101100、201609101110、201609101120、201609101130、201609101140和201609101150。確定時間戳后,通過Solr的索引檢索功能,檢索符合條件的數(shù)據(jù),并得到相關(guān)數(shù)據(jù)在Mongodb中的主鍵ID,最后刪除Mongodb和Solr中的相關(guān)數(shù)據(jù)以完成緩存服務(wù)器中的數(shù)據(jù)老化,釋放不需要的空間。
至此便完全實現(xiàn)了可以應(yīng)對故障的Tomcat緩存集群。
以上實施例僅用以說明本發(fā)明的技術(shù)方案而非對其進行限制,本領(lǐng)域的普通技術(shù)人員可以對本發(fā)明的技術(shù)方案進行修改或者等同替換,而不脫離本發(fā)明的精神和范圍,本發(fā)明的保護范圍應(yīng)以權(quán)利要求書所述為準(zhǔn)。