CN101459627A - 消息管理方法 - Google Patents

消息管理方法 Download PDF

Info

Publication number
CN101459627A
CN101459627A CNA2008100906557A CN200810090655A CN101459627A CN 101459627 A CN101459627 A CN 101459627A CN A2008100906557 A CNA2008100906557 A CN A2008100906557A CN 200810090655 A CN200810090655 A CN 200810090655A CN 101459627 A CN101459627 A CN 101459627A
Authority
CN
China
Prior art keywords
message
physical
physical message
queue
formation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA2008100906557A
Other languages
English (en)
Other versions
CN101459627B (zh
Inventor
全锐
孟照星
罗秋野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CN200810090655A priority Critical patent/CN101459627B/zh
Publication of CN101459627A publication Critical patent/CN101459627A/zh
Application granted granted Critical
Publication of CN101459627B publication Critical patent/CN101459627B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明公开了一种消息管理方法,包括:步骤S102,消息服务器将接收的消息分解为逻辑消息和相应的物理消息;步骤S104,将逻辑消息插入内存中的逻辑消息队列,并将物理消息插入内存中的物理消息队列,并根据预定规则将物理消息从物理消息在内存的物理消息队列、高速缓存的物理消息队列、以及持久化存储器的物理消息队列之间进行置换;步骤S106,在消息被接收方接收时,接收方获取逻辑队列中的逻辑消息,并获取相应的物理消息。通过使用本发明,能够提高消息系统响应的及时性,减少消息管理过程中内存的压力,并且能够提高消息系统承受巨大消息量的能力,有效提高了消息接收的效率,使消息接收能够有条不紊的进行。

Description

消息管理方法
技术领域
本发明涉及通信领域,并且特别地,涉及一种消息管理方法。
背景技术
消息系统能够在不同进程之间提供灵活的消息传递,在消息的传递过程中,发送和接收端松耦合的应用模式使其广泛应用在进程通信,系统集成等领域,成为将企业各种应用集成在一起的基础。
比较典型的消息系统是各种应用服务器的消息中间件,其可以实现跨平台操作,为不同操作系统上的应用软件集成提供服务,这也是J2EE规范的要求。例如,BEA的WebLogic,IBM的WebSphere,以及著名的开源应用服务器Jboss都有对应的消息服务器均是目前比较知名的应用服务器。
消息系统可以提供一种松耦合的应用模式。发送者将消息发送到服务器上特定目的地,接收者从特定目的地接收消息,发送端和接收端不直接发生联系。消息按照先进先出的原则被接收,所以每个目的地对应存在一个消息队列。消息的生产和消费可以完全异步的工作,通过消息服务器的目的地将二者联系起来,这种做法能够为应用提供了较大灵活性。
消息系统一般包括消息收发模块、队列管理模块、消息路由模块、以及规则处理模块等。其中,消息收发模块主要负责消息的接收和发送,其以并发的逻辑接收各个发送端发送到各个目的地的消息,并为接收端接收消息服务。消息路由模块主要负责消息在服务器上的路由,使消息到达服务器上的对应目的地并被相应接收。规则处理模块主要是作用过滤器等各种规则。队列管理模块主要是管理消息在服务器上的存储和队列组织方式,该模块是消息服务器压力最大的模块,其管理方式直接关系到消息服务器的效率、承受压力的能力、和响应收发端请求的及时性,也是消息服务器极有可能产生性能瓶颈的地方。
由于消息的发送和异步接收,在应用中可能出现下列情况:大量的发送者大压力发送消息,但相应接收者却无法及时接收处理消息,导致服务器上驻留大量消息。例如,在电信网管系统中,通过消息服务器来路由告警信息,如果遇到告警风暴,则短时间内(比如几十分钟)大量告警消息(如几十万条)进入服务器,在这种情况下就要求消息系统具备高效的队列管理能力,既能承受大量消息进入并驻留在服务器上,同时又不能因为驻留的消息过多而导致内存溢出或者降低效率。
现在的消息系统一般有三种队列管理模式:
(1)第一种是内存消息队列模式,其原理很简单,将消息全部放在内存中,这样,发送和接收的效率都很高,但是其最大的弱点就是不能驻留大量消息在服务器上,当消息风暴到来时,短时间会导致服务器内存溢出,或者停止接收消息,或者开始丢弃消息,一般小型消息服务器采用这种模式,其实现简单,消息量少;
(2)第二种是硬盘消息队列模式,其将消息存在二级存储介质中,服务器驻留消息的能力依赖存储介质的剩余空间,这种模式能够驻留大量消息在服务器上,但是由于消息实际存在二级存储介质中,所以消息传递的时候会有大量的硬盘IO操作,效率较低,使得整个消息服务器的响应能力降低,这种模式主要用在对收发消息速度要求不是很高但消息量大的场合;
(3)第三种是结合前两种模式,在内存不紧张的时候,采用内存消息队列,在由于消息大量驻留导致内存变得紧张时,使用硬盘消息队列模式,这种方式在一定程度上保证了效率,也能驻留大量的消息在服务器,是目前较好的一种模式,一些商用级的大型应用服务器消息中间件一般采用第(3)种模式。不过,这种模式在消息出现堆积的时候,处理方式与硬盘消息队列中的处理模式很类似,并且还存在大量磁盘IO操作,导致数据传输效率不能达到最优。究其根本原因,是由于这些方法都没有针对消息系统一些特征,而无法达到真正的高效。
然而,目前尚未提出能够解决上述三个问题的技术方案。
发明内容
考虑到上述问题而做出本发明,为此,本发明的主要目的在于提供一种消息管理方法,以解决相关技术中无法应对消息风暴、消息发送和接收效率低的问题。
根据本发明的实施例,提供了一种消息管理方法,包括:步骤S102,消息服务器将接收的消息分解为逻辑消息和相应的物理消息;步骤S104,将逻辑消息插入内存中的逻辑消息队列,并将物理消息插入内存中的物理消息队列,并根据预定规则将物理消息从物理消息在内存的物理消息队列、高速缓存的物理消息队列、以及持久化存储器的物理消息队列之间进行置换;步骤S106,在消息被接收方接收时,接收方获取逻辑队列中的逻辑消息,并获取相应的物理消息。
其中,高速缓存和持久化存储器均位于消息服务器,并且,在接收方获取逻辑消息和相应的物理消息后,删除消息服务器上存储的逻辑消息和物理消息。
此外,上述预定规则为:当物理消息在内存中的存储时间达到第一时间门限和/或内存的占用量达到第一容量门限的情况下,将物理消息转移至消息服务器的高速缓存中的物理消息队列中,并将物理消息从内存中的物理消息队列中删除;当物理消息在高速缓存中的存储时间达到第二时间门限和/或高速缓存的占用量达到第二容量门限的情况下,将物理消息转移至消息服务器的持久化存储器的物理消息队列中,并将物理消息从高速缓存中的物理消息队列中删除。
其中,在将物理消息存储至内存的物理消息队列后,在到达第一时间门限和/或第一容量门限之前,将物理消息移动至其所在的物理消息队列的队尾。
此外,预定规则还可以进一步包括:确定高速缓存的物理消息队列中的物理消息被接收的优先级,并在物理消息高速缓存中的存储时间达到第二时间门限和/或高速缓存的占用量达到第二容量门限的情况下,优先将优先级最低的物理消息置换到持久化存储器。
此外,在步骤S106中,在接收方接收消息时,在以块为单位管理相应的物理消息,并在确定下个要被接收的物理消息所在的块位于持久化存储器中的情况下,将该物理消息导入高速缓存之后再从高速缓存中接收该物理消息。
此外,该方法可进一步包括:在消息服务器上存储的消息满足预定丢弃条件的情况下丢弃消息。
内存的逻辑消息队列中的逻辑消息的目的地彼此相同。
通过本发明的上述技术方案,能够提高消息系统响应的及时性,减少消息管理过程中内存的压力,并且能够提高消息系统承受巨大消息量的能力,有效提高了消息接收的效率,使消息接收能够有条不紊的进行。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的消息管理方法的流程图;
图2是根据本发明实施例的方法中物理消息和逻辑消息的结构示意图;
图3是根据本发明实施例的方法中物理消息状态迁变的示意图;
图4是根据本实施例的方法中逻辑消息队列的示意图;
图5是根据本实施例的方法中物理消息队列的示意图;
图6是根据本发明实施例的内存物理消息队列的结构示意图;
图7是根据本发明实施例的方法中内存物理消息队列管理的流程图;
图8是根据本发明实施例的高速缓存消息队列的结构示意图;
图9是根据本发明实施例的方法中高速缓存消息队列管理的流程图;
图10是根据本发明实施例的持久化消息队列的结构示意图;以及
图11是根据本发明实施例的方法中持久化消息队列管理的流程图。
具体实施方式
在目前的消息接收和发送机制中,消息在服务器内部路由和作用规则等处理的时候,仅仅需要消息头就足够了,在最后被接收的时候,才真正需要消息体。
具体地,消息进入消息服务器后有几种情形:(a)立即被接收,一般目的地上的消息都是这种情形。(b)驻留短时间后被接收,主要是消息的接收者由于处理不及时导致了一定的消息堆积(堆积量不大,并且这种堆积效应不会持续下去),等堆积的消息处理完后,新进入的消息也将被接收。(c)驻留很长时间后才被接收,主要出现在两种情况:堆积了太多的消息,并且由于发送速度大于接收速度这种堆积效应会持续下去;接收者由于正在处理其他逻辑需要很久以后才能接收消息。(d)根本不会被接收,比如接收端不正常关闭可能导致这种情形。
各个目的地上的消息一般是以先进先出的方式通过消息服务器,这样在接收消息的时候总是顺序接收相邻的消息(当然,高优先级的消息会打乱这种顺序,不过在消息进入服务器时可以将高优先级的消息插入相应位置,这样在接收时也是顺序的),所以同一个目的地上的消息操作具有块特性,即使总的来说,相邻的消息是在一段相对相邻的时间内被处理;并且,一般消息系统的目的地不多,大多数在100个以下的数量级。
不同应用对目的地上队列管理的要求是不一样的,例如,对于某些实时性要求较高的应用来说,消息在服务器上积压太久,其被接收的意义已经不大了,因为其早已过时。
本发明正是基于一般消息系统的上述特征提出的。其提出了逻辑消息队列和物理消息队列,并将物理消息队列分为了内存消息队列,高速缓存消息队列和持久化消息队列。应当注意。这里说的消息队列是从内存管理角度描述的队列,不完全等同于消息服务器各个目的地的消息队列。
其中,逻辑消息队列中存放的元素是逻辑消息,其只含有消息头和到消息体的引用等信息;物理消息队列中存放的元素是物理消息,其含有消息体和到对应逻辑消息的引用等信息。在消息最后被接收以前服务器需要的都是逻辑消息,其占用的内存空间很少,全部驻留在内存中,可以随时高效访问。
物理消息队列由内存队列,高速缓存队列和持久化队列协同工作。内存队列中的消息完全驻留在内存中,其能够被高速接收;高速缓存队列的消息根据先进先出原则,使用动态预测置换算法(本发明提出了合理算法公式),将最不可能被接收的消息置换到二级存储介质中,而且以块(数条消息)的方式在内存和存储介质之间进行置换,减少了I/O操作。由于消息先进先出的特性,还可以结合提出了动态预取技术,从而达到100%的命中率(接收消息时消息正好在内存中);持久化队列存放的是在二级存储介质中的消息,介质可以是文件系统或者数据库,其按块的方式存储消息。下面将结合附图详细描述本发明的实施例。
在本实施例中,提供了一种消息管理方法。
如图1所示,根据本实施例的消息管理方法包括:步骤S102,消息服务器将接收的消息分解为逻辑消息和相应的物理消息;步骤S104,将逻辑消息插入内存中的逻辑消息队列,并将物理消息插入内存中的物理消息队列,并根据预定规则将物理消息在内存的物理消息队列、高速缓存的物理消息队列、以及持久化存储器的物理消息队列之间进行置换;步骤S106,在消息被接收方接收时,接收方获取逻辑队列中的逻辑消息,并获取相应的物理消息。
其中,高速缓存和持久化存储器均位于消息服务器,并且,在接收方获取逻辑消息和相应的物理消息后,删除消息服务器上存储的逻辑消息和物理消息。
此外,上述预定规则为:当物理消息在内存中的存储时间达到第一时间门限和/或内存的占用量达到第一容量门限的情况下,将物理消息转移至消息服务器的高速缓存中的物理消息队列中,并将物理消息从内存中的物理消息队列中删除;当物理消息在高速缓存中的存储时间达到第二时间门限和/或高速缓存的占用量达到第二容量门限的情况下,将物理消息转移至消息服务器的持久化存储器的物理消息队列中,并将物理消息从高速缓存中的物理消息队列中删除。
其中,在将物理消息存储至内存的物理消息队列后,在到达第一时间门限和/或第一容量门限之前,将物理消息移动至其所在的物理消息队列的队尾(可以是通过某种设置的规则进行移动)。
此外,预定规则还可以进一步包括:确定高速缓存的物理消息队列中的物理消息被接收的优先级,并在物理消息所述高速缓存中的存储时间达到第二时间门限和/或高速缓存的占用量达到第二容量门限的情况下,优先将优先级最低的物理消息置换到持久化存储器。即,将最可能被接收到的物理消息保留在高速缓存中,以减少I/O操作。
此外,在步骤S106中,在接收方接收消息时,在以块为单位管理相应的物理消息,并在确定下个要被接收的物理消息所在的块位于持久化存储器中的情况下,将该物理消息导入高速缓存内存之后再从所述高速缓存中接收该物理消息。
此外,该方法可进一步包括:在消息服务器上存储的消息满足预定丢弃条件的情况下丢弃消息。
内存的逻辑消息队列中的逻辑消息的目的地彼此相同。
在实际实现时,具体包括以下步骤:
步骤1:消息服务器接收到消息;
步骤2:消息进入服务器后,分解成对应的逻辑消息和物理消息,将逻辑消息插入相应目的地逻辑队列,将物理消息插入物理队列的内存队列中;
步骤3:逻辑消息作用各种相关规则,在服务器上路由并驻留,直到有接收者接收消息;
步骤4:如果某个目的地队列达到丢弃算法规定的条件,则直接丢弃相关消息,否则执行步骤5;
步骤5:消息由接收者接收,根据逻辑消息得到对应的物理消息,并发送给接收者;
步骤6:消息被接收,删除服务器上对应的逻辑消息和物理消息。
其中,方法关键是物理消息在队列中的管理和置换,置换的处理具体包含以下步骤:
步骤(1):消息体组织成物理消息;
步骤(2):物理消息进入内存队列;
步骤(3):物理消息在内存队列中被接收,从队列删除,否则执行步骤(4);
步骤(4):消息未被接收,物理消息随着时间被移动到内存消息队列队尾,并且内存消息队列达到阀值,将对应物理消息移动到高速缓存队列对应的目的地队列中;
步骤(5):物理消息在高速缓存中被接收,从对应目的地队列删除,否则执行步骤(6);
步骤(6):消息未被接收,服务器内存耗用由于消息驻留达到阀值,则作用动态置换算法,将符合条件的消息块置换到持久化消息队列中,并从内存中删除;
步骤(7):随着队列消息的接收,消息所在的块成为下个将要被接收块,如果消息块在持久化队列中,则动态预取算法将其导入到内存中。
步骤(8):消息被接收,发送消息给接收者,并删除对应消息。
由于接收者的原因,消息可能一直驻留在服务器上,因此可以采用目的地为单位的丢弃策略和消息过期机制的丢弃策略,丢弃策略可以包含丢弃队首消息、丢弃队尾消息、拒绝接收等机制。
下面结合附图对本发明消息队列管理方法进行说明。
图2示出了逻辑消息和物理消息的结构。如图2所示,物理消息是实际的消息,主要用来保存消息体等信息,并从它可以定位到逻辑消息,以便在将物理消息置换出内存时可以在逻辑消息上标记存储位置。逻辑消息是对消息的封装,具体包括消息编号,消息头,消息引用,消息持久化位置等。消息引用指向实际的物理消息,其可能存在内存队列中、高速缓存队列中、或者持久化队列中。如果消息引用指向的消息不为空,则说明消息在内存中(可能在内存队列或者高速消息队列中);如果为空,说明消息已经被置换出内存,在持久化队列中,持久化位置信息使其可以被重新导入到高速缓存中。
并且,消息服务器处理的是逻辑消息,它屏蔽了物理消息的位置和状态,使得消息服务器其他模块的逻辑简单清楚,在最后被接收前,逻辑消息包含的信息已经足够了。而且最重要的是它只占少量内存空间,保证所有的逻辑消息都可以驻留在内存中,以高效处理。
图3示出了物理消息在消息服务器上的状态变迁的示意图:
在图3中,数字1表示消息刚刚进入消息服务器,其处于active状态,存在内存队列中;
数字2表示消息由内存队列置换到高速缓存队列,处于cache状态;
数字3表示消息驻留在消息服务器上较长时间后,根据动态预测置换算法,被置换到二级存储介质中,处于inactive状态;
数字4表示消息所在块变为下个将要接收块时,根据预取算法从二级存储介质中导入到高速缓存接收块,重新处于cache态;
数字5表示消息刚进入消息服务器在内存消息队列中时就被接收,被接收后删除;
数字6表示消息在高速缓存中(可能已经经过了和二级存储介质的置换过程)被接收后删除。
此图表明了物理消息在消息服务器上可能的各种状态和状态变迁。其各种状态分别对应划分的几种消息队列和相应的队列管理方法。
图4示意性地示出了逻辑消息队列的结构。如图4所示,服务器上消息被接收前处理的都是逻辑消息队列中的逻辑消息。当消息进入消息服务器的时候,会生成物理消息和相应的逻辑消息,将物理消息插入内存消息队列中,将逻辑消息插入到逻辑消息队列中,并通过引用使它们可以相互定位。直到消息最后被接收,中间操纵的对象都是逻辑消息,因为逻辑消息中含有消息头,其已经含有处理所需的必要信息,而且消息头所占的存储空间相对消息体少很多。逻辑消息队列由许多子队列组成,每个子队列对应一个消息目的地。因为对于不同的目的地消息的发送和接收是并发进行的,而且对同一目的地是按照先进先出的方式,所以可以为每个目的地维护一个子逻辑队列,这样逻辑简单,而且效率很高:消息进来的时候,根据其目的地和优先级插入到相应子逻辑队列中(一般就是对首);发送消息的时候,从相应的子逻辑队列的队尾取得并删除消息就可以了。
图5示意性地示出了物理消息队列的结构。如图5所示,物理消息队列中存放的是实际的物理消息。物理消息队列分为三个:内存消息队列;高速缓存消息队列;持久化消息队列。消息刚进入服务器的时候,物理消息被插入到内存队列中;当内存的使用量达到设定值时,消息会从内存消息队列置换到高速缓存消息队列。高速缓存消息队列持续根据内存的使用情况作用动态预测置换算法将一些消息块置换到持久化消息队列中。同时根据动态预取算法把将要接收块置换到高速缓存队列中。
图6示出了内存物理消息队列的结构。该队列的结构比较简单,按照消息进入服务器的顺序排列在一起,不分目的地。一般情况下,存的是在服务器上驻留时间不长的消息,此消息队列主要是为那些刚进入消息服务器不久就被接收的消息服务。
图7示出了内存物理消息队列管理的处理过程,如图7所示,具体包括以下处理:
步骤71:消息进入服务器;
步骤72:生成对应的物理消息;
步骤73:物理消息插入内存队列队首,按照先进先出原则。内存队列不分目的地,逻辑队列才分目的地;
步骤74:消息是否被接收,如果被接收则执行步骤5,否则执行步骤76;
步骤75:消息被接收了,删除对应物理消息和逻辑消息;
步骤76:消息一直存在内存队列中,并随着驻留消息数量的增多和其他消息的接收逐步移向内存队列队尾;
步骤77:内存队列是否达到阀值,如果没有达到,则继续进行步骤76,否则进行步骤78;
步骤78:内存队列达到阀值,将队尾消息块移动到高速缓存队列中;
图8示出了高速缓存消息队列的结构。高速缓存消息队列是最主要的物理消息队列。高速缓存消息队列由许多子消息队列组成,每个目的地对应一个子消息队列。这样构造是由于消息操作的块特性表现在同一个目的地上的消息,对于不同的目的地,发送和接收是随机的,无法保证这种块特性。这样划分消息队列能保证同一块中的消息是同一目的地,块置换才有意义。所有进入高速缓存队列中的消息都会进行编块,即,将同样目的地一定数量的连续消息划分为一块,以便进行置换,并且换入换出以块为单位。
该方法以消息数量编块,而没有考虑消息大小,因为对一般的应用来说,消息大小是按照正态分布的,绝大多数消息大小都是在一个较小范围波动,异常大小的消息所占比重很小。而且要计算消息大小需要较多的CPU时间,得不偿失,故消息块就简单的以消息数量分块。
图9示出了高速缓存消息队列管理的步骤如下:
步骤91:高速缓存消息队列接收从内存消息队列中置换过来的消息块;
步骤92:根据先进先出的原则按照目的地将消息块中每条消息插入到相应子消息队列的队首;
步骤93:消息是否被接收,如果是执行步骤94,否则执行步骤95;
步骤94:删除对应物理消息和逻辑消息;
步骤95:高速缓存队列存不断监控内存使用情况;
步骤96:内存使用是否达到阀值,如果是执行步骤97,否则执行步骤95
步骤97:取得每个目的地队列上次计算出的衡量因子;
步骤98:取得本目的最接近队首的未被置换块到对尾的长度;
步骤99:取得本目的地消息被接收的速度;
步骤910:根据公式得出修正因子;
步骤911:根据公式为每个目的地队列计算衡量因子;
步骤912:选择最大衡量因子对应的目的地队列最接近队首的未被置换块;
步骤913:将选中的置换块置换到二级存储介质中;
步骤914:从内存中删除已被置换的消息块,以缓解内存压力。
下面介绍上述处理过程中公式的推导,本发明提出的动态置换方法包括置换出(内存)和置换入(内存)两个方面:
对于置换出内存,实际是选择合适目的地的消息块来置换。采用置换方法的主要目的是为了减少磁盘IO,在相同的影响下,将最有可能被接收的消息块留在高速缓存中,其综合考虑了本目的地驻留的消息数,本目的地消息接收速度等因素。将动态换出作用依据叫作衡量因子A,提出对应每个目的地的衡量因子计算公式为:
Figure A200810090655D00181
其中,各符号的含义如下:A为衡量因子;n为第n次计算,作为下标表示第n次测量的值;L为本目的最接近队首的未被置换块到对尾的长度;V为本目的地消息被接收的速度;&为修正因子。
选择An值最大的目的地对应的块进行置换出内存。下面解释此公式推导过程:
首先需要明确,对于同样的目的地队列而言,根据先进先出原则,越接近队首的消息越后被接收,越应该被置换。所以可以在同样的队列选择块时应该是最接近队首的块,当然,不一定是队首那个块,因为它可能在前面的置换选择中已经被置换出了。
L/V即是本目的地队列相应待选置换块到队尾的消息按照当前速度将会被接收完的时间,以此估算此待选置换块将在什么时长后被接收。本来以这个时间作为衡量因子也可以,它近似反应了本队列置换块被接收可能性的大小。但是考虑到实际情况,各个目的地队列消息被接收的速度不是恒定的,有时甚至波动很大,所以为了置换的准确性,引入了本次衡量因子和以前衡量因子的关系,让它们相乘并进行开方运算以降低速度剧烈波动造成的算法抖动,并且这样第n次的衡量因子和前n-1次都间接发生联系,其也就连续的反映了本目的地一直以来的消息驻留和接收情况。
最后还作用了一个修正因子&。引入它的目的是为了避免置换块的选择在不同的目的地之间波动太厉害。因为从道理上讲,本次选择了某个目的地队首附近的块作为置换块,则下次还选择此目的地的几率应该增大,这样选择才具有连续性,并且也从侧面反映了上次选择的合理性。所以这个修正因子是和本目的地历史上被选择的情况相关的,如果其前若干次被选择,则趋向于后续也在此目的地上选择,量化下来其计算方式:
Figure A200810090655D00201
该公式的思想是如果上次选中,则其对本次有影响,并且影响逐渐半衰,并且所有的前面n-1此对本次都有影响。当然如果上次没有选中,则上次对本次没有影响,但是前面累积的修正因子对本次还是有影响的。
并且,在实际实现时,需要对该公式附加以下2个约束条件:
(1)一个块被置换入后(当然其以前应该被置换出),就不应该再被置换出了;(2)当前正在被接收的消息块不应该被置换出。
另外,应当注意,首先,并没有考虑消息进入队列的速度,因为它对于当前选择置换块并无实际意义,其造成的影响是消息进入后才体现出来的,而这个已经体现在算法的L值上了;其次,上面的算法也并不能完美的达到预测与衡量,和避免波动。但是置换出最主要的目的是降低内存使用,在这个目的下再尽量保证降低磁盘IO,而采用块的方式进行置换,已经从主要的因素降低了磁盘IO次数,所以目的还是达到了。
对于置换入内存,提出了消息块预取算法,其原理很简单,就是预先确保将要被接收的消息块在内存中。前面说明了消息系统具有先进先出和消息目的地不多的特性。所以可以预知各个目的地下一个将要被接收的消息块:如果正在被接收的消息块为An,则被预取的块就是An-1,其就是和正在被接收的队尾那个消息块An相邻的消息块,可以在其被真正接收前将其导入到内存中。这种技术可以称为消息系统的预取技术。这是特定于消息系统和提出的内存队列管理方法的一种技术。而且消息系统的目的地不多,可以简单的为每个队列都进行预取,这样由于预取而导入内存的消息块也占用不了太大内存,并保证消息可以被高效接收。预取在发生在某个消息块变为的An-1时候,就是其变为和正在被接收的消息块相邻的那个消息块的时候。这样保证了消息被接收的时候不会出现未命中的情形。
从上面描述可以看出,消息块置换技术有点类似操作系统内存换页技术,但是其又特定于消息系统,动态预取更使其优于一般换页算法。有一点需要说明的是,消息块被置换出后,其对应的内存数据结构还是在各个目的地队列上,仅仅是物理消息被持久化并释放对应的内存空间,而且记录下了对应的持久化信息,以便后续可以将对应的消息块预取进内存。这样也一直保证了消息队列消息块的顺序。
图10是持久化消息队列的结构,存的是一块块的消息,块内的消息来自同一目的地。是一个由众多消息块构成的池,不再按目的地区分。对应的物理存储方式可以很灵活,比如文件系统或者高性能数据库
如图11所示,持久化消息队列管理的步骤如下:
步骤111:接收从高速缓存置换出的消息块;
步骤112:将消息块按照一定组织存储在二级介质中;
步骤113:消息在各个目的地队列被持续接收;
步骤114:某消息块是否变成某目的地下一个将被接收块,如果是,则执行步骤115,否则继续执行步骤113:
步骤115:把某目的地下一个将被接收块导入高速缓存队列相应目的地;
步骤116:删除二级介质中已经导入高速缓存队列的消息块。
步骤117:消息被接收;
步骤118:删除对应物理消息和逻辑消息。
同时,还在各目的地队列上引入了消息丢弃机制。对于各种不同要求应用,可以让其灵活设定丢弃算法,默认提供了四种机制:
(1)当堆积消息达到设定数量时,按照一定比例丢弃队尾消息;
(2)当堆积消息达到设定数量时,按照一定比例丢弃队首消息;
(3)当堆积消息达到设定数量时,拒绝接收新来的消息,直到堆积消息降到一定比例;
(4)永不丢弃消息。
这种控制可以在系统级设置,作用在所有目的地队列上;也可以在具体某个目的地上设置,其优先级高于系统级设置。默认策略是第一种,其既保证了队列不会无限制的堆积消息,又保证了消息是较新的。
并且,针对消息系统的特征,引入消息过期机制,因为可能某些消息永远都不会被接收,而作为垃圾残留在消息服务器上。分目的地设定消息过期时间,并且定期检测,如果消息过期则删除。
从上面的消息系统队列管理方法可以看到,真正消息服务器路由,发送和接收消息等部分的逻辑所操纵的消息(不管是逻辑消息,还是物理消息),其实都在内存中。而队列管理模块根据相应算法灵活调整消息状态,在内存和持久化介质之间进行置换,来应对内存波动。其消息收发速度基本上和完全内存消息队列的消息系统等同,而这种管理方法又可以承受大量消息驻留(依赖持久化存储介质的大小)。比较合理的解决了目前消息系统队列管理矛盾的两个方面。
综上所述,本发明基于目前消息队列管理的内存硬盘结合的模式,充分利用消息系统特性,提出了结合逻辑队列、物理队列、以及高速缓存三级物理消息队列管理、消息块动态预测置换等机制的队列管理模式,消除了消息在服务器内存中组织、复制、中转、和作用规则等处理时消息体占用太多内存的问题,并且解决了相关技术中消息积压时无法被高效接收的问题,并且提供了分目的地控制的消息丢弃策略,从而满足不同应用的需求。借助于本发明的技术方案,能够提高消息系统响应的及时性,减少消息管理过程中内存的压力,并且能够提高消息系统承受巨大消息量的能力,有效提高了消息接收的效率,使消息接收能够有条不紊的进行。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (8)

1.一种消息管理方法,其特征在于,包括:
步骤S102,消息服务器将接收的消息分解为逻辑消息和相应的物理消息;
步骤S104,将所述逻辑消息插入内存中的逻辑消息队列,并将所述物理消息插入内存中的物理消息队列,并根据预定规则将所述物理消息在所述内存的所述物理消息队列、高速缓存的物理消息队列、以及持久化存储器的物理消息队列之间进行置换;
步骤S106,在所述消息被接收方接收时,所述接收方获取所述逻辑队列中的所述逻辑消息,并获取相应的物理消息。
2.根据权利要求1所述的方法,其特征在于,所述高速缓存和所述持久化存储器均位于所述消息服务器,并且,在所述接收方获取所述逻辑消息和所述相应的物理消息后,删除所述消息服务器上存储的所述逻辑消息和所述物理消息。
3.根据权利要求2所述的方法,其特征在于,所述预定规则为:
当所述物理消息在所述内存中的存储时间达到第一时间门限和/或所述内存的占用量达到第一容量门限的情况下,将所述物理消息转移至所述消息服务器的高速缓存中的物理消息队列中,并将所述物理消息从所述内存中的所述物理消息队列中删除;
当所述物理消息在所述高速缓存中的存储时间达到第二时间门限和/或所述高速缓存的占用量达到第二容量门限的情况下,将所述物理消息转移至所述消息服务器的持久化存储器的物理消息队列中,并将所述物理消息从所述高速缓存中的所述物理消息队列中删除。
4.根据权利要求3所述的方法,其特征在于,在将所述物理消息存储至所述内存的所述物理消息队列后,在到达所述第一时间门限和/或所述第一容量门限之前,将所述物理消息移动至其所在的物理消息队列的队尾。
5.根据权利要求3或4所述的方法,其特征在于,所述预定规则进一步包括:
确定所述高速缓存的物理消息队列中的物理消息被接收的优先级,并在所述物理消息所述高速缓存中的存储时间达到所述第二时间门限和/或所述高速缓存的占用量达到所述第二容量门限的情况下,优先将优先级最低的物理消息置换到所述持久化存储器。
6.根据权利要求5所述的方法,其特征在于,在所述步骤S106中,在所述接收方接收所述消息时,以块为单位管理相应的物理消息,并在确定下个要被接收的物理消息所在的块位于所述持久化存储器中的情况下,将该物理消息导入所述高速缓存之后再从所述高速缓存中接收该物理消息。
7.根据权利要求1、2、3、4、和6中任一项所述的方法,其特征在于,进一步包括:
在所述消息服务器上存储的所述消息满足预定丢弃条件的情况下丢弃所述消息。
8.根据权利要求1、2、3、4、和6中任一项所述的方法,其特征在于,所述内存的逻辑消息队列中的逻辑消息的目的地彼此相同。
CN200810090655A 2008-04-07 2008-04-07 消息管理方法 Active CN101459627B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN200810090655A CN101459627B (zh) 2008-04-07 2008-04-07 消息管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN200810090655A CN101459627B (zh) 2008-04-07 2008-04-07 消息管理方法

Publications (2)

Publication Number Publication Date
CN101459627A true CN101459627A (zh) 2009-06-17
CN101459627B CN101459627B (zh) 2012-09-05

Family

ID=40770263

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200810090655A Active CN101459627B (zh) 2008-04-07 2008-04-07 消息管理方法

Country Status (1)

Country Link
CN (1) CN101459627B (zh)

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102255794A (zh) * 2010-05-17 2011-11-23 塔塔咨询服务有限公司 远程消息收发吞吐量优化和等待时间缩短用系统和方法
CN103390049A (zh) * 2013-07-23 2013-11-13 南京联创科技集团股份有限公司 一种基于内存数据库缓存的高速消息队列溢出的处理方法
CN103473329A (zh) * 2013-09-17 2013-12-25 广州市信息安全测评中心 持久化数据队列及其加载的方法和装置
CN103716151A (zh) * 2012-10-09 2014-04-09 华通宇联(北京)技术有限公司 一种密钥表项智能分配方法及装置
CN103838547A (zh) * 2012-11-27 2014-06-04 中国电信股份有限公司 一种队列的管理方法和装置
CN103885769A (zh) * 2012-12-20 2014-06-25 英特尔移动通信有限责任公司 调试基于模型的消息序列的系统和方法
WO2014190622A1 (zh) * 2013-05-30 2014-12-04 中兴通讯股份有限公司 一种离线消息的存储方法及服务器
CN104378746A (zh) * 2013-11-19 2015-02-25 北京齐尔布莱特科技有限公司 短信发送方法和系统
CN106130868A (zh) * 2016-06-02 2016-11-16 腾讯科技(深圳)有限公司 一种回调消息的处理方法和队列管理系统
CN103428072B (zh) * 2012-05-23 2017-03-08 北京大学 一种持久化消息的发布方法及系统
WO2017063506A1 (zh) * 2015-10-15 2017-04-20 中兴通讯股份有限公司 消息持久化方法及装置
CN103516580B (zh) * 2012-06-26 2017-06-23 北京大学 一种基于消息队列实现消息接收与转发的方法及系统
CN108337326A (zh) * 2011-03-11 2018-07-27 谷歌有限责任公司 机会性网络更新
CN111538600A (zh) * 2020-02-25 2020-08-14 远景智能国际私人投资有限公司 消息处理方法、装置、计算机设备及存储介质
CN113296970A (zh) * 2020-06-29 2021-08-24 阿里巴巴集团控股有限公司 消息处理、消息队列管理方法及装置
CN113467969A (zh) * 2021-06-22 2021-10-01 上海星融汽车科技有限公司 一种处理消息堆积的方法
CN114138520A (zh) * 2020-05-13 2022-03-04 浙江创邻科技有限公司 分布式消息处理方法及系统

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6704835B1 (en) * 2000-09-26 2004-03-09 Intel Corporation Posted write-through cache for flash memory
AU2002248570B2 (en) * 2001-03-07 2007-09-20 Oracle International Corporation Managing checkpoint queues in a multiple node system
EP1505506A1 (en) * 2003-08-05 2005-02-09 Sap Ag A method of data caching
US8082396B2 (en) * 2005-04-28 2011-12-20 International Business Machines Corporation Selecting a command to send to memory

Cited By (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102255794B (zh) * 2010-05-17 2014-07-30 塔塔咨询服务有限公司 远程消息收发吞吐量优化和等待时间缩短用系统和方法
CN102255794A (zh) * 2010-05-17 2011-11-23 塔塔咨询服务有限公司 远程消息收发吞吐量优化和等待时间缩短用系统和方法
CN108337326A (zh) * 2011-03-11 2018-07-27 谷歌有限责任公司 机会性网络更新
CN103428072B (zh) * 2012-05-23 2017-03-08 北京大学 一种持久化消息的发布方法及系统
CN103516580B (zh) * 2012-06-26 2017-06-23 北京大学 一种基于消息队列实现消息接收与转发的方法及系统
CN103716151A (zh) * 2012-10-09 2014-04-09 华通宇联(北京)技术有限公司 一种密钥表项智能分配方法及装置
CN103716151B (zh) * 2012-10-09 2017-11-28 西瑞克斯通信技术股份有限公司 一种密钥表项智能分配方法及装置
CN103838547A (zh) * 2012-11-27 2014-06-04 中国电信股份有限公司 一种队列的管理方法和装置
CN103885769A (zh) * 2012-12-20 2014-06-25 英特尔移动通信有限责任公司 调试基于模型的消息序列的系统和方法
CN103885769B (zh) * 2012-12-20 2017-05-17 英特尔德国有限责任公司 调试基于模型的消息序列的系统
WO2014190622A1 (zh) * 2013-05-30 2014-12-04 中兴通讯股份有限公司 一种离线消息的存储方法及服务器
CN104216659A (zh) * 2013-05-30 2014-12-17 中兴通讯股份有限公司 一种离线消息的存储方法及服务器
CN103390049A (zh) * 2013-07-23 2013-11-13 南京联创科技集团股份有限公司 一种基于内存数据库缓存的高速消息队列溢出的处理方法
CN103473329A (zh) * 2013-09-17 2013-12-25 广州市信息安全测评中心 持久化数据队列及其加载的方法和装置
CN104378746A (zh) * 2013-11-19 2015-02-25 北京齐尔布莱特科技有限公司 短信发送方法和系统
WO2017063506A1 (zh) * 2015-10-15 2017-04-20 中兴通讯股份有限公司 消息持久化方法及装置
CN106130868A (zh) * 2016-06-02 2016-11-16 腾讯科技(深圳)有限公司 一种回调消息的处理方法和队列管理系统
CN111538600A (zh) * 2020-02-25 2020-08-14 远景智能国际私人投资有限公司 消息处理方法、装置、计算机设备及存储介质
CN111538600B (zh) * 2020-02-25 2023-09-12 远景智能国际私人投资有限公司 消息处理方法、装置、计算机设备及存储介质
CN114138520A (zh) * 2020-05-13 2022-03-04 浙江创邻科技有限公司 分布式消息处理方法及系统
CN113296970A (zh) * 2020-06-29 2021-08-24 阿里巴巴集团控股有限公司 消息处理、消息队列管理方法及装置
CN113296970B (zh) * 2020-06-29 2024-03-01 阿里巴巴集团控股有限公司 消息处理、消息队列管理方法及装置
CN113467969A (zh) * 2021-06-22 2021-10-01 上海星融汽车科技有限公司 一种处理消息堆积的方法
CN113467969B (zh) * 2021-06-22 2024-01-23 上海星融汽车科技有限公司 一种处理消息堆积的方法

Also Published As

Publication number Publication date
CN101459627B (zh) 2012-09-05

Similar Documents

Publication Publication Date Title
CN101459627B (zh) 消息管理方法
CN101616083B (zh) 一种报文转发方法和装置
CN100459574C (zh) 对网络流进行分类、状态跟踪和报文处理的装置和方法
CN103309738B (zh) 用户作业调度方法及装置
WO2008003617A1 (en) Methods, apparatus and computer programs for managing persistence
CN104092717B (zh) 消息处理方法及系统、消息目的端设备
US20080063004A1 (en) Buffer allocation method for multi-class traffic with dynamic spare buffering
EP2676189B1 (en) Sorting
Mukherjee et al. Asymptotic optimality of power-of-d load balancing in large-scale systems
CN101604261B (zh) 超级计算机的任务调度方法
CN102508872A (zh) 一种基于内存的联机处理系统的数据处理方法及系统
CN109120713A (zh) 消息发送失败的处理方法及系统、装置和存储介质
CN108881492B (zh) 一种解决消息处理顺序及疏导消息处理的方法
CN101188575B (zh) 一种面向发布订阅系统的流量控制和消息缓存方法
CN107870982A (zh) 数据处理方法、系统和计算机可读存储介质
US20150052205A1 (en) System and method for flexible holding storage during messaging
CN107589990A (zh) 一种基于线程池的数据通讯的方法及系统
Gamarnik et al. A lower bound on the queueing delay in resource constrained load balancing
CN101795273B (zh) 一种垃圾邮件过滤方法及装置
CN105049372A (zh) 一种扩展消息中间件吞吐量的方法及系统
CN100444580C (zh) 用于控制从分布式系统到中央系统的数据流的方法和系统
CN102546423A (zh) 队列调度方法、装置及网络设备
CN102056097A (zh) 基于网关的消息发送方法及Parlay X网关
CN109586780A (zh) 卫星网络中防止报文阻塞的方法
CN113612773B (zh) 人工智能实现的智能报文识别和解析系统与方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant