消息管理方法

文档序号:7690994阅读:199来源:国知局
专利名称:消息管理方法
技术领域
本发明涉及通信领域,并且特别地,涉及一种消息管理方法。
背景技术
消息系统能够在不同进程之间提供灵活的消息传递,在消息的 传递过程中,发送和接收端松耦合的应用模式使其广泛应用在进程 通信,系统集成等领域,成为将企业各种应用集成在一起的基础。
比较典型的消息系统是各种应用服务器的消息中间件,其可以 实现跨平台操作,为不同操作系统上的应用软件集成提供服务,这
也是J2EE ^L范的要求。例如,BEA的WebLogic, IBM的WebSphere, 以及著名的开源应用力l务器Jboss都有对应的消息"良务器均是目前 比较知名的应用服务器。
消息系统可以提供一种松耦合的应用模式。发送者将消息发送 到服务器上特定目的地,接收者从特定目的地接收消息,发送端和 接收端不直接发生联系。消息按照先进先出的原则被接收,所以每 个目的地对应存在一个消息队列。消息的生产和消费可以完全异步 的工作,通过消息服务器的目的地将二者联系起来,这种做法能够 为应用提供了较大灵活性。
消息系统一般包括消息收发模块、队列管理模块、消息路由模 块、以及规则处理模块等。其中,消息收发模块主要负责消息的接
4收和发送,其以并发的逻辑接收各个发送端发送到各个目的地的消 息,并为接收端接收消息服务。消息路由模块主要负责消息在服务 器上的路由,使消息到达服务器上的对应目的地并被相应接收。规 则处理模块主要是作用过滤器等各种规则。队列管理模块主要是管 理消息在服务器上的存储和队列组织方式,该模块是消息服务器压 力最大的模块,其管理方式直接关系到消息服务器的效率、承受压 力的能力、和响应收发端请求的及时性,也是消息服务器极有可能 产生性能并瓦颈的地方。
由于消息的发送和异步接收,在应用中可能出现下列情况大 量的发送者大压力发送消息,但相应接收者却无法及时接收处理消 息,导致服务器上驻留大量消息。例如,在电信网管系统中,通过 消息服务器来路由告警信息,如果遇到告警风暴,则短时间内(比 如几十分钟)大量告警消息(如几十万条)进入服务器,在这种情 况下就要求消息系统具备高效的队列管理能力,既能承受大量消息 进入并驻留在服务器上,同时又不能因为驻留的消息过多而导致内 存溢出或者降^f氐效率。
现在的消息系统一般有三种队列管理模式
(1 )第一种是内存消息队列模式,其原理很简单,将消息全部 放在内存中,这样,发送和接收的效率都很高,但是其最大的弱点 就是不能驻留大量消息在服务器上,当消息风暴到来时,短时间会 导致服务器内存溢出,或者停止接收消息,或者开始丢弃消息,一 般小型消息服务器采用这种模式,其实现简单,消息量少;
(2 )第二种是硬盘消息队列模式,其将消息存在二级存储介质 中,服务器驻留消息的能力依赖存储介质的剩余空间,这种模式能 够驻留大量消息在服务器上,但是由于消息实际存在二级存储介质 中,所以消息传递的时候会有大量的硬盘IO操作,效率较低,使得整个消息服务器的响应能力降低,这种模式主要用在对收发消息速
度要求不是很高但消息量大的场合;
(3)第三种是结合前两种模式,在内存不紧张的时候,采用内 存消息队列,在由于消息大量驻留导致内存变得紧张时,使用硬盘 消息队列模式,这种方式在一定程度上保证了效率,也能驻留大量 的消息在服务器,是目前较好的一种模式, 一些商用级的大型应用 服务器消息中间件一般采用第(3)种模式。不过,这种模式在消息 出现堆积的时候,处理方式与硬盘消息队列中的处理才莫式;f艮类似,
并且还存在大量磁盘IO操作,导致数据传输效率不能达到最优。究 其才艮本原因,是由于这些方法都没有针对消息系统一些特4i,而无 法达到真正的高效。
然而,目前尚未提出能够解决上述三个问题的技术方案。

