数据收集方法和装置的制作方法

文档序号:6357981阅读:169来源:国知局
专利名称:数据收集方法和装置的制作方法
技术领域
本发明涉及海量数据处理领域,尤其涉及一种数据收集方法和装置。
背景技术
高性能集群监控的数据量越来越多,与此同时对监控性能的要求也越来越高,所以对集群监控也提出了更高的要求。目前主流集群监控技术是对数据进行实时监控,但是在数据量大的时候,数据监控就会造成一定时延,有可能导致页面的反应时间过长,进而造成页面假死的现象。可以通过数据库缓冲来解决页面反应迟钝的问题,也就是节点把数据统一都放到数据库中,wen服务器统一从数据库取出数据形成页面。这种做法虽然在很大程度上缓解了页面对大量数据时的假死现象,但数据库和监控仍会造成数据滞后的问题, 无法满足用户的实时性需求。

发明内容
本发明提供了一种数据收集方法和装置,解决了数据库存储造成数据滞后的问题。一种数据收集方法,包括从集群中各节点采集数据;在缓存中创建聚合,将采集到的数据作为所述聚合的聚合对象,存入所述缓存。优选的,所述在缓存中创建聚合,将采集到的数据作为所述聚合的聚合对象,存入所述缓存包括创建聚合,所述聚合包括聚合根和至少一个聚合对象;创建聚合对象链表和聚合对象生命周期链表;将所述采集到的数据作为聚合对象,加入所述聚合对象链表中,并在所述聚合对象生命周期链表中记录各聚合对象的生命周期。优选的,上述数据收集方法还包括缓存外对象通过所述聚合根访问所述缓存中的聚合对象。优选的,所述缓存外对象通过所述聚合根访问所述缓存中的聚合对象包括缓存外对象检查所述聚合根的状态标志位,该聚合根的状态标志位用于指示缓存外对象所述聚合中的聚合对象是否已加载完整;在所述聚合根的状态标志位指示所述聚合的聚合对象已加载完整时,读取聚合对象中的数据。优选的,所述缓存外对象通过所述聚合根访问所述缓存中的聚合对象包括缓存外对象检查所述聚合根的状态标志位,该聚合根的状态标志位用于指示缓存外对象所述聚合中的聚合对象是否已加载完整;在所述聚合根的状态标志位指示所述聚合的聚合对象已加载完整时,检查所述聚合对象的状态标志位,所述状态标志位用于指示所述聚合对象是否发生了变化;
在所述聚合对象的状态标志位指示所述聚合对象发生变化时,重新加载所述聚合对象;在重新加载完成后,缓存外对象访问所述聚合对象中的数据。优选的,上述数据收集方法还包括,更新聚合对象列表,具体如下在所述聚合对象链表中的聚合对象被访问时,将所述聚合对象提前至所述聚合对象链表最前端;和/或,删除聚合对象链表中到达生命周期的聚合对象;和/或,在缓存外对象访问的数据不在所述聚合对象链表中时,将所述数据由所述聚合对象链表中的其他聚合对象或数据库中添加到所述聚合对象列表。优选的,上述数据收集方法还包括当所述缓存中存储的数据发生变化时,将变化的数据同步到后端数据库。本发明还提供了一种数据收集装置,包括数据采集模块,用于从集群中各节点采集数据;数据存储模块,用于在缓存中创建聚合,将采集到的数据作为所述聚合的聚合对象,存入所述缓存。优选的,所述数据存储模块包括聚合创建单元,用于创建聚合,所述聚合包括聚合根和至少一个聚合对象;链表维护单元,用于创建聚合对象链表和聚合对象生命周期链表,并将所述采集到的数据作为聚合对象,加入所述聚合对象链表中,并在所述聚合对象生命周期链表中记录各聚合对象的生命周期。优选的,所述链表维护单元,还用于在所述聚合对象链表中的聚合对象被访问时, 将所述聚合对象提前至所述聚合对象链表最前端;和,删除聚合对象链表中到达生命周期的聚合对象;和,在缓存外对象访问的数据不在所述聚合对象链表中时,将所述数据由所述聚合对象链表中的其他聚合对象或数据库中添加到所述聚合对象列表。本发明提供了一种数据收集方法和装置,从集群中各节点采集数据,在缓存中创建聚合,将采集到的数据作为所述聚合的聚合对象,存入所述缓存。实现了通过内在中的缓存存储节点数据,提高了后续数据访问的效率,解决了数据库存储带来的数据滞后的问题。


