專利名稱:數(shù)據(jù)收集方法和裝置的制作方法
技術領域:
本發(fā)明涉及海量數(shù)據(jù)處理領域,尤其涉及一種數(shù)據(jù)收集方法和裝置。
背景技術:
高性能集群監(jiān)控的數(shù)據(jù)量越來越多,與此同時對監(jiān)控性能的要求也越來越高,所以對集群監(jiān)控也提出了更高的要求。目前主流集群監(jiān)控技術是對數(shù)據(jù)進行實時監(jiān)控,但是在數(shù)據(jù)量大的時候,數(shù)據(jù)監(jiān)控就會造成一定時延,有可能導致頁面的反應時間過長,進而造成頁面假死的現(xiàn)象??梢酝ㄟ^數(shù)據(jù)庫緩沖來解決頁面反應遲鈍的問題,也就是節(jié)點把數(shù)據(jù)統(tǒng)一都放到數(shù)據(jù)庫中,wen服務器統(tǒng)一從數(shù)據(jù)庫取出數(shù)據(jù)形成頁面。這種做法雖然在很大程度上緩解了頁面對大量數(shù)據(jù)時的假死現(xiàn)象,但數(shù)據(jù)庫和監(jiān)控仍會造成數(shù)據(jù)滯后的問題, 無法滿足用戶的實時性需求。
發(fā)明內(nèi)容
本發(fā)明提供了一種數(shù)據(jù)收集方法和裝置,解決了數(shù)據(jù)庫存儲造成數(shù)據(jù)滯后的問題。一種數(shù)據(jù)收集方法,包括從集群中各節(jié)點采集數(shù)據(jù);在緩存中創(chuàng)建聚合,將采集到的數(shù)據(jù)作為所述聚合的聚合對象,存入所述緩存。優(yōu)選的,所述在緩存中創(chuàng)建聚合,將采集到的數(shù)據(jù)作為所述聚合的聚合對象,存入所述緩存包括創(chuàng)建聚合,所述聚合包括聚合根和至少一個聚合對象;創(chuàng)建聚合對象鏈表和聚合對象生命周期鏈表;將所述采集到的數(shù)據(jù)作為聚合對象,加入所述聚合對象鏈表中,并在所述聚合對象生命周期鏈表中記錄各聚合對象的生命周期。優(yōu)選的,上述數(shù)據(jù)收集方法還包括緩存外對象通過所述聚合根訪問所述緩存中的聚合對象。優(yōu)選的,所述緩存外對象通過所述聚合根訪問所述緩存中的聚合對象包括緩存外對象檢查所述聚合根的狀態(tài)標志位,該聚合根的狀態(tài)標志位用于指示緩存外對象所述聚合中的聚合對象是否已加載完整;在所述聚合根的狀態(tài)標志位指示所述聚合的聚合對象已加載完整時,讀取聚合對象中的數(shù)據(jù)。優(yōu)選的,所述緩存外對象通過所述聚合根訪問所述緩存中的聚合對象包括緩存外對象檢查所述聚合根的狀態(tài)標志位,該聚合根的狀態(tài)標志位用于指示緩存外對象所述聚合中的聚合對象是否已加載完整;在所述聚合根的狀態(tài)標志位指示所述聚合的聚合對象已加載完整時,檢查所述聚合對象的狀態(tài)標志位,所述狀態(tài)標志位用于指示所述聚合對象是否發(fā)生了變化;
在所述聚合對象的狀態(tài)標志位指示所述聚合對象發(fā)生變化時,重新加載所述聚合對象;在重新加載完成后,緩存外對象訪問所述聚合對象中的數(shù)據(jù)。優(yōu)選的,上述數(shù)據(jù)收集方法還包括,更新聚合對象列表,具體如下在所述聚合對象鏈表中的聚合對象被訪問時,將所述聚合對象提前至所述聚合對象鏈表最前端;和/或,刪除聚合對象鏈表中到達生命周期的聚合對象;和/或,在緩存外對象訪問的數(shù)據(jù)不在所述聚合對象鏈表中時,將所述數(shù)據(jù)由所述聚合對象鏈表中的其他聚合對象或數(shù)據(jù)庫中添加到所述聚合對象列表。優(yōu)選的,上述數(shù)據(jù)收集方法還包括當所述緩存中存儲的數(shù)據(jù)發(fā)生變化時,將變化的數(shù)據(jù)同步到后端數(shù)據(jù)庫。本發(fā)明還提供了一種數(shù)據(jù)收集裝置,包括數(shù)據(jù)采集模塊,用于從集群中各節(jié)點采集數(shù)據(jù);數(shù)據(jù)存儲模塊,用于在緩存中創(chuàng)建聚合,將采集到的數(shù)據(jù)作為所述聚合的聚合對象,存入所述緩存。優(yōu)選的,所述數(shù)據(jù)存儲模塊包括聚合創(chuàng)建單元,用于創(chuàng)建聚合,所述聚合包括聚合根和至少一個聚合對象;鏈表維護單元,用于創(chuàng)建聚合對象鏈表和聚合對象生命周期鏈表,并將所述采集到的數(shù)據(jù)作為聚合對象,加入所述聚合對象鏈表中,并在所述聚合對象生命周期鏈表中記錄各聚合對象的生命周期。優(yōu)選的,所述鏈表維護單元,還用于在所述聚合對象鏈表中的聚合對象被訪問時, 將所述聚合對象提前至所述聚合對象鏈表最前端;和,刪除聚合對象鏈表中到達生命周期的聚合對象;和,在緩存外對象訪問的數(shù)據(jù)不在所述聚合對象鏈表中時,將所述數(shù)據(jù)由所述聚合對象鏈表中的其他聚合對象或數(shù)據(jù)庫中添加到所述聚合對象列表。本發(fā)明提供了一種數(shù)據(jù)收集方法和裝置,從集群中各節(jié)點采集數(shù)據(jù),在緩存中創(chuàng)建聚合,將采集到的數(shù)據(jù)作為所述聚合的聚合對象,存入所述緩存。實現(xiàn)了通過內(nèi)在中的緩存存儲節(jié)點數(shù)據(jù),提高了后續(xù)數(shù)據(jù)訪問的效率,解決了數(shù)據(jù)庫存儲帶來的數(shù)據(jù)滯后的問題。
圖1為本發(fā)明的實施例一提供的一種數(shù)據(jù)收集方法的流程圖;圖2為圖1中步驟102的具體流程圖;圖3為本發(fā)明的實施例一中緩存與節(jié)點及數(shù)據(jù)庫的連接關系示意圖;圖4為本發(fā)明的實施例三提供的一種數(shù)據(jù)收集裝置的結(jié)構(gòu)示意圖;圖5為圖4中數(shù)據(jù)存儲模塊402的結(jié)構(gòu)示意圖。
具體實施例方式在集群監(jiān)控使用數(shù)據(jù)庫統(tǒng)一為集群中的節(jié)點提供緩沖時,如果有幾千個節(jié)點同時發(fā)出訪問數(shù)據(jù)的請求,這一方案就無法滿足同一時間對數(shù)據(jù)庫的讀寫操作。且一般集群監(jiān)控傳統(tǒng)上是以秒來測量頻率提供限量數(shù)據(jù)的,而高性能集群監(jiān)控更是要求有更好的效率, 尤其要求從節(jié)點有效的采集數(shù)據(jù),當設計較大集群時,如果一個節(jié)點的數(shù)據(jù)獲取有問題,從該節(jié)點采集數(shù)據(jù)所消耗的時間也會較長,這就會造成采集數(shù)據(jù)這一機制所需時間的拖延, 保存數(shù)據(jù)所用時間也會加長,從而造成整個體系反應較慢。為了解決上述問題,本發(fā)明的實施例提供了一種數(shù)據(jù)收集方法和裝置,下文中結(jié)合附圖對的實施例進行詳細說明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互任意組合。首先結(jié)合附圖,對本發(fā)明的實施例一進行說明。本發(fā)明實施例一提供了一種數(shù)據(jù)收集方法,設計了緩存的動態(tài)機制,實現(xiàn)了對數(shù)據(jù)的轉(zhuǎn)化,以及對數(shù)據(jù)的分類,利用雙向鏈表管理對象的生命周期,如果一個聚合對象被訪問到,那么就把它放到鏈表的前面,然后不定時要把緩存的對象加入到鏈表中,把過期的對象刪除,同時匹配數(shù)據(jù)庫中的變化,把需要的數(shù)據(jù)放到數(shù)據(jù)庫中,也達到了和數(shù)據(jù)庫數(shù)據(jù)一致性。當服務器要取數(shù)據(jù)時,通過緩存統(tǒng)一入口,來獲得聚合根,根據(jù)聚合根的狀態(tài)來獲取對象。這樣就可以實現(xiàn)了服務器不需要等待和數(shù)據(jù)庫連接的時間,直接獲取到了數(shù)據(jù)值,大大提高了服務器的性能和響應時間。使用該方法完成數(shù)據(jù)收集并提供數(shù)據(jù)訪問的流程如圖 1所示,包括步驟101、從集群中各節(jié)點采集數(shù)據(jù);步驟102、在緩存中創(chuàng)建聚合,將采集到的數(shù)據(jù)作為所述聚合的聚合對象,存入所述緩存;本發(fā)明實施例中,在集群控制設備的內(nèi)存中劃分出一部分存儲空間作為緩存,該緩存決定了創(chuàng)建的聚合的大小,即聚合占用的內(nèi)存空間,緩存是虛擬機自動分配的。(空間大小視當前集群的數(shù)據(jù)量及訪問密度而定),將采集到的集群中各節(jié)點數(shù)據(jù)存儲在緩存中,為了進一步對后續(xù)的數(shù)據(jù)訪問進行管理,在緩存內(nèi)創(chuàng)建聚合,將采集到的數(shù)據(jù)以聚合對象的形式存儲在該聚合中。本步驟具體如圖2所示,包括步驟1021、創(chuàng)建聚合,所述聚合包括聚合根和至少一個聚合對象;步驟1022、創(chuàng)建聚合對象鏈表和聚合對象生命周期鏈表;步驟1023、將所述采集到的數(shù)據(jù)作為聚合對象,加入所述聚合對象鏈表中,并在所述聚合對象生命周期鏈表中記錄各聚合對象的生命周期。緩存與節(jié)點及數(shù)據(jù)庫的連接關系如圖3所示,其中應用層為緩存外對象訪問請求的來源,聚合根狀態(tài)控制器主要用于記錄聚合根的狀態(tài)標志位,聚合對象的更新維護控制器則用于根據(jù)數(shù)據(jù)庫同步機制將緩存中的數(shù)據(jù)與數(shù)據(jù)庫進行同步。本發(fā)明實施例中創(chuàng)建聚合的目的是為了規(guī)范后續(xù)通過聚合根的訪問控制機制。聚合根有狀態(tài)標志位,其下的聚合對象具有狀態(tài)標志位,在訪問聚合根下的聚合對象時,同時在對象中增加狀態(tài)標志位,當下次訪問的時候,獲得聚合根以后就要判斷聚合根狀態(tài)標志位和聚合對象的狀態(tài)標志位,如果兩個狀態(tài)標志位都有變化,則需要重新加載待訪問的聚合對象,即將待訪問的聚合對象放到聚合對象鏈表的最前端。這樣,就可以將對聚合對象的操作都封裝在聚合內(nèi)部,便于多線程環(huán)境下的并發(fā)訪問控制。此外,還可以通過設置聚合根的狀態(tài)標志位來限制緩存外對象對緩存中聚合對象的訪問。緩存外對象訪問緩存中的聚合對象要先來判斷聚合根的狀態(tài)標志位,只有聚合根
6的狀態(tài)標志位指示接受緩存外對象訪問,緩存外對象的訪問請求才可得到聚合根的受理, 進而才能繼續(xù)訪問緩存中的聚合對象。步驟103、緩存外對象通過所述聚合根訪問所述緩存中的聚合對象;本步驟中,根據(jù)步驟102所列的訪問控制機制,緩存外對象訪問聚合對象。此外,還需要根據(jù)數(shù)據(jù)被訪問的情況進行緩存中聚合對象的更新,具體的,根據(jù)聚合對象的狀態(tài)標志位和雙向鏈表(聚合對象鏈表和聚合對象生命周期鏈表)的結(jié)構(gòu)共同控制著聚合對象的數(shù)據(jù)實時性,以及維持著對象的生命周期。根據(jù)聚合對象的狀態(tài)標志位,把經(jīng)常訪問的聚合對象放到聚合對象鏈表的前面,然后再不定時把要緩存的數(shù)據(jù)以聚合對象的形式加入到聚合對象鏈表中。根據(jù)聚合對象的生命周期或其他對比方法對聚合對象鏈表中的聚合對象進行篩選,將不經(jīng)常訪問的聚合對象刪除掉。步驟104、當所述緩存中存儲的數(shù)據(jù)發(fā)生變化時,將變化的數(shù)據(jù)同步到后端數(shù)據(jù)庫;本發(fā)明實施例中,還需要進行數(shù)據(jù)庫的同步操作,將有變化的數(shù)據(jù)(即同一聚合對象中的數(shù)據(jù)發(fā)生變化)放入到數(shù)據(jù)庫中。若數(shù)據(jù)一直沒有變化,則不進行將數(shù)據(jù)同步入數(shù)據(jù)庫的。下面結(jié)合附圖,對本發(fā)明的實施例二進行說明。一、聚合根的訪問控制;本發(fā)明實施例中,將clussterCpu對象作為聚合中的聚合對象,cluster對象作為聚合的聚合根。cluster是一個實體模型,而clussterCpu是一個值對象,并且是屬于cluster這個聚合根的子對象。將clussterCpu對象從clusster對象分離出來,在更新clussterCpu對象的時候,不用鎖住clusster對象;而從緩存的設計角度來說,當更新 clussterCpu對象的時候,不用刷新clusster對象的緩存。這樣就可以保證每次訪問聚合對象時,必須通過聚合根的訪問才可以訪問到聚合對象,進而保證入口只有一個,也就保證了數(shù)據(jù)的完整性。二、聚合根控制聚合對象;在緩存的設計中,clusster對象有個embedded位(即聚合根的狀態(tài)標志位)表示對象中嵌套的對象是否已經(jīng)加載完整,當?shù)玫絚lusster對象后,如果發(fā)現(xiàn)clussterCpu 已經(jīng)加載了,那么就直接返回該clussterCpu的數(shù)據(jù);當有新采集到的的數(shù)據(jù)或者是更新了節(jié)點采集到的數(shù)據(jù)的時候,就重新加載clussterCpu。此外,也可以在clussterCpu對象中增加狀態(tài)是否改變的標志位stateChangecK即聚合對象的狀態(tài)標志位),在有新數(shù)據(jù)或者更新數(shù)據(jù)的時候,首先從緩存的統(tǒng)一入口處得到clusster,然后通過clusster得到 clusster對象,并設置clussterCpu狀態(tài)改變標記為true,這樣以來,當下次從緩存取出 clusster對象的時候,檢查兩個標志位embedded禾口 stateChanged,如果embeded為true, 但是StateChange也為ture,則重新加載clussterCpu對象,然后設置stateChanged為 false。通過上述方法將對聚合對象的操作都封裝在聚合內(nèi)部,便于多線程環(huán)境下的并發(fā)訪問控制。所有緩存外對象的訪問都首先從統(tǒng)一的緩存入口進行,這樣保證了整個系統(tǒng)中用的是同一個緩存,所有節(jié)點操作的所有對象都是同一個緩存中的聚合對象。優(yōu)選的,還可以將經(jīng)常變化的屬性和不經(jīng)常變化的屬性所對應的數(shù)據(jù)分開,并且將經(jīng)常變化的屬性獨立出去,作為聚合根的一個子對象,這樣做到變和不變分離,不僅有利于高內(nèi)聚,而且有利于數(shù)據(jù)的控制和緩存的更新。三、聚合對象更新和維護;聚合對象更新主要用到HashMap、LinkedListedlist等數(shù)據(jù)結(jié)構(gòu),以便實現(xiàn)緩存更新機制,其中HashMap是JDK提供的,其Key類型為Object,然后把這一層又封裝了一層,達到了效率的提升,主要是提供LongHashMap、LongLinkedListedlist等數(shù)據(jù)結(jié)構(gòu),與第一部分不同的是,它的HashMap是自己編寫的,其Key為Long型,就是把上面的數(shù)據(jù)結(jié)構(gòu)變得處理效率高一些,提供了更準確的對象訪問。緩存更新原理是把所要緩存的對象加到 HashMap哈希映射表中,用兩個LinkedListedlist雙向鏈表分別維持著聚合對象和每個聚合對象的生命周期。如果一個聚合對象被訪問到,那么就把它放到鏈表的最前面,然后不定時地把要緩存的對象加入鏈表中,把過期對象刪除,如此反復的操作執(zhí)行。下面列出了一個鏈表更新的具體實例
public LinkedListNode(Object object, LinkedListNode next,LinkedListNode previous) { this, object = object; this, next = next;
this.previous = previous; }
public void removeQ { previous, next = next;
next.previous = previous; }
public String to StringQ {
return object.toString(); }以上是一個雙向鏈表的節(jié)點類,previoumext分別記錄前后節(jié)點的指針,object 用于記錄所需緩存的聚合對象,timestamp用于記錄當前節(jié)點被創(chuàng)建時的時間戳。當該時間戳超過該節(jié)點的生存周期時,它就會被removeO方法刪除掉。該類主要完成的功能就是由 LinkedListNode 構(gòu)成 LinkedList 鏈表,而由 LinkedList 類實現(xiàn) getFirst ()、getLast ()、 addFirst ()、addLast ()、clear ()等鏈表的基本方法。這樣保證了聚合對象是最新的數(shù)據(jù),且把經(jīng)常訪問的對象放到鏈表最前面,使訪問的效率也有所提升。四、數(shù)據(jù)庫同步操作;本發(fā)明的實施例使用緩存的目的是提高并發(fā)訪問速度和集群監(jiān)控數(shù)據(jù)的實時更新速度,所以設計緩存的時候,還需要考慮數(shù)據(jù)的同步性本發(fā)明的實施例中使用的數(shù)據(jù)向數(shù)據(jù)庫同步的機制是一個被動的機制,也就是把有變化的數(shù)據(jù)放入到數(shù)據(jù)庫中,即只有數(shù)據(jù)變化了,才會啟動該機制,當數(shù)據(jù)一直沒有變化,就不會啟動。以下對上述數(shù)據(jù)同步機制的具體實施進行舉例說明
public interface Repository {
/** Syncronizes the database.
*
Can be used, for example, to save the current memory image of the DB. */
public void syncQ;
/** Returns the numbers of users in the database.
*@return the numbers of user entries */ public int sizeQ;
/** Returns an enumeration of the users in this database.
*@return the list of user names as an Enumeration of String */ public Enumeration getUsersQ;
/* * Whether a user is present in the database and can be used as key.
*@param user the user name
*@return true if the user name is present as key */ public boolean hasUser(String user);
權利要求
1.一種數(shù)據(jù)收集方法,其特征在于,包括 從集群中各節(jié)點采集數(shù)據(jù);在緩存中創(chuàng)建聚合,將采集到的數(shù)據(jù)作為所述聚合的聚合對象,存入所述緩存。
2.根據(jù)權利要求1所述的數(shù)據(jù)收集方法,其特征在于,所述在緩存中創(chuàng)建聚合,將采集到的數(shù)據(jù)作為所述聚合的聚合對象,存入所述緩存包括創(chuàng)建聚合,所述聚合包括聚合根和至少一個聚合對象; 創(chuàng)建聚合對象鏈表和聚合對象生命周期鏈表;將所述采集到的數(shù)據(jù)作為聚合對象,加入所述聚合對象鏈表中,并在所述聚合對象生命周期鏈表中記錄各聚合對象的生命周期。
3.根據(jù)權利要求1或2所述的數(shù)據(jù)收集方法,其特征在于,該方法還包括 緩存外對象通過所述聚合根訪問所述緩存中的聚合對象。
4.根據(jù)權利要求3所述的數(shù)據(jù)收集方法,其特征在于,所述緩存外對象通過所述聚合根訪問所述緩存中的聚合對象包括緩存外對象檢查所述聚合根的狀態(tài)標志位,該聚合根的狀態(tài)標志位用于指示緩存外對象所述聚合中的聚合對象是否已加載完整;在所述聚合根的狀態(tài)標志位指示所述聚合的聚合對象已加載完整時,讀取聚合對象中的數(shù)據(jù)。
5.根據(jù)權利要求3所述的數(shù)據(jù)收集方法,其特征在于,所述緩存外對象通過所述聚合根訪問所述緩存中的聚合對象包括緩存外對象檢查所述聚合根的狀態(tài)標志位,該聚合根的狀態(tài)標志位用于指示緩存外對象所述聚合中的聚合對象是否已加載完整;在所述聚合根的狀態(tài)標志位指示所述聚合的聚合對象已加載完整時,檢查所述聚合對象的狀態(tài)標志位,所述狀態(tài)標志位用于指示所述聚合對象是否發(fā)生了變化;在所述聚合對象的狀態(tài)標志位指示所述聚合對象發(fā)生變化時,重新加載所述聚合對象;在重新加載完成后,緩存外對象訪問所述聚合對象中的數(shù)據(jù)。
6.根據(jù)權利要求2所述的數(shù)據(jù)收集方法,其特征在于,該方法還包括,更新聚合對象列表,具體如下在所述聚合對象鏈表中的聚合對象被訪問時,將所述聚合對象提前至所述聚合對象鏈表最前端;禾口 /或,刪除聚合對象鏈表中到達生命周期的聚合對象;和/或,在緩存外對象訪問的數(shù)據(jù)不在所述聚合對象鏈表中時,將所述數(shù)據(jù)由所述聚合對象鏈表中的其他聚合對象或數(shù)據(jù)庫中添加到所述聚合對象列表。
7.根據(jù)權利要求2所述的數(shù)據(jù)收集方法,其特征在于,該方法還包括 當所述緩存中存儲的數(shù)據(jù)發(fā)生變化時,將變化的數(shù)據(jù)同步到后端數(shù)據(jù)庫。
8.一種數(shù)據(jù)收集裝置,其特征在于,包括 數(shù)據(jù)采集模塊,用于從集群中各節(jié)點采集數(shù)據(jù);數(shù)據(jù)存儲模塊,用于在緩存中創(chuàng)建聚合,將采集到的數(shù)據(jù)作為所述聚合的聚合對象,存入所述緩存。
9.根據(jù)權利要求8所述的數(shù)據(jù)收集裝置,其特征在于,所述數(shù)據(jù)存儲模塊包括 聚合創(chuàng)建單元,用于創(chuàng)建聚合,所述聚合包括聚合根和至少一個聚合對象;鏈表維護單元,用于創(chuàng)建聚合對象鏈表和聚合對象生命周期鏈表,并將所述采集到的數(shù)據(jù)作為聚合對象,加入所述聚合對象鏈表中,并在所述聚合對象生命周期鏈表中記錄各聚合對象的生命周期。
10.根據(jù)權利要求9所述的數(shù)據(jù)收集裝置,其特征在于,所述鏈表維護單元,還用于在所述聚合對象鏈表中的聚合對象被訪問時,將所述聚合對象提前至所述聚合對象鏈表最前端;和,刪除聚合對象鏈表中到達生命周期的聚合對象;和,在緩存外對象訪問的數(shù)據(jù)不在所述聚合對象鏈表中時,將所述數(shù)據(jù)由所述聚合對象鏈表中的其他聚合對象或數(shù)據(jù)庫中添加到所述聚合對象列表。
全文摘要
本發(fā)明提供了一種數(shù)據(jù)收集方法和裝置。涉及海量數(shù)據(jù)處理領域;解決了數(shù)據(jù)庫存儲帶來的數(shù)據(jù)滯后的問題。該方法包括從集群中各節(jié)點采集數(shù)據(jù);在緩存中創(chuàng)建聚合,將采集到的數(shù)據(jù)作為所述聚合的聚合對象,存入所述緩存。本發(fā)明提供的技術方案,適用于高性能集群。
文檔編號G06F17/30GK102163231SQ20111009257
公開日2011年8月24日 申請日期2011年4月13日 優(yōu)先權日2011年4月13日
發(fā)明者段國棟 申請人:浪潮(北京)電子信息產(chǎn)業(yè)有限公司