发明内容
考虑到上述问题而估文出本发明,为此,本发明的主要目的在于 提供一种消息管理方法,以解决相关技术中无法应对消息风暴、消 息发送和接收效率低的问题。
根据本发明的实施例,提供了一种消息管理方法,包括步骤
S102,消息服务器将接收的消息分解为逻辑消息和相应的物理消息;
步骤S104,将逻辑消息插入内存中的逻辑消息队列,并将物理消息
插入内存中的物理消息队列,并根据预定规则将物理消息从物理消
息在内存的物理消息队列、高速緩存的物理消息队列、以及持久化
存储器的物理消息队列之间进行置换;步骤S106,在消息被接收方
接收时,接收方获取逻辑队列中的逻辑消息,并获取相应的物理消 自、其中,高速緩存和持久化存储器均位于消息服务器,并且,在 接收方获取逻辑消息和相应的物理消息后,删除消息服务器上存储 的逻辑消息和物理消息。
此外,上述预定规则为当物理消息在内存中的存储时间达到 第 一时间门限和/或内存的占用量达到第 一容量门限的情况下,将物 理消息转移至消息服务器的高速緩存中的物理消息队列中,并将物 理消息从内存中的物理消息队列中删除;当物理消息在高速緩存中 的存储时间达到第二时间门限和/或高速緩存的占用量达到第二容 量门限的情况下,将物理消息转移至消息服务器的持久化存储器的 物理消息队列中,并将物理消息从高速緩存中的物理消息队列中删 除。
其中,在将物理消息存储至内存的物理消息队列后,在到达第 一时间门限和/或第一容量门限之前,将物理消息移动至其所在的物 理消息队列的队尾。
此外,预定规则还可以进一步包括确定高速緩存的物理消息 队列中的物理消息被接收的优先级,并在物理消息高速緩存中的存 储时间达到第二时间门限和/或高速緩存的占用量达到第二容量门 限的情况下,优先将优先级最低的物理消息置换到持久化存储器。
此外,在步骤S106中,在接收方接收消息时,在以块为单位 管理相应的物理消息,并在确定下个要被接收的物理消息所在的块 位于持久化存储器中的情况下,将该物理消息导入高速緩存之后再 从高速緩存中接收该物理消息。
此外,该方法可进一步包括在消息服务器上存储的消息满足 预定丟弃条件的情况下丢弃消息。
内存的逻辑消息队列中的逻辑消息的目的地;波此相同。通过本发明的上述技术方案,能够提高消息系统响应的及时性, 减少消息管理过程中内存的压力,并且能够提高消息系统承受巨大 消息量的能力,有效提高了消息接收的效率,使消息接收能够有条 不紊的进行。


此处所说明的附图用来4是供对本发明的进一步理解,构成本申 i青的一部分,本发明的示意性实施例及其i兌明用于解释本发明,并
不构成对本发明的不当限定。在附图中
图1是根据本发明实施例的消息管理方法的流程图2是根据本发明实施例的方法中物理消息和逻辑消息的结构 示意图3是4艮据本发明实施例的方法中物理消息状态迁变的示意
图4是才艮据本实施例的方法中逻辑消息队列的示意图5是根据本实施例的方法中物理消息队列的示意图6是4艮据本发明实施例的内存物理消息队列的结构示意图7是才艮据本发明实施例的方法中内存物理消息队列管理的流 程图8是才艮据本发明实施例的高速緩存消息队列的结构示意图9是根据本发明实施例的方法中高速緩存消息队列管理的流 程图;图IO是根据本发明实施例的持久化消息队列的结构示意图;以