图1为本发明的实施例一提供的一种数据收集方法的流程图;图2为图1中步骤102的具体流程图;图3为本发明的实施例一中缓存与节点及数据库的连接关系示意图;图4为本发明的实施例三提供的一种数据收集装置的结构示意图;图5为图4中数据存储模块402的结构示意图。
具体实施例方式在集群监控使用数据库统一为集群中的节点提供缓冲时,如果有几千个节点同时发出访问数据的请求,这一方案就无法满足同一时间对数据库的读写操作。且一般集群监控传统上是以秒来测量频率提供限量数据的,而高性能集群监控更是要求有更好的效率, 尤其要求从节点有效的采集数据,当设计较大集群时,如果一个节点的数据获取有问题,从该节点采集数据所消耗的时间也会较长,这就会造成采集数据这一机制所需时间的拖延, 保存数据所用时间也会加长,从而造成整个体系反应较慢。为了解决上述问题,本发明的实施例提供了一种数据收集方法和装置,下文中结合附图对的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。首先结合附图,对本发明的实施例一进行说明。本发明实施例一提供了一种数据收集方法,设计了缓存的动态机制,实现了对数据的转化,以及对数据的分类,利用双向链表管理对象的生命周期,如果一个聚合对象被访问到,那么就把它放到链表的前面,然后不定时要把缓存的对象加入到链表中,把过期的对象删除,同时匹配数据库中的变化,把需要的数据放到数据库中,也达到了和数据库数据一致性。当服务器要取数据时,通过缓存统一入口,来获得聚合根,根据聚合根的状态来获取对象。这样就可以实现了服务器不需要等待和数据库连接的时间,直接获取到了数据值,大大提高了服务器的性能和响应时间。使用该方法完成数据收集并提供数据访问的流程如图 1所示,包括步骤101、从集群中各节点采集数据;步骤102、在缓存中创建聚合,将采集到的数据作为所述聚合的聚合对象,存入所述缓存;本发明实施例中,在集群控制设备的内存中划分出一部分存储空间作为缓存,该缓存决定了创建的聚合的大小,即聚合占用的内存空间,缓存是虚拟机自动分配的。(空间大小视当前集群的数据量及访问密度而定),将采集到的集群中各节点数据存储在缓存中,为了进一步对后续的数据访问进行管理,在缓存内创建聚合,将采集到的数据以聚合对象的形式存储在该聚合中。本步骤具体如图2所示,包括步骤1021、创建聚合,所述聚合包括聚合根和至少一个聚合对象;步骤1022、创建聚合对象链表和聚合对象生命周期链表;步骤1023、将所述采集到的数据作为聚合对象,加入所述聚合对象链表中,并在所述聚合对象生命周期链表中记录各聚合对象的生命周期。缓存与节点及数据库的连接关系如图3所示,其中应用层为缓存外对象访问请求的来源,聚合根状态控制器主要用于记录聚合根的状态标志位,聚合对象的更新维护控制器则用于根据数据库同步机制将缓存中的数据与数据库进行同步。本发明实施例中创建聚合的目的是为了规范后续通过聚合根的访问控制机制。聚合根有状态标志位,其下的聚合对象具有状态标志位,在访问聚合根下的聚合对象时,同时在对象中增加状态标志位,当下次访问的时候,获得聚合根以后就要判断聚合根状态标志位和聚合对象的状态标志位,如果两个状态标志位都有变化,则需要重新加载待访问的聚合对象,即将待访问的聚合对象放到聚合对象链表的最前端。这样,就可以将对聚合对象的操作都封装在聚合内部,便于多线程环境下的并发访问控制。此外,还可以通过设置聚合根的状态标志位来限制缓存外对象对缓存中聚合对象的访问。缓存外对象访问缓存中的聚合对象要先来判断聚合根的状态标志位,只有聚合根
6的状态标志位指示接受缓存外对象访问,缓存外对象的访问请求才可得到聚合根的受理, 进而才能继续访问缓存中的聚合对象。步骤103、缓存外对象通过所述聚合根访问所述缓存中的聚合对象;本步骤中,根据步骤102所列的访问控制机制,缓存外对象访问聚合对象。此外,还需要根据数据被访问的情况进行缓存中聚合对象的更新,具体的,根据聚合对象的状态标志位和双向链表(聚合对象链表和聚合对象生命周期链表)的结构共同控制着聚合对象的数据实时性,以及维持着对象的生命周期。根据聚合对象的状态标志位,把经常访问的聚合对象放到聚合对象链表的前面,然后再不定时把要缓存的数据以聚合对象的形式加入到聚合对象链表中。根据聚合对象的生命周期或其他对比方法对聚合对象链表中的聚合对象进行筛选,将不经常访问的聚合对象删除掉。步骤104、当所述缓存中存储的数据发生变化时,将变化的数据同步到后端数据库;本发明实施例中,还需要进行数据库的同步操作,将有变化的数据(即同一聚合对象中的数据发生变化)放入到数据库中。若数据一直没有变化,则不进行将数据同步入数据库的。下面结合附图,对本发明的实施例二进行说明。一、聚合根的访问控制;本发明实施例中,将clussterCpu对象作为聚合中的聚合对象,cluster对象作为聚合的聚合根。cluster是一个实体模型,而clussterCpu是一个值对象,并且是属于cluster这个聚合根的子对象。将clussterCpu对象从clusster对象分离出来,在更新clussterCpu对象的时候,不用锁住clusster对象;而从缓存的设计角度来说,当更新 clussterCpu对象的时候,不用刷新clusster对象的缓存。这样就可以保证每次访问聚合对象时,必须通过聚合根的访问才可以访问到聚合对象,进而保证入口只有一个,也就保证了数据的完整性。二、聚合根控制聚合对象;在缓存的设计中,clusster对象有个embedded位(即聚合根的状态标志位)表示对象中嵌套的对象是否已经加载完整,当得到clusster对象后,如果发现clussterCpu 已经加载了,那么就直接返回该clussterCpu的数据;当有新采集到的的数据或者是更新了节点采集到的数据的时候,就重新加载clussterCpu。此外,也可以在clussterCpu对象中增加状态是否改变的标志位stateChangecK即聚合对象的状态标志位),在有新数据或者更新数据的时候,首先从缓存的统一入口处得到clusster,然后通过clusster得到 clusster对象,并设置clussterCpu状态改变标记为true,这样以来,当下次从缓存取出 clusster对象的时候,检查两个标志位embedded禾口 stateChanged,如果embeded为true, 但是StateChange也为ture,则重新加载clussterCpu对象,然后设置stateChanged为 false。通过上述方法将对聚合对象的操作都封装在聚合内部,便于多线程环境下的并发访问控制。所有缓存外对象的访问都首先从统一的缓存入口进行,这样保证了整个系统中用的是同一个缓存,所有节点操作的所有对象都是同一个缓存中的聚合对象。优选的,还可以将经常变化的属性和不经常变化的属性所对应的数据分开,并且将经常变化的属性独立出去,作为聚合根的一个子对象,这样做到变和不变分离,不仅有利于高内聚,而且有利于数据的控制和缓存的更新。三、聚合对象更新和维护;聚合对象更新主要用到HashMap、LinkedListedlist等数据结构,以便实现缓存更新机制,其中HashMap是JDK提供的,其Key类型为Object,然后把这一层又封装了一层,达到了效率的提升,主要是提供LongHashMap、LongLinkedListedlist等数据结构,与第一部分不同的是,它的HashMap是自己编写的,其Key为Long型,就是把上面的数据结构变得处理效率高一些,提供了更准确的对象访问。缓存更新原理是把所要缓存的对象加到 HashMap哈希映射表中,用两个LinkedListedlist双向链表分别维持着聚合对象和每个聚合对象的生命周期。如果一个聚合对象被访问到,那么就把它放到链表的最前面,然后不定时地把要缓存的对象加入链表中,把过期对象删除,如此反复的操作执行。下面列出了一个链表更新的具体实例
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(); }以上是一个双向链表的节点类,previoumext分别记录前后节点的指针,object 用于记录所需缓存的聚合对象,timestamp用于记录当前节点被创建时的时间戳。当该时间戳超过该节点的生存周期时,它就会被removeO方法删除掉。该类主要完成的功能就是由 LinkedListNode 构成 LinkedList 链表,而由 LinkedList 类实现 getFirst ()、getLast ()、 addFirst ()、addLast ()、clear ()等链表的基本方法。这样保证了聚合对象是最新的数据,且把经常访问的对象放到链表最前面,使访问的效率也有所提升。四、数据库同步操作;本发明的实施例使用缓存的目的是提高并发访问速度和集群监控数据的实时更新速度,所以设计缓存的时候,还需要考虑数据的同步性本发明的实施例中使用的数据向数据库同步的机制是一个被动的机制,也就是把有变化的数据放入到数据库中,即只有数据变化了,才会启动该机制,当数据一直没有变化,就不会启动。以下对上述数据同步机制的具体实施进行举例说明
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.一种数据收集方法,其特征在于,包括 从集群中各节点采集数据;在缓存中创建聚合,将采集到的数据作为所述聚合的聚合对象,存入所述缓存。
2.根据权利要求1所述的数据收集方法,其特征在于,所述在缓存中创建聚合,将采集到的数据作为所述聚合的聚合对象,存入所述缓存包括创建聚合,所述聚合包括聚合根和至少一个聚合对象; 创建聚合对象链表和聚合对象生命周期链表;将所述采集到的数据作为聚合对象,加入所述聚合对象链表中,并在所述聚合对象生命周期链表中记录各聚合对象的生命周期。
3.根据权利要求1或2所述的数据收集方法,其特征在于,该方法还包括 缓存外对象通过所述聚合根访问所述缓存中的聚合对象。
4.根据权利要求3所述的数据收集方法,其特征在于,所述缓存外对象通过所述聚合根访问所述缓存中的聚合对象包括缓存外对象检查所述聚合根的状态标志位,该聚合根的状态标志位用于指示缓存外对象所述聚合中的聚合对象是否已加载完整;在所述聚合根的状态标志位指示所述聚合的聚合对象已加载完整时,读取聚合对象中的数据。
5.根据权利要求3所述的数据收集方法,其特征在于,所述缓存外对象通过所述聚合根访问所述缓存中的聚合对象包括缓存外对象检查所述聚合根的状态标志位,该聚合根的状态标志位用于指示缓存外对象所述聚合中的聚合对象是否已加载完整;在所述聚合根的状态标志位指示所述聚合的聚合对象已加载完整时,检查所述聚合对象的状态标志位,所述状态标志位用于指示所述聚合对象是否发生了变化;在所述聚合对象的状态标志位指示所述聚合对象发生变化时,重新加载所述聚合对象;在重新加载完成后,缓存外对象访问所述聚合对象中的数据。
6.根据权利要求2所述的数据收集方法,其特征在于,该方法还包括,更新聚合对象列表,具体如下在所述聚合对象链表中的聚合对象被访问时,将所述聚合对象提前至所述聚合对象链表最前端;禾口 /或,删除聚合对象链表中到达生命周期的聚合对象;和/或,在缓存外对象访问的数据不在所述聚合对象链表中时,将所述数据由所述聚合对象链表中的其他聚合对象或数据库中添加到所述聚合对象列表。
7.根据权利要求2所述的数据收集方法,其特征在于,该方法还包括 当所述缓存中存储的数据发生变化时,将变化的数据同步到后端数据库。
8.一种数据收集装置,其特征在于,包括 数据采集模块,用于从集群中各节点采集数据;数据存储模块,用于在缓存中创建聚合,将采集到的数据作为所述聚合的聚合对象,存入所述缓存。
9.根据权利要求8所述的数据收集装置,其特征在于,所述数据存储模块包括 聚合创建单元,用于创建聚合,所述聚合包括聚合根和至少一个聚合对象;链表维护单元,用于创建聚合对象链表和聚合对象生命周期链表,并将所述采集到的数据作为聚合对象,加入所述聚合对象链表中,并在所述聚合对象生命周期链表中记录各聚合对象的生命周期。
10.根据权利要求9所述的数据收集装置,其特征在于,所述链表维护单元,还用于在所述聚合对象链表中的聚合对象被访问时,将所述聚合对象提前至所述聚合对象链表最前端;和,删除聚合对象链表中到达生命周期的聚合对象;和,在缓存外对象访问的数据不在所述聚合对象链表中时,将所述数据由所述聚合对象链表中的其他聚合对象或数据库中添加到所述聚合对象列表。
全文摘要
本发明提供了一种数据收集方法和装置。涉及海量数据处理领域;解决了数据库存储带来的数据滞后的问题。该方法包括从集群中各节点采集数据;在缓存中创建聚合,将采集到的数据作为所述聚合的聚合对象,存入所述缓存。本发明提供的技术方案,适用于高性能集群。
文档编号G06F17/30GK102163231SQ20111009257
公开日2011年8月24日 申请日期2011年4月13日 优先权日2011年4月13日
发明者段国栋 申请人:浪潮(北京)电子信息产业有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1