图11是根据本发明实施例的方法中持久化消息队列管理的流 程图。
具体实施例方式
在目前的消息接收和发送机制中,消息在服务器内部路由和作 用规则等处理的时候,仅仅需要消息头就足够了,在最后被接收的 时候,才真正需要消息体。
具体地,消息进入消息服务器后有几种情形(a)立即4皮接收, 一般目的地上的消息都是这种情形。(b)驻留短时间后被接收,主 要是消息的接收者由于处理不及时导致了 一定的消息堆积(堆积量 不大,并且这种堆积效应不会持续下去),等堆积的消息处理完后, 新进入的消息也将被接收。(c)驻留很长时间后才被接收,主要出 现在两种情况堆积了太多的消息,并且由于发送速度大于接收速 度这种堆积效应会持续下去;接收者由于正在处理其他逻辑需要^艮 久以后才能接收消息。(d)根本不会被接收,比如接收端不正常关 闭可能导致这种情形。
各个目的地上的消息一般是以先进先出的方式通过消息服务 器,这样在接收消息的时候总是顺序接收相邻的消息(当然,高优 先级的消息会打乱这种顺序,不过在消息进入服务器时可以将高优 先级的消息插入相应位置,这样在接收时也是顺序的),所以同一个 目的地上的消息操作具有块特性,即使总的来说,相邻的消息是在 一段相对相邻的时间内被处理;并且, 一般消息系统的目的地不多, 大多凄t在100个以下的凄t量级。
9不同应用对目的地上队列管理的要求是不一样的,例如,对于 某些实时性要求较高的应用来说,消息在服务器上积压太久,其#皮 接收的意义已经不大了,因为其早已过时。
本发明正是基于一般消息系统的上述特征提出的。其提出了逻 辑消息队列和物理消息队列,并将物理消息队列分为了内存消息队 列,高速緩存消息队列和持久化消息队列。应当注意。这里说的消 息队列是从内存管理角度描述的队列,不完全等同于消息服务器各 个目的地的消息队列。
其中,逻辑消息队列中存放的元素是逻辑消息,其只含有消息
头和到消息体的引用等信息;物理消息队列中存放的元素是物理消 息,其含有消息体和到对应逻辑消息的引用等信息。在消息最后被 接收以前服务器需要的都是逻辑消息,其占用的内存空间很少,全 部-駐留在内存中,可以随时高刻 沐问。
物理消息队列由内存队列,高速緩存队列和持久化队列协同工 作。内存队列中的消息完全驻留在内存中,其能够被高速接收;高 速緩存队列的消息根据先进先出原则,使用动态预测置换算法(本 发明提出了合理算法公式),将最不可能被接收的消息置换到二级存 储介质中,而且以块(数条消息)的方式在内存和存4诸介质之间进 行置换,减少了 1/0操作。由于消息先进先出的特性,还可以结合 提出了动态预取技术,从而达到100%的命中率(接收消息时消息 正好在内存中);持久化队列存放的是在二级存储介质中的消息,介 质可以是文件系统或者数据库,其按块的方式存储消息。下面将结 合附图详细描述本发明的实施例。
在本实施例中,提供了一种消息管理方法。
10如图1所示,才艮据本实施例的消息管理方法包4舌步艰《S102, 消息服务器将接收的消息分解为逻辑消息和相应的物理消息;步骤 S104,将逻辑消息插入内存中的逻辑消息队列,并将物理消息插入 内存中的物理消息队列,并才艮据预定^L则将物理消息在内存的物理 消息队列、高速緩存的物理消息队列、以及持久化存储器的物理消 息队列之间进4亍置换;步骤S106,在消息被j妄收方4妄收时,*接收方 获取逻辑队列中的逻辑消息,并获取相应的物理消息。
其中,高速緩存和持久化存储器均位于消息服务器,并且,在 接收方获取逻辑消息和相应的物理消息后,删除消息服务器上存储 的逻辑消息和物理消息。
此外,上述预定规则为当物理消息在内存中的存储时间达到 第一时间门限和/或内存的占用量达到第 一容量门限的情况下,将物 理消息转移至消息服务器的高速緩存中的物理消息队列中,并将物 理消息从内存中的物理消息队列中删除;当物理消息在高速緩存中 的存储时间达到第二时间门限和/或高速緩存的占用量达到第二容 量门限的情况下,将物理消息转移至消息服务器的持久化存储器的 物理消息队列中,并将物理消息从高速緩存中的物理消息队列中删 除。
其中,在将物理消息存储至内存的物理消息队列后,在到达第 一时间门限和/或第一容量门限之前,将物理消息移动至其所在的物 理消息队列的队尾(可以是通过某种设置的失见则进行移动)。
此外,预定规则还可以进一步包括确定高速緩存的物理消息 队列中的物理消息被接收的优先级,并在物理消息所述高速緩存中 的存储时间达到第二时间门限和/或高速緩存的占用量达到第二容 量门限的情况下,优先将优先级最低的物理消息置换到持久化存储器。即,将最可能被接收到的物理消息保留在高速緩存中,以减少
1/0操作。
此外,在步骤S106中,在接收方接收消息时,在以块为单位 管理相应的物理消息,并在确定下个要^皮4妄收的物理消息所在的块 位于持久化存储器中的情况下,将该物理消息导入高速緩存内存之 后再从所述高速緩存中接收该物理消息。
此外,该方法可进一步包括在消息服务器上存储的消息满足 预定丢弃条件的情况下丢弃消息。
内存的逻辑消息队列中的逻辑消息的目的地4皮此相同。
在实际实现时,具体包括以下步骤
步骤1:消息服务器接收到消息;
步骤2:消息进入服务器后,分解成对应的逻辑消息和物理消 息,将逻辑消息插入相应目的地逻辑队列,将物理消息插入物理队 列的内存队列中;
步骤3:逻辑消息作用各种相关规则,在月良务器上路由并驻留, 直到有接收者接收消息;
步骤4:如果某个目的地队列达到丟弃算法规定的条件,则直 接丟弃相关消息,否则执行步骤5;
步骤5:消息由接收者接收,根据逻辑消息得到对应的物理消 息,并发送给接收者;
步骤6:消息被接收,删除服务器上对应的逻辑消息和物理消
自、
12其中,方法关键是物理消息在队列中的管理和置换,置换的处
理具体包含以下步骤
步骤(l):消息体组织成物理消息; 步艰《(2):物理消息进入内存队列;
步骤(3):物理消息在内存队列中被接收,从队列删除,否则 执行步骤(4 );
步骤(4):消息未被接收,物理消息随着时间被移动到内存消 息队列队尾,并且内存消息队列达到阀值,将对应物理消息移动到 高速緩存队列对应的目的地队列中;
步骤(5):物理消息在高速緩存中被接收,从对应目的地队列 删除,否则执行步骤(6);
步骤(6):消息未被接收,服务器内存耗用由于消息驻留达到 阀值,则作用动态置换算法,将符合条件的消息块置换到持久化消 息队列中,并从内存中删除;
步骤(7):随着队列消息的接收,消息所在的块成为下个将要 4皮接收块,如果消息块在持久化队列中,则动态预取算法将其导入 到内存中。
步骤(8):消息被接收,发送消息给接收者,并删除对应消息。
由于接收者的原因,消息可能一直驻留在服务器上,因此可以 采用目的地为单位的丟弃策略和消息过期机制的丟弃策略,丢弃策 略可以包含丟弃队首消息、丢弃队尾消息、拒绝接收等才几制。
下面结合附图对本发明消息队列管理方法进行i兌明。图2示出了逻辑消息和物理消息的结构。如图2所示,物理消 息是实际的消息,主要用来保存消息体等信息,并从它可以定位到 逻辑消息,以便在将物理消息置换出内存时可以在逻辑消息上标记 存储位置。逻辑消息是对消息的封装,具体包括消息编号,消息头, 消息引用,消息持久化位置等。消息引用指向实际的物理消息,其 可能存在内存队列中、高速緩存队列中、或者持久化队列中。如果 消息引用指向的消息不为空,则_说明消息在内存中(可能在内存队 列或者高速消息队列中);如果为空,说明消息已经被置换出内存, 在持久化队列中,持久化位置信息使其可以被重新导入到高速緩存 中。
并且,消息服务器处理的是逻辑消息,它屏蔽了物理消息的位 置和状态,使得消息服务器其他模块的逻辑简单清楚,在最后^皮接 收前,逻辑消息包含的信息已经足够了。而且最重要的是它只占少 量内存空间,保证所有的逻辑消息都可以驻留在内存中,以高效处 理。
图3示出了物理消息在消息服务器上的状态变迁的示意图
在图3中,数字1表示消息刚刚进入消息服务器,其处于active 状态,存在内存队列中;
数字2表示消息由内存队列置换到高速緩存队列,处于cache 状态;
数字3表示消息驻留在消息服务器上较长时间后,根据动态预 测置换算法,-故置换到二级存储介质中,处于inactive状态;
数字4表示消息所在块变为下个将要接收块时,根据预取算法 从二级存〗渚介质中导入到高速緩存接收块,重新处于cache态;
14数字5表示消息刚进入消息服务器在内存消息队列中时就^皮接 收,被接收后删除;
数字6表示消息在高速緩存中(可能已经经过了和二级存々者介 质的置换过程)被接收后删除。
此图表明了物理消息在消息服务器上可能的各种状态和状态变 迁。其各种状态分别对应划分的几种消息队列和相应的队列管理方法。
图4示意性地示出了逻辑消息队列的结构。如图4所示,服务 器上消息被接收前处理的都是逻辑消息队列中的逻辑消息。当消息 进入消息服务器的时候,会生成物理消息和相应的逻辑消息,将物 理消息插入内存消息队列中,将逻辑消息插入到逻辑消息队列中, 并通过引用使它们可以相互定位。直到消息最后被接收,中间操纵 的对象都是逻辑消息,因为逻辑消息中含有消息头,其已经含有处 理所需的必要信息,而且消息头所占的存储空间相对消息体少很多。 逻辑消息队列由许多子队列组成,每个子队列对应一个消息目的地。 因为对于不同的目的地消息的发送和接收是并发进行的,而且对同 一目的地是4安照先进先出的方式,所以可以为每个目的地维护一个 子逻辑队列,这样逻辑简单,而且效率很高消息进来的时候,根 据其目的地和优先级插入到相应子逻辑队列中( 一般就是对首);发 送消息的时候,从相应的子逻辑队列的队尾取得并删除消息就可以 了。
图5示意性地示出了物理消息队列的结构。如图5所示,物理 消息队列中存》文的是实际的物理消息。物理消息队列分为三个内 存消息队列;高速緩存消息队列;持久化消息队列。消息刚进入服 务器的时候,物理消息被插入到内存队列中;当内存的使用量达到 设定值时,消息会从内存消息队列置换到高速緩存消息队列。高速緩存消息队列持续根据内存的使用情况作用动态预测置换算法将一些消息块置换到持久化消息队列中。同时根据动态预取算法把将要接收块置换到高速緩存队列中。
图6示出了内存物理消息队列的结构。该队列的结构比较简单,
按照消息进入服务器的顺序排列在一起,不分目的地。 一般情况下,存的是在服务器上驻留时间不长的消息,此消息队列主要是为那些刚进入消息服务器不久就被接收的消息服务。
图7示出了内存物理消息队列管理的处理过程,如图7所示,具体包4舌以下处理
步骤71:消息进入服务器;
步骤72:生成对应的物理消息;
步骤73:物理消息插入内存队列队首,4要照先进先出原则。内存队列不分目的地,逻辑队列才分目的地;
步骤74:消息是否被接收,如果被接收则执行步骤5,否则执行步骤76;
步骤75:消息#皮*接收了,删除对应物理消息和逻辑消息;
步骤76:消息一直存在内存队列中,并随着驻留消息数量的增多和其他消息的接收逐步移向内存队列队尾;
步骤77:内存队列是否达到阀值,如果没有达到,则继续进行步骤76,否则进行步骤78;
步骤78:内存队列达到阀值,将队尾消息块移动到高速緩存队列中;图8示出了高速緩存消息队列的结构。高速緩存消息队列是最主要的物理消息队列。高速緩存消息队列由许多子消息队列组成,每个目的地对应一个子消息队列。这样构造是由于消息4乘作的块特性表现在同 一个目的地上的消息,对于不同的目的地,发送和4妄收是随机的,无法保证这种块特性。这样划分消息队列能保证同一块中的消息是同一目的地,块置换才有意义。所有进入高速緩存队列中的消息都会进行编块,即,将同样目的地一定数量的连续消息划分为一块,以便进行置换,并且换入换出以块为单位。
该方法以消息lt量编块,而没有考虑消息大小,因为对一^L的
应用来说,消息大小是按照正态分布的,绝大多数消息大小都是在一个较小范围波动,异常大小的消息所占比重4艮小。而且要计算消
息大小需要较多的CPU时间,得不偿失,故消息块就简单的以消息数量分块。
图9示出了高速緩存消息队列管理的步骤如下
步骤91:高速緩存消息队列接收从内存消息队列中置换过来的消息块;
步骤92:根据先进先出的原则按照目的地将消息块中每条消息插入到相应子消息队列的队首;
步骤93:消息是否被接收,如果是执行步骤94,否则执行步骤
95;
步骤94:删除对应物理消息和逻辑消息;步骤95:高速緩存队列存不断监控内存使用情况;步骤96:内存使用是否达到阀值,如果是执行步骤97,否则执行步骤95
步骤97:取得每个目的地队列上次计算出的衡量因子;
步骤98:取得本目的最接近队首的未被置换块到对尾的长度;
步骤99:取得本目的地消息被接收的速度;
步骤910:根据公式得出修正因子;
步骤911:根据公式为每个目的地队列计算衡量因子;
步骤912:选择最大衡量因子对应的目的地队列最接近队首的未被置换块;
步骤913:将选中的置换块置换到二级存储介质中;
步骤914:从内存中删除已被置换的消息块,以緩解内存压力。
下面介绍上述处理过程中公式的推导,本发明提出的动态置换方法包括置换出(内存)和置换入(内存)两个方面
对于置换出内存,实际是选择合适目的地的消息块来置换。采用置换方法的主要目的是为了减少f兹盘IO,在相同的影响下,将最有可能被接收的消息块留在高速緩存中,其综合考虑了本目的地驻留的消息数,本目的地消息接收速度等因素。将动态换出作用依据叫作衡量因子A,提出对应每个目的地的衡量因子计算公式为
An= VA"-,(LD *(1+&)其中,各符号的含义如下A为衡量因子;n为第n次计算,作为下标表示第n次测量的值;L为本目的最4矣近队首的未4皮置换块到对尾的长度;V为本目的地消息被接收的速度;&为修正因子。
选择An值最大的目的地对应的块进行置换出内存。下面解释此/>式推导过程
首先需要明确,对于同样的目的地队列而言,才艮据先进先出原则,越接近队首的消息越后被接收,越应该净皮置换。所以可以在同样的队列选择块时应该是最接近队首的块,当然,不一定是队首那个块,因为它可能在前面的置才灸选择中已经净皮置换出了。
L/V即是本目的地队列相应待选置换块到队尾的消息按照当前速度将会#:*接收完的时间,以此估算此待选置换块将在什么时长后被接收。本来以这个时间作为衡量因子也可以,它近似反应了本队列置换块被接收可能性的大小。但是考虑到实际情况,各个目的地队列消息被接收的速度不是恒定的,有时甚至波动很大,所以为了置换的准确性,引入了本次衡量因子和以前衡量因子的关系,让它
这样第n次的衡量因子和前n-l次都间接发生联系,其也就连续的反映了本目的地一直以来的消息驻留和接收情况。
最后还作用了一个修正因子&。引入它的目的是为了避免置换块的选择在不同的目的地之间波动太厉害。因为从道理上讲,本次选择了某个目的地队首附近的块作为置换块,则下次还选择此目的i也的几率应该增大,这才羊选择才具有连续't"生,并且也乂人侧面反映了上次选择的合理性。所以这个修正因子是和本目的地历史上被选择的情况相关的,如果其前若干次被选择,则趋向于后续也在此目的地上选纟奪,量化下来其计算方式^-^一1/2+c&n-,/4, 第n-l次选中本目的地
1---0+& -i/4, 第n-l次未选中本目的地
该乂>式的思想是如果上次选中,则其对本次有影响,并且影响 逐、渐半衰,并且所有的前面n-l此对本次老卩有影响。当然如果上次 没有选中,则上次对本次没有影响,但是前面累积的修正因子对本 次还是有影响的。
并且,在实际实现时,需要对该公式附加以下2个约束条4牛
(1 ) 一个块^皮置换入后(当然其以前应该^皮置换出),就不应 该再净皮置"l奐出了; (2)当前正在祸:,接收的消息块不应该:故置换出。
另外,应当注意,首先,并没有考虑消息进入队列的速度,因 为它对于当前选择置换块并无实际意义,其造成的影响是消息进入 后才体现出来的,而这个已经体现在算法的L值上了;其次,上面 的算法也并不能完美的达到预测与衡量,和避免波动。但是置换出 最主要的目的是降低内存使用,在这个目的下再尽量保证降低,兹盘 IO,而采用块的方式进行置换,已经从主要的因素降低了磁盘IO 次数,所以目的还是达到了。
对于置换入内存,提出了消息块预取算法,其原理很简单,就 是预先确保将要被接收的消息块在内存中。前面说明了消息系统具 有先进先出和消息目的地不多的特性。所以可以预知各个目的地下 一个将要被接收的消息块如果正在被接收的消息块为An,则被预 取的块就是An-l,其就是和正在^皮接收的队尾那个消息块An相邻 的消息块,可以在其被真正接收前将其导入到内存中。这种技术可 以称为消息系统的预取技术。这是特定于消息系统和提出的内存队 列管理方法的一种技术。而且消息系统的目的地不多,可以简单的
20为每个队列都进行预取,这样由于预取而导入内存的消息块也占用 不了太大内存,并保证消息可以被高效接收。预取在发生在某个消
息块变为的An-l时候,就是其变为和正在^^妄收的消息块相邻的那 个消息块的时候。这样保证了消息被接收的时候不会出现未命中的 情形。
从上面描述可以看出,消息块置换技术有点类似4喿作系统内存 换页技术,但是其又特定于消息系统,动态预取更使其优于一般换 页算法。有一点需要说明的是,消息块被置换出后,其对应的内存 数据结构还是在各个目的地队列上,仅仅是物理消息被持久化并释 ;改对应的内存空间,而且记录下了对应的持久4b信息,以《更后续可 以将对应的消息块预取进内存。这样也一直保证了消息队列消息块 的顺序。
图IO是持久化消息队列的结构,存的是一块块的消息,块内的 消息来自同一目的地。是一个由众多消息块构成的池,不再按目的 地区分。对应的物理存储方式可以很灵活,比如文件系统或者高性 能数据库
如图ll所示,持久化消息队列管理的步骤如下
步骤lll:接收从高速緩存置换出的消息块;
步骤112:将消息块按照一定组织存储在二级介质中;
步骤113:消息在各个目的地队列被持续接收;
步骤114:某消息块是否变成某目的地下一个将4皮接收块,如 果是,则执行步骤115,否则继续执行步骤113:步骤115:把某目的地下一个将被接收块导入高速緩存队列相 应目的地;
步骤116:删除二级介质中已经导入高速緩存队列的消息块。
步-骤117:消息^皮4妄收;
步骤118:删除对应物理消息和逻辑消息。
同时,还在各目的地队列上引入了消息丢弃机制。对于各种不 同要求应用,可以让其灵活设定丟弃算法,默i人提供了四种;^几制
(1 )当堆积消息达到设定数量时,按照一定比例丢弃队尾消息;
(2 )当堆积消息达到设定数量时,按照 一定比例丟弃队首消息;
(3) 当堆积消息达到设定数量时,拒绝接收新来的消息,直到 堆积消息降到 一 定比例;
(4) 永不丟弃消息。
这种控制可以在系统级i殳置,作用在所有目的地队列上;也可 以在具体某个目的地上设置,其优先级高于系统级设置。默认策略 是第一种,其既保证了队列不会无限制的堆积消息,又保证了消息 是较新的。
并且,针对消息系统的特征,引入消息过期机制,因为可能某 些消息永远都不会被接收,而作为垃圾残留在消息服务器上。分目 的地i殳定消息过期时间,并且定期一企测,如果消息过期则删除。
乂人上面的消息系统队列管理方法可以看到,真正消息月良务器路 由,发送和接收消息等部分的逻辑所操纵的消息(不管是逻辑消息,
22还是物理消息),其实都在内存中。而队列管理才莫块根据相应算法灵 活调整消息状态,在内存和持久化介质之间进行置换,来应对内存 波动。其消息收发速度基本上和完全内存消息队列的消息系统等同, 而这种管理方法又可以承受大量消息驻留(依赖持久化存储介质的 大小)。比较合理的解决了目前消息系统队列管理矛盾的两个方面。
综上所述,本发明基于目前消息队列管理的内存硬盘结合的模 式,充分利用消息系统特性,提出了结合逻辑队列、物理队列、以 及高速緩存三级物理消息队列管理、消息块动态预测置换等^L制的 队列管理4莫式,消除了消息在服务器内存中组织、复制、中转、和 作用规则等处理时消息体占用太多内存的问题,并且解决了相关技 术中消息积压时无法被高效接收的问题,并且提供了分目的地控制 的消息丢弃策略,从而满足不同应用的需求。借助于本发明的技术 方案,能够提高消息系统响应的及时性,减少消息管理过程中内存 的压力,并且能够提高消息系统承受巨大消息量的能力,有效提高 了消息接收的效率,使消息接收能够有条不紊的进行。
以上所述^f又为本发明的优选实施例而已,并不用于限制本发明, 对于本领域的^支术人员来"i兑,本发明可以有各种更改和变^f匕。凡在 本发明的精神和原则之内,所作的任何修改、等同替换、改进等, 均应包含在本发明的保护范围之内。
2权利要求
1. 一种消息管理方法,其特征在于,包括步骤S102,消息服务器将接收的消息分解为逻辑消息和相应的物理消息;步骤S104,将所述逻辑消息插入内存中的逻辑消息队列,并将所述物理消息插入内存中的物理消息队列,并根据预定规则将所述物理消息在所述内存的所述物理消息队列、高速缓存的物理消息队列、以及持久化存储器的物理消息队列之间进行置换;步骤S106,在所述消息被接收方接收时,所述接收方获取所述逻辑队列中的所述逻辑消息,并获取相应的物理消息。
2. 根据权利要求1所述的方法,其特征在于,所述高速緩存和所 述持久化存储器均位于所述消息服务器,并且,在所述接收方 获取所述逻辑消息和所述相应的物理消息后,删除所述消息服 务器上存储的所述逻辑消息和所述物理消息。
3. 根据权利要求2所述的方法,其特征在于,所述预定规则为当所述物理消息在所述内存中的存4诸时间达到第 一 时间 门限和/或所述内存的占用量达到第 一容量门限的情况下,将 所述物理消息转移至所述消息服务器的高速緩存中的物理消 息队列中,并将所述物理消息乂人所述内存中的所述物理消息队 列中删除;当所述物理消息在所述高速緩存中的存储时间达到第二 时间门限和/或所述高速緩存的占用量达到第二容量门限的情 况下,将所述物理消息转移至所述消息服务器的持久化存储器的物理消息队列中,并将所述物理消息从所述高速緩存中的所 述物理消息队列中删除。
4. 根据权利要求3所述的方法,其特征在于,在将所述物理消息 存储至所述内存的所述物理消息队列后,在到达所述第 一时间 门限和/或所述第一容量门限之前,将所述物理消息移动至其 所在的物理消息队列的队尾。
5. 4艮据权利要求3或4所述的方法,其特征在于,所述预定头见则 进一步包括确定所述高速i爰存的物理消息队列中的物理消息^皮4妻收 的优先级,并在所述物理消息所述高速緩存中的存储时间达到 所述第二时间门限和/或所述高速緩存的占用量达到所述第二 容量门限的情况下,优先将优先级最低的物理消息置换到所述 持久化存储器。
6. 根据权利要求5所述的方法,其特征在于,在所述步骤S106 中,在所述接收方接收所述消息时,以块为单位管理相应的物 理消息,并在确定下个要#皮<接收的物理消息所在的块4立于所述 持久化存储器中的情况下,将该物理消息导入所述高速緩存之 后再/人所述高速》爰存中4妄收该物理消息。
7. 才艮据4又利要求1、 2、 3、 4、和6中任一项所述的方法,其特 征在于,进一步包括在所述消息服务器上存储的所述消息满足预定丟弃条件 的情况下丢弃所述消息。
8. 根据权利要求1、 2、 3、 4、和6中任一项所述的方法,其特 征在于,所述内存的逻辑消息队列中的逻辑消息的目的地彼此 相同。
全文摘要
本发明公开了一种消息管理方法,包括步骤S102,消息服务器将接收的消息分解为逻辑消息和相应的物理消息;步骤S104,将逻辑消息插入内存中的逻辑消息队列,并将物理消息插入内存中的物理消息队列,并根据预定规则将物理消息从物理消息在内存的物理消息队列、高速缓存的物理消息队列、以及持久化存储器的物理消息队列之间进行置换;步骤S106,在消息被接收方接收时,接收方获取逻辑队列中的逻辑消息,并获取相应的物理消息。通过使用本发明,能够提高消息系统响应的及时性,减少消息管理过程中内存的压力,并且能够提高消息系统承受巨大消息量的能力,有效提高了消息接收的效率,使消息接收能够有条不紊的进行。
文档编号H04L12/58GK101459627SQ20081009065
公开日2009年6月17日 申请日期2008年4月7日 优先权日2008年4月7日
发明者锐 全, 孟照星, 罗秋野 